0

はい、私はParseが来年閉会することを知っていますが、なんらかの理由でそれを使用する必要があります。何が起こっているのは、アプリがアクティブになっているとき、またはバックグラウンドでさえもプッシュ通知の部分が正常に機能しているということですが、アプリを終了すると、彼はもう実行していないということです。私はたくさんの検索を行い、すべての人がアクティビティの代わりにアプリケーションにParse.initialize(...)を配置するように指示しています。実際には何をしていますか。私のプロジェクトに何が間違っているかについての手がかりは?ここでアプリが解散された後に解析プッシュ通知がクラッシュする

は私のAndroidManifest.xmlです:ここで

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
package="com.package.parse" > 

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
<uses-permission android:name="android.permission.USE_CREDENTIALS" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 
<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_TASKS" /> 

<permission 
    android:name="com.package.parse.permission.C2D_MESSAGE" 
    android:protectionLevel="signature" /> 

<uses-permission android:name="com.package.parse.permission.C2D_MESSAGE" /> 


<application 
    android:name=".app.MyApp" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme" 
    tools:replace="android:icon"> 
    <meta-data 
     android:name="com.google.android.gms.version" 
     android:value="@integer/google_play_services_version" /> 
    <meta-data 
     android:name="com.google.android.maps.v2.API_KEY" 
     android:value="@string/google_maps_key" /> 
    <meta-data 
     android:name="com.google.android.urlshortener.API_KEY" 
     android:value="@string/google_maps_key"/> 
    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/fb_app_id" /> 

    <service android:name="com.parse.PushService" /> 

    <provider android:authorities="com.facebook.app.FacebookContentProvider16..." 
     android:name="com.facebook.FacebookContentProvider" 
     android:exported="true"/> 

    <receiver 
     android:name=".receiver.CustomPushReceiver" 
     android:exported="false"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <action android:name="android.intent.action.USER_PRESENT" /> 
      <action android:name="com.parse.push.intent.RECEIVE" /> 
      <action android:name="com.parse.push.intent.DELETE" /> 
      <action android:name="com.parse.push.intent.OPEN" /> 
     </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="com.package.parse" /> 
     </intent-filter> 
    </receiver> 

    <meta-data android:name="com.parse.push.gcm_sender_id" 
     android:value="id:21159024005" />; 

    <meta-data 
     android:name="com.parse.push.notification_icon" 
     android:resource="@drawable/ic_launcher" /> 

    <activity 
     android:name=".ui.Home" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:theme="@style/AppTheme.NoActionBar" > 
     <meta-data 
      android:name="android.app.searchable" 
      android:resource="@xml/searchable" /> 

     <intent-filter> 
      <action android:name="android.intent.action.SEARCH" /> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

</application> 

は私のアプリケーションです:

public class MyApp extends Application { 

private static MyApp instance; 
public static PreferencesManager prefs; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    instance = this; 

PreferencesManager.initializeInstance(context); 
    prefs = PreferencesManager.getInstance(); 

    if(isLogged()) { 
     doParseStuff(); 
    } 
} 

public void configureParse(){ 


    Parse.initialize(this, AppConfig.PARSE_APPLICATION_ID, AppConfig.PARSE_CLIENT_KEY); 
    ParseInstallation installation = ParseInstallation.getCurrentInstallation(); 
    installation.put("GCMSenderId", this.getString(R.string.google_app_id)); 
    installation.saveInBackground(); 

    registerParse(); 
    ParseInstallation.getCurrentInstallation().saveInBackground(); 
} 

public static void registerParse() { 
    final String channel = MyApp.getCurrentUser() != null && 
      !TextUtils.isEmpty(MyApp.getCurrentUser().getUsername()) ? MyApp.getCurrentUser().getUsername() : ""; 

    if(!TextUtils.isEmpty(channel)){ 
     ParsePush.subscribeInBackground(channel, new SaveCallback() { 
      @Override 
      public void done(ParseException e) { 
        MyApp.setParseConfigured(true); 

      } 
     }); 
    } 

} 

@Override 
protected void attachBaseContext(Context base) { 
    super.attachBaseContext(base); 

    MultiDex.install(this); 

} 

public static boolean isLogged() { 
    return prefs.getBoolean(Constants.SharedPreferences.IS_LOGGED); 
} 

public static void setLogged(boolean b) { 
    prefs.setValue(Constants.SharedPreferences.IS_LOGGED, b); 
} 

public static boolean isParseConfigured() { 
    return prefs.getBoolean(Constants.SharedPreferences.IS_PARSE_CONFIGURED); 
} 

public static void setParseConfigured(boolean b) { 
    prefs.setValue(Constants.SharedPreferences.IS_PARSE_CONFIGURED, b); 
} 

public static void setCurrentUser(CurrentUser user){ 

    prefs.setValue(Constants.SharedPreferences.USER, JSONUtils.getJSONString(user)); 

    instance.doParseStuff(); 
} 

private void doParseStuff(){ 

     if(!isParseConfigured()) { 
      configureParse(); 
     } 
} 

public static CurrentUser getCurrentUser(){ 
    return (CurrentUser) JSONUtils.getJSONObject(prefs.getString(Constants.SharedPreferences.USER), CurrentUser.class); 
} 

} 

そして、ここでは私のCustomPushReceiverです:

​​

そして最後のエラーロG:

java.lang.RuntimeException: Unable to create service com.parse.PushService: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.parse.ParsePlugins$Android.applicationContext()' on a null object reference 
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2905) 
at android.app.ActivityThread.-wrap4(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5443) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context com.parse.ParsePlugins$Android.applicationContext()' on a null object reference 
at com.parse.PushService.onCreate(PushService.java:230) 
at android.app.ActivityThread.handleCreateService(ActivityThread.java:2895) 
at android.app.ActivityThread.-wrap4(ActivityThread.java) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1437) 
at android.os.Handler.dispatchMessage(Handler.java:102) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5443) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

EDIT 1

これはデPushService、ライン230内のコードです:それはちょうどlibのバージョンパースリリースの最後に発生しています思える

if (ParsePlugins.Android.get().applicationContext() == null) { 
    PLog.e(TAG, "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."); 
    stopSelf(); 
    return; 
} 
+0

「PushService」の行番号230はどれですか –

+0

@ρяσѕρєяKこのコードで質問を編集しました。 –

+0

Danielは 'ParsePlugins.Android.get()'を返す 'null'を意味します。 ParsePlugins.Android.get()! = null){...あなたのコードはここに} ' –

答えて

0

ので、私compile 'com.parse:parse-android:1.+'からダウングレードして'com.parse:parse-android:1.10.1'をコンパイルして解決しました。また、アプリが死んだときに通知を受け取るには、installation.put("GCMSenderId", this.getString(R.string.google_app_id));部分を削除しなければなりませんでした。

関連する問題