Desidero aggiungere il servizio di notifica push parse.com alla mia app Cordova. Ho letto la guida rapida di parse.com e ho inserito il file SDK nella cartella libs. dopo di che ho aggiunto i codici al file java principale e AndroidManifest.xml. l'app funziona correttamente. parse.com può ricevere il mio token dispositivo e posso inviare notifiche push al dispositivo, ma dopo due o tre notifiche push l'app si blocca.apache cordova si blocca dopo aver ricevuto notifica push parse.com
il messaggio di errore nel CatLog è questo:
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 [email protected] 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
questo è il mio principale di file java:
/*
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();
}
}
e il mio file manifest.xml è:
<?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>
I ho cercato e sembra che molti sviluppatori abbiano esattamente lo stesso problema. Ho trovato due argomenti in parse.com forum di assistenza: https://www.parse.com/questions/app-crashes-after-after-screen-unlock https://www.parse.com/questions/cannot-send-push-to-android-after-app-is-closed-until-screen-unlock e questa qui: Android App crashes when push is received and app is closed
ma le soluzioni non è chiaro per qualcuno che non conoscono Java. Come posso modificare il mio AndroidManifest.xml e il file java principale per farlo funzionare.
grazie in anticipo
grazie mille :) sta funzionando come un fascino ora –