【问题标题】:Parse push notifications crashes eventually on background in android解析推送通知最终在 android 的后台崩溃
【发布时间】:2014-12-16 14:08:48
【问题描述】:

我正在使用 Parse 在 android 中推送通知,但是当我关闭 wifi 时它最终在后台崩溃。

它给了我错误:

java.lang.RuntimeException:无法启动接收器 com.parse.ParseBroadcastReceiver:java.lang.RuntimeException:applicationContext 为空。在使用 Parse 库之前,您必须调用 Parse.initialize(context, applicationId, clientKey)。

这是我的代码

public class ParseBroadcastReceiverCustom extends BroadcastReceiver {

@Override
public void onReceive(final Context context, Intent intent) {
    if(intent == null)
        return;
    ConnectionDetector connection = new ConnectionDetector(context);

    if (connection.isNetworkAvailable()) {
        PushService.startServiceIfRequired(context);
    }
}
}

在清单文件中

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

主要活动的onCreate方法

    ConnectionDetector connection = new ConnectionDetector(this);
    if (connection.isNetworkAvailable()) {
        PushService.setDefaultPushCallback(this, RegisterForget.class);
    }

请帮忙

【问题讨论】:

    标签: android parse-platform push-notification


    【解决方案1】:
    1. PushService 已完全弃用新 API,您可以通过在清单中声明 ParsePushBroadcastReceiver 来启用这些 API。您可以在announcement blogpost 中阅读有关推送的更改。
    2. 您的答案在错误消息中。调用 Parse.initialze。您的活动的 onCreate 应该有 Parse.initialize(this, "YOUR APPLICATION ID", "YOUR CLIENT KEY"); 如果您将此代码放在 Activity 而不是您的应用程序中,那么 Android 可能会由于不活动而关闭您的应用程序,然后通过推送意图而不是您的启动器 Activity 重新启动它,在这种情况下您不会调用 Parse.initialize。

    【讨论】:

    • 我将主要活动的调用更改为 Parse.initialize(this,APPLICATION_ID,CLIENT_ID); ParsePush.subscribeInBackground("频道");并删除了我的自定义接收器和应用程序类 if (connection.isNetworkAvailable()) { Parse.initialize(getApplicationContext(),CommonUtilities.APPLICATION_ID,CommonUtilities.CLIENT_ID); ParsePush.subscribeInBackground("频道"); ParseInstallation.getCurrentInstallation().saveInBackground(); } 仍然没有收到任何通知
    • 我不是 100% 确定你想用 ParseBroadcastReceiverCustom 做什么。它不扩展 ParsePushBroadcastReceiver,未在清单中注册,并且在不调用 super 的情况下覆盖 onReceive。此外,您应该只需要一次调用 Parse.initialize 并且它应该在您的 Application 类中,而不是 Activity 类中。最后,请停止调用 PushService 上的方法;你不需要它们。
    • 我不再使用 PushService 并且不再使用自定义接收器,正如您在我的上一条评论中看到的那样
    • 抱歉,您的评论有点不清楚您的最终代码是什么样的。编辑您的问题以使代码 sn-ps 保持最新将有很大帮助。让我们从诊断注册开始: 1. 您是否看到在数据浏览器中创建了安装对象? 2.如果你调用Parse.setLogLevel(Parse.LOG_LEVEL_VERBOSE),你在logcat中看到任何相关信息吗?
    • 好的,让我们从头开始吧。是的,我有来自仪表板的客户端 ID 和应用程序 ID,昨天我可以向我的应用程序发送许多通知,但是当我关闭 wifi 时它最终崩溃了,所以我试图修复错误,但现在我无法再收到通知了,这是应用程序类 Parse.initialize(getApplicationContext(),CommonUtilities.APPLICATION_ID,CommonUtilities.CLIENT_ID);ParsePush.subscribeInBackground("channel"); ParseInstallation.getCurrentInstallation().saveInBackground();并在主要活动 ParsePush.subscribeInBackground("channel");logcat 中没有信息
    【解决方案2】:

    我一步一步地按照这个教程,它现在可以工作了 https://parse.com/tutorials/android-push-notifications

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多