繁体   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