簡體   English   中英

Parse.com推送通知不會到達后台設備

[英]Parse.com push notifications don't get to devices on background

今天,我已經在我的應用程序中實現了Parse.com Push服務。 我注意到只有在應用打開時才發送推送通知。 我還注意到,每當我打開設備電源時,都會顯示一條消息,“不幸的是,tof已停止”。 Logcat說無法啟動接收器。

完整的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)

我試圖在Web上搜索,但沒有找到任何解決方案。 我想這與接收器后台操作有關。

我需要盡快回答,因此,如果您對Parse 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);
    }
}

我現在需要重大幫助!! 請幫我!

請按照以下步驟操作。 此代碼可以正常運行,並在后台運行接收器。 原始答案鏈接: 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" />

看看這個。

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

我了解了為什么我沒有在后台收到推送通知。

我已經在OpenActivity.javaParseApplication.java上初始化了兩次解析sdk的ParseApplication.java 我已經從OpenActivity.java其刪除,並添加了以下代碼行:

android:name=".ParseApplication"

現在轉到AndroidManifest.xml上的application屬性,現在我可以在后台獲取推送通知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM