2016-06-11 4 views
0

Я разработал гибридное приложение, использующее кордову. Я загрузил его в Google Play и магазин приложений. Пользователи сообщили, что они получают сообщение «К сожалению, xxx закрылся» (xxx представляет имя приложения). Во время тестирования я не могу воспроизвести проблему. Странная часть - это получение пользователями этого сообщения, когда они не используют мое приложение. У меня были следующие плагины, установленные в моем приложении.Приложение Кордовы неожиданно закрывается

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 не получают это сообщение об аварии. Только пользователи Android сообщили об этой проблеме.

Вот мой AndroidManifest.xml файл

<?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> 

У меня было две функции в своем коде, который Invoke автоматически. Оба используются для синхронизации данных с сервером.

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

и

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

    }); 

Будет ли этот вызов функций в фоновом режиме? Сохранятся ли эти функции после закрытия приложения? Я не мог найти ничего необычного во время отладки. Может ли кто-нибудь мне помочь?

Update

Я нашел два сценария это произошло:

  1. Я изменяющее состояние сети в режим полета из-за сеть вопроса. Вдруг я получил сообщение, что К сожалению xxx остановился
  2. Мой GPS был отключен. Я пытался открыть карты Google. Я получил сообщение с карты Google, чтобы включить GPS. В то время я включил GPS, я получил сообщение, что, к сожалению ххх перестал

ответ

1

Как уже упоминалось в this question, это вызвано ошибкой в ​​[email protected], отметил, как issue #85 в plugin repo и решается путем выпуска патча [email protected]. Обновление плагина и восстановление вашего приложения должно устранить проблему:

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

Спасибо за быстрый ответ. Я не заметил этого вопроса. Infact, я не знал, какой плагин вызывает эту ошибку. Когда эта проблема возникла, я обнаружил два разных сценария. Я тоже поднял вопрос. Я использую диагностический плагин для проверки статуса разрешения GPS. Таким образом, это может быть проблемой второго сценария. Но какова будет причина второго сценария? Есть идеи ? –

+0

Оба сценария вызваны вышеупомянутой ошибкой и будут исправлены путем обновления плагина – DaveAlden

+0

Хорошо спасибо. Я только что обновил плагин. Позвольте мне попробовать случайные тестовые примеры. Оцените свой ответ и указав это –

Смежные вопросы