2015-09-13 49 views
0

今天我已經在我的應用中實施了Parse.com推送服務。 我注意到推送通知只在應用程序打開時才被髮送。我也注意到,只要我打開設備,就會有一條消息顯示「不幸的是,tof已經停止」。 Logcat說無法啓動接收器。Parse.com推送通知不會到達背景設備

完整的logcat:

java.lang.RuntimeException: Unable to start receiver com.parse.ParseBroadcastReceiver: 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.handleReceiver(ActivityThread.java:2952) 
     at android.app.ActivityThread.access$1800(ActivityThread.java:172) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:145) 
     at android.app.ActivityThread.main(ActivityThread.java:5832) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1399) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
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.Parse.checkContext(Parse.java:440) 
     at com.parse.Parse.getApplicationContext(Parse.java:270) 
     at com.parse.ManifestInfo.getContext(ManifestInfo.java:324) 
     at com.parse.ManifestInfo.getPackageManager(ManifestInfo.java:328) 
     at com.parse.ManifestInfo.getPackageInfo(ManifestInfo.java:358) 
     at com.parse.ManifestInfo.deviceSupportsGcm(ManifestInfo.java:446) 
     at com.parse.ManifestInfo.getPushType(ManifestInfo.java:212) 
     at com.parse.PushService.startServiceIfRequired(PushService.java:222) 
     at com.parse.ParseBroadcastReceiver.onReceive(ParseBroadcastReceiver.java:19) 
     at android.app.ActivityThread.handleReceiver(ActivityThread.java:2945) 
     at android.app.ActivityThread.access$1800(ActivityThread.java:172) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1499) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:145) 
        at android.app.ActivityThread.main(ActivityThread.java:5832) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 

我試圖在網絡上搜索,但我沒有找到任何解決方案。我想這是關於接收器後臺操作的東西。

我需要一個儘可能快的答案,所以如果你知道一些關於解析SDK和它的推動話題,請幫助我,因爲我需要今天解決這個

這是我的代碼。
MainActivity.java:

ParsePush parsePush = new ParsePush(); 
ParseQuery pQuery = ParseInstallation.getQuery(); // <-- Installation query 
pQuery.whereEqualTo("username", User_Name); 
parsePush.sendMessageInBackground(message, pQuery); 

的AndroidManifest.xml:

<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.GET_ACCOUNTS" /> 
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" /> 

<!-- 
    IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below 
    to match your app's package name + ".permission.C2D_MESSAGE". 
--> 
<permission android:protectionLevel="signature" 
    android:name="com.intap.tof.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.intap.tof.permission.C2D_MESSAGE" /> 

... 

<service android:name="com.parse.PushService" /> 
    <receiver android:name="com.intap.tof.Receiver" 
     android:exported="false"> 
     <intent-filter> 
      <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" /> 

      <!-- 
       IMPORTANT: Change "com.parse.starter" to match your app's package name. 
      --> 
      <category android:name="com.intap.tof" /> 
     </intent-filter> 
    </receiver> 

我也有Receiver.java這一行:

package com.intap.tof; 

import android.content.Context; 
import android.content.Intent; 

import com.parse.ParsePushBroadcastReceiver; 

public class Receiver extends ParsePushBroadcastReceiver { 

    @Override 
    public void onPushOpen(Context context, Intent intent) { 
     Intent i = new Intent(context, MainActivity.class); 
     i.putExtras(intent.getExtras()); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(i); 
    } 
} 

我需要重點扶持的現在!請幫幫我!

+0

你好??有人可以幫幫我嗎? –

回答

0

採取我明白了爲什麼我沒有得到背景上的推送通知。

我初始化解析SDK兩次 - 在OpenActivity.javaParseApplication.java。我從OpenActivity.java刪除,並添加以下代碼行:

android:name=".ParseApplication" 

要在AndroidManifest.xmlapplication屬性,現在我可以在後臺推送通知。

0

請按照以下步驟操作。此代碼正常工作,並在後臺運行接收器。原來答案鏈接:https://www.parse.com/apps/quickstart#parse_push/android/native/existing

MainActivity.java文件

public void onCreate() { 
    Parse.initialize(this, "APPLICATION ID", "CLIENT KEY"); 
    ParseInstallation.getCurrentInstallation().saveInBackground(); 
} 

AndroidManifest.xml文件

<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.ParsePushBroadcastReceiver" 
    android:exported="false"> 
    <intent-filter> 
    <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" /> 

    <!-- 
     IMPORTANT: Change "com.parse.starter" to match your app's package name. 
    --> 
    <category android:name="com.parse.starter" /> 
    </intent-filter> 
</receiver> 

權限。

<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" /> 

<!-- 
    IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below 
    to match your app's package name + ".permission.C2D_MESSAGE". 
--> 
<permission android:protectionLevel="signature" 
    android:name="com.parse.starter.permission.C2D_MESSAGE" /> 
<uses-permission android:name="com.parse.starter.permission.C2D_MESSAGE" /> 
+0

這正是我的代碼。看看那邊。 –

0

看看這個。

public class MainApplication extends Application { 
    private static MainApplication instance = new MainApplication(); 

    public MainApplication() { 
     instance = this; 
    } 

    public static Context getContext() { 
     return instance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Parse.initialize(this, " ", " "); 
     PushService.setDefaultPushCallback(this, FabulaClient.class); 
     PushService.subscribe(this, "Barca", FabulaClient.class); 
     ParseInstallation.getCurrentInstallation().saveInBackground(); 
    } 
} 

https://www.parse.com/questions/cannot-send-push-to-android-after-app-is-closed-until-screen-unlock

相關問題