App apache cordova se bloquea después de recibir la notificación push parse.com

Quiero añadir el servicio de notificación push de parse.com a mi aplicación Cordova. He leído la guía de inicio rápido de parse.com y he colocado el archivo SDK en la carpeta libs. Después de eso he añadido los códigos al archivo java principal y AndroidManifest.xml. La aplicación funciona correctamente. Parse.com puede recibir mi token de dispositivo y puedo enviar una notificación de empuje al dispositivo, pero después de dos o tres notificaciones push la aplicación se bloqueará.

El mensaje de error en el catlog es el siguiente:

05-07 02:08:25.185: E/com.parse.PushService(28735): The Parse push service cannot start because Parse.initialize has not yet been called. If you call Parse.initialize from an Activity's onCreate, that call should instead be in the Application.onCreate. Be sure your Application class is registered in your AndroidManifest.xml with the android:name property of your <application> tag. 05-07 02:08:25.185: D/AndroidRuntime(28735): Shutting down VM 05-07 02:08:25.185: W/dalvikvm(28735): threadid=1: thread exiting with uncaught exception (group=0x41b0de48) 05-07 02:08:25.185: E/AndroidRuntime(28735): FATAL EXCEPTION: main 05-07 02:08:25.185: E/AndroidRuntime(28735): Process: ir.wedesign.pushapp, PID: 28735 05-07 02:08:25.185: E/AndroidRuntime(28735): java.lang.RuntimeException: Unable to start service com.parse.PushService@42b596a8 with Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10 pkg=ir.wedesign.pushapp cmp=ir.wedesign.pushapp/com.parse.PushService (has extras) }: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library. 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2726) 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.app.ActivityThread.access$2100(ActivityThread.java:139) 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1297) 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.os.Handler.dispatchMessage(Handler.java:102) 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.os.Looper.loop(Looper.java:136) 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.app.ActivityThread.main(ActivityThread.java:5105) 05-07 02:08:25.185: E/AndroidRuntime(28735): at java.lang.reflect.Method.invokeNative(Native Method) 05-07 02:08:25.185: E/AndroidRuntime(28735): at java.lang.reflect.Method.invoke(Method.java:515) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608) 05-07 02:08:25.185: E/AndroidRuntime(28735): at dalvik.system.NativeStart.main(Native Method) 05-07 02:08:25.185: E/AndroidRuntime(28735): Caused by: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library. 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.Parse.checkContext(Parse.java:557) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.Parse.getApplicationContext(Parse.java:165) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.ManifestInfo.getContext(ManifestInfo.java:221) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.ManifestInfo.getPackageManager(ManifestInfo.java:229) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.ManifestInfo.getPackageInfo(ManifestInfo.java:240) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.ManifestInfo.deviceSupportsGcm(ManifestInfo.java:325) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.ManifestInfo.getPushType(ManifestInfo.java:109) 05-07 02:08:25.185: E/AndroidRuntime(28735): at com.parse.PushService.onStartCommand(PushService.java:377) 05-07 02:08:25.185: E/AndroidRuntime(28735): at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2709) 05-07 02:08:25.185: E/AndroidRuntime(28735): ... 10 more 

Este es mi archivo java principal:

 /* Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package ir.wedesign.pushapp; import android.os.Bundle; import org.apache.cordova.*; import com.parse.Parse; import com.parse.ParseAnalytics; import com.parse.ParseInstallation; import com.parse.PushService; public class PushApp extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); // Set by <content src="index.html" /> in config.xml super.loadUrl(Config.getStartUrl()); //super.loadUrl("file:///android_asset/www/index.html"); Parse.initialize(this, "xJK9ZA0Dtsjd8RwoNUUsIHPXzMRbmcxXGWqiw", "19g9eUKjLjlUdogHEXStUABNcvy2rA6azb5mXy"); PushService.setDefaultPushCallback(this, PushApp.class); ParseInstallation.getCurrentInstallation().saveInBackground(); } } 

Y mi archivo manifest.xml es:

 <?xml version='1.0' encoding='utf-8'?> <manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" android:windowSoftInputMode="adjustPan" package="ir.wedesign.pushapp" 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" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> <permission android:protectionLevel="signature" android:name="ir.wedesign.pushapp.permission.C2D_MESSAGE" /> <uses-permission android:name="ir.wedesign.pushapp.permission.C2D_MESSAGE" /> <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="PushApp" android:theme="@android:style/Theme.Black.NoTitleBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name="com.parse.PushService" /> <receiver android:name="com.parse.ParseBroadcastReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.USER_PRESENT" /> </intent-filter> </receiver> <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <action android:name="com.google.android.c2dm.intent.REGISTRATION" /> <category android:name="ir.wedesign.pushapp" /> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> </manifest> 

He buscado y parece que muchos desarrolladores tienen exactamente el mismo problema. He encontrado dos temas en el foro de ayuda de parse.com: https://www.parse.com/questions/app-crashes-after-after-screen-unlock https://www.parse.com/questions/cannot- Enviar-empujar-a-androide-después de la aplicación-es-cerrado-hasta-pantalla-desbloquear y este aquí: Aplicación de Android se bloquea cuando se recibe push y la aplicación está cerrada

Pero las soluciones no está claro para alguien que no conoce java. ¿Cómo puedo cambiar mi archivo AndroidManifest.xml y main java para que funcione.

gracias por adelantado

2 Solutions collect form web for “App apache cordova se bloquea después de recibir la notificación push parse.com”

El servicio de inserción de Parse no se puede iniciar porque Parse.initialize todavía no se ha llamado. Si llama a Parse.initialize desde la actividad OnCreate de una actividad, esa llamada debería estar en Application.onCreate. Asegúrese de que su clase de aplicación esté registrada en su AndroidManifest.xml con la propiedad android: name de su etiqueta.

Intente separar la actividad y la aplicación, cree un nuevo archivo de la clase por ejemplo MainApplication.

PushApp.java:

 public class PushApp extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); // Set by <content src="index.html" /> in config.xml super.loadUrl(Config.getStartUrl()); //super.loadUrl("file:///android_asset/www/index.html"); } } 

MainApplication.java:

 public class MainApplication extends Application { @Override public void onCreate() { super.onCreate(); Parse.initialize(this, "xJK9ZA0Dtsjd8RwoNUUsIHPXzMRbmcxXGWqiw", "19g9eUKjLjlUdogHEXStUABNcvy2rA6azb5mXy"); PushService.setDefaultPushCallback(this, PushApp.class); ParseInstallation.getCurrentInstallation().saveInBackground(); } } 

y cambio:

 <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="PushApp" android:theme="@android:style/Theme.Black.NoTitleBar"> 

a:

 <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="MainApplication" android:theme="@android:style/Theme.Black.NoTitleBar"> 

Ahora también deberías recibir notificaciones push cuando la aplicación esté cerrada / la pantalla esté bloqueada

Compruebe su manifest.xml si nombró el <application> como android:name="MainApplication"

Y la <activity> como android:name="PushApp"

  • No se puede resolver el símbolo 'GoogleCloudMessaging' GCM
  • Notificaciones push / C2DM para Kindle Fire?
  • ¿Cuáles son las consecuencias de tener el ID de SENDER de GCM expuesto?
  • PHP del servidor GCM - Error 401 no autorizado
  • Notificaciones Locales en Cordova 3.0.0
  • No se puede resolver "com.google.android.gms.gcm.GcmReceiver"?
  • Cómo agregar una notificación de inserción en mi propia aplicación de Android
  • ¿Cómo suprimir la notificación push se muestra cuando la aplicación se está ejecutando?
  • Mensajería en la nube de Google: limitación de 100 remitentes múltiples
  • Cómo determinar si la aplicación de Android se abre desde el mensaje de notificación?
  • Anular el registro de un dispositivo de GCM mediante la identificación de registro en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.