2016-06-11 5 views
0

Ich entwickelte eine Hybrid-App mit Cordova. Ich habe es in Google Play und App Store hochgeladen. Benutzer haben gemeldet, dass sie eine Nachricht erhalten "Leider hat xxx geschlossen" (xxx steht für den App-Namen). Während des Tests kann ich das Problem nicht reproduzieren. Der komische Teil ist, dass Benutzer diese Nachricht erhalten, wenn sie meine App nicht verwenden. Ich hatte die folgenden Plugins in meiner App installiertCordova App schließt unerwartet

cordova-plugin-camera 2.2.1-dev "Camera" 
cordova-plugin-compat 1.0.0 "Compat" 
cordova-plugin-device 1.1.1 "Device" 
cordova-plugin-file 4.1.0 "File" 
cordova-plugin-file-transfer 1.5.0 "File Transfer" 
cordova-plugin-geolocation 2.1.0 "Geolocation" 
cordova-plugin-inappbrowser 1.4.0 "InAppBrowser" 
cordova-plugin-network-information 1.2.0 "Network Information" 
cordova-plugin-splashscreen 3.2.2 "Splashscreen" 
cordova-plugin-statusbar 2.1.4-dev "StatusBar" 
cordova-plugin-whitelist 1.2.2 "Whitelist" 
cordova-plugin-x-toast 2.3.2 "Toast" 
cordova-sqlite-storage 0.7.14 "Cordova sqlite storage plugin" 
cordova.plugins.diagnostic 3.0.2 "Diagnostic" 
ionic-plugin-keyboard 2.2.0 "Keyboard" 
phonegap-plugin-barcodescanner 5.0.0 "BarcodeScanner" 
phonegap-plugin-push 1.6.4 "PushPlugin" 

IOS-Benutzer erhalten diese Absturzmeldung nicht. Nur Android-Benutzer haben dieses Problem gemeldet.

Hier ist meine AndroidManifest.xml Datei

<?xml version='1.0' encoding='utf-8'?> 
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.xxx.yy" xmlns:android="http://schemas.android.com/apk/res/android"> 
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true"> 
     <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize"> 
      <intent-filter android:label="@string/launcher_name"> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name="cordova.plugins.Diagnostic$LocationProviderChangedReceiver"> 
      <intent-filter> 
       <action android:name="android.location.PROVIDERS_CHANGED" /> 
      </intent-filter> 
     </receiver> 
     <activity android:clearTaskOnLaunch="true" android:configChanges="orientation|keyboardHidden|screenSize" android:exported="false" android:name="com.google.zxing.client.android.CaptureActivity" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> 
      <intent-filter> 
       <action android:name="com.google.zxing.client.android.SCAN" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity android:label="Share" android:name="com.google.zxing.client.android.encode.EncodeActivity"> 
      <intent-filter> 
       <action android:name="com.phonegap.plugins.barcodescanner.ENCODE" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity android:label="Share" android:name="com.google.zxing.client.android.HelpActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
     <activity android:exported="true" android:name="com.adobe.phonegap.push.PushHandlerActivity" /> 
     <receiver android:name="com.adobe.phonegap.push.BackgroundActionButtonHandler" /> 
     <receiver android:exported="true" android:name="com.google.android.gms.gcm.GcmReceiver" android:permission="com.google.android.c2dm.permission.SEND"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
       <category android:name="${applicationId}" /> 
      </intent-filter> 
     </receiver> 
     <service android:exported="false" android:name="com.adobe.phonegap.push.GCMIntentService"> 
      <intent-filter> 
       <action android:name="com.google.android.c2dm.intent.RECEIVE" /> 
      </intent-filter> 
     </service> 
     <service android:exported="false" android:name="com.adobe.phonegap.push.PushInstanceIDListenerService"> 
      <intent-filter> 
       <action android:name="com.google.android.gms.iid.InstanceID" /> 
      </intent-filter> 
     </service> 
     <service android:exported="false" android:name="com.adobe.phonegap.push.RegistrationIntentService" /> 
    </application> 
    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="23" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.FLASHLIGHT" /> 
    <uses-feature android:name="android.hardware.camera" android:required="false" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
    <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature" /> 
    <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" /> 
</manifest> 

Ich hatte zwei Funktionen in meinem Code, der automatisch aufrufen. Beide werden verwendet, um die Daten mit dem Server zu synchronisieren.

$interval(function() { 
     var isOnline = $cordovaNetwork.isOnline(); 
     if (isOnline) { 
      $scope.syncData(); 
     } 
    }, 900000) 

und

$rootScope.$on('$cordovaNetwork:online', function(event, networkState) { 
     if ($scope.isLoggedIn) { 
      var onlineState = networkState; 
      console.log('Online State', onlineState); 
      $scope.syncData(); 
     } 

    }); 

wird diese Funktionen aufrufen, im Hintergrund? Bleiben diese Funktionen auch nach dem Schließen der App bestehen? Ich konnte beim Debuggen nichts ungewöhnliches finden. Kann mir jemand helfen?

aktualisieren

fand ich zwei Szenarien dies geschah:

  1. ich aufgrund Netzwerk Ausgabe des Netzwerkstatus in den Flugmodus wurde geändert wird. Plötzlich bekam ich die Nachricht, dass leider xxx gestoppt wurde
  2. Mein GPS war deaktiviert. Ich habe versucht, Google Maps zu öffnen. Ich habe eine Nachricht von Google Map, um GPS zu aktivieren. Zu der Zeit, ich GPS aktiviert ist, ich bekam Nachricht, die leider xxx

Antwort

1

in this question Wie erwähnt gestoppt hat, das durch einen Fehler in [email protected] verursacht wird, festgestellt, wie issue #85 im plugin repo und wird durch Patch-Release [email protected] aufgelöst. Das Aktualisieren des Plugins und das Neuerstellen Ihrer App sollten das Problem beheben:

$ cordova plugin rm cordova.plugins.diagnostic && 
    cordova plugin add [email protected] && 
    cordova build android --release 
+0

Danke für die schnelle Antwort. Das ist mir nicht aufgefallen. Tatsächlich wusste ich nicht, welches Plugin diesen Fehler verursacht. Ich habe zwei verschiedene Szenarien gefunden, als dieses Problem auftrat. Ich habe auch meine Frage verbessert. Ich benutze das Diagnose-Plugin, um den GPS-Erlaubnisstatus zu überprüfen. Das könnte das Problem des zweiten Szenarios sein. Aber was wird der Grund für das zweite Szenario sein? Irgendeine Idee ? –

+0

Beide Szenarien sind durch den oben genannten Fehler verursacht und werden durch die Aktualisierung des Plugins behoben. – DaveAlden

+0

Ok danke. Ich habe das Plugin gerade aktualisiert. Lass mich einige zufällige Testfälle ausprobieren. Schätzen Sie Ihre Antwort und weisen Sie darauf hin –