Android不从parse推送接收推送通知,当应用程序被关闭 [英] Android doesn't receive push notification from Parse Push when app is closed

查看:289
本文介绍了Android不从parse推送接收推送通知,当应用程序被关闭的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我测试的解析推到我的Andr​​oid手机来通过,只要在应用程序运行的推送通知。 如果应用程序被关闭:我刚刚得到一个消息,说<应用程序名称>已停止 - 我没有收到任何推 - 但仍然得到了停止通知弹出。我遵循了解析一步一步快速入门指南。

< XML版本=1.0编码=UTF-8? > <舱单的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android     包=org.ostsia.ostsia>     <使用-权限的Andr​​oid:名称=android.permission.INTERNET对/>     <使用-权限的Andr​​oid:名称=android.permission.ACCESS_NETWORK_STATE/>     <使用-权限的Andr​​oid:名称=android.permission.WAKE_LOCK/>     <使用-权限的Andr​​oid:名称=android.permission.VIBRATE/>     <使用-权限的Andr​​oid:名称=android.permission.RECEIVE_BOOT_COMPLETED/>     <使用-权限的Andr​​oid:名称=android.permission.GET_ACCOUNTS/>     <使用-权限的Andr​​oid:名称=com.google.android.c2dm.permission.RECEIVE/>     <! -       重要提示:在下面的线条变com.parse.starter.permission.C2D_MESSAGE       以满足您的应用程序的包名+.permission.C2D_MESSAGE。      - >     <许可安卓的ProtectionLevel =签名         机器人:名称=org.ostsia.ostsia.permission.C2D_MESSAGE/>     <使用-权限的Andr​​oid:名称=org.ostsia.ostsia.permission.C2D_MESSAGE/>     <应用         机器人:allowBackup =真         机器人:图标=@可绘制/ ostsia         机器人:标签=@字符串/ APP_NAME         机器人:主题=@风格/ AppTheme>         <活动             机器人:名称=org.ostsia.ostsia.MainActivity             机器人:标签=@字符串/ APP_NAME>             <意向滤光器>                 <作用机器人:名称=android.intent.action.MAIN/>                 <类机器人:名称=android.intent.category.LAUNCHER/>             &所述; /意图滤光器>         < /活性GT;         <服务机器人:名称=com.parse.PushService/>         <接收器的Andr​​oid版本:NAME =com.parse.ParseBroadcastReceiver>             <意向滤光器>                 <作用机器人:名称=android.intent.action.BOOT_COMPLETED/>                 <作用机器人:名称=android.intent.action.USER_ preSENT/>             &所述; /意图滤光器>         < /接收器>         <接收器的Andr​​oid版本:NAME =com.parse.ParsePushBroadcastReceiver             机器人:出口=假>             <意向滤光器>                 <作用机器人:名称=com.parse.push.intent.RECEIVE/>                 <作用机器人:名称=com.parse.push.intent.DELETE/>                 <作用机器人:名称=com.parse.push.intent.OPEN/>             &所述; /意图滤光器>         < /接收器>         <接收器的Andr​​oid版本:NAME =com.parse.GcmBroadcastReceiver             机器人:权限=com.google.android.c2dm.permission.SEND>             <意向滤光器>                 <作用机器人:名称=com.google.android.c2dm.intent.RECEIVE/>                 <作用机器人:名称=com.google.android.c2dm.intent.REGISTRATION/>                 <! -                   重要提示:改变com.parse.starter,以配合您的应用程序包名称。                  - >                 <类机器人:名称=org.ostsia.ostsia/>             &所述; /意图滤光器>         < /接收器>     < /用途> < /舱单>

 

03-03 21:27:10.829 31149-31149 / org.ostsia.ostsia E / com.parse.PushService:解析推送服务无法启动​​,因为Parse.initialize尚未调用。如果从活动的onCreate调用Parse.initialize,该呼叫而是应该在Application.onCreate。要确保您的应用程序类被注册在AndroidManifest.xml中与安卓的name属性的<应用>标签。 03-03 21:27:10.829 31149-31149 / org.ostsia.ostsia D / AndroidRuntime:关闭虚拟机 03-03 21:27:10.839 31149-31149 / org.ostsia.ostsia E / AndroidRuntime:致命异常:主要     工艺:org.ostsia.ostsia,PID:31149     java.lang.RuntimeException的:无法启动服务com.parse.PushService@4d17bf6意图{行为= com.google.android.c2dm.intent.RECEIVE FLG = 0x10的PKG = org.ostsia.ostsia CMP = org.ostsia.ostsia /com.parse.PushService(有演员)}:java.lang.RuntimeException的:ApplicationContext就是空。使用解析库前必须先调用Parse.initialize(背景下,的applicationID,clientKey)。             在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3278)             在android.app.ActivityThread.access $ 2200(ActivityThread.java:172)             在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1520)             在android.os.Handler.dispatchMessage(Handler.java:102)             在android.os.Looper.loop(Looper.java:145)             在android.app.ActivityThread.main(ActivityThread.java:5834)             在java.lang.reflect.Method.invoke(本机方法)             在java.lang.reflect.Method.invoke(Method.java:372)             在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1388)             在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)      致:java.lang.RuntimeException的:ApplicationContext就是空。使用解析库前必须先调用Parse.initialize(背景下,的applicationID,clientKey)。             在com.parse.Parse.checkContext(Parse.java:451)             在com.parse.Parse.getApplicationContext(Parse.java:219)             在com.parse.ManifestInfo.getContext(ManifestInfo.java:322)             在com.parse.ManifestInfo.getPackageName(ManifestInfo.java:326)             在com.parse.ManifestInfo.getIntentReceivers(ManifestInfo.java:131)             在com.parse.ManifestInfo.hasIntentReceiver(ManifestInfo.java:123)             在com.parse.ManifestInfo.getPushUsesBroadcastReceivers(ManifestInfo.java:174)             在com.parse.PushService.wipeRoutingAndUpgradePushStateIfNeeded(PushService.java:454)             在com.parse.PushService.onStartCommand(PushService.java:435)             在android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3261) 在android.app.ActivityThread.access $ 2200(ActivityThread.java:172) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1520) 在android.os.Handler.dispatchMessage(Handler.java:102) 在android.os.Looper.loop(Looper.java:145) 在android.app.ActivityThread.main(ActivityThread.java:5834) 在java.lang.reflect.Method.invoke(本机方法) 在java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1388) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183) 03-03 21:27:12.599 31149-31149 / org.ostsia.ostsia I /工艺:发送信号。 PID:31149 SIG:9

解决方案

在应用程序类解析初始化类似如下

 公共类AppClass扩展应用{
    @覆盖
    公共无效的onCreate(){
        super.onCreate();

        // Parse.enableLocalDatastore(本); //如果你需要这个,初始化前放
        Parse.initialize(这一点,gV6QK,JJmFo99);
        PushService.setDefaultPushCallback(getApplicationContext(),MainActivity.class);
        。ParseInstallation.getCurrentInstallation()saveInBackground();
    }
}
 

不要忘记引用您的应用程序类清单

 <应用机器人:名称=。AppClass>
 

从MainActivity删除解析的init

When I am testing the Parse Push to my Android phones the push notification come through as long as the app runs. If the app is closed: I just get a message saying <App name> has stopped. - I don't receive any of the pushes - but still got the stop notification popup. I have followed the Quickstart guide from Parse step by step.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.ostsia.ostsia">
    <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="org.ostsia.ostsia.permission.C2D_MESSAGE" />
    <uses-permission android:name="org.ostsia.ostsia.permission.C2D_MESSAGE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ostsia"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="org.ostsia.ostsia.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <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="org.ostsia.ostsia" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

03-03 21:27:10.829  31149-31149/org.ostsia.ostsia E/com.parse.PushService﹕ 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.
03-03 21:27:10.829  31149-31149/org.ostsia.ostsia D/AndroidRuntime﹕ Shutting down VM
03-03 21:27:10.839  31149-31149/org.ostsia.ostsia E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: org.ostsia.ostsia, PID: 31149
    java.lang.RuntimeException: Unable to start service com.parse.PushService@4d17bf6 with Intent { act=com.google.android.c2dm.intent.RECEIVE flg=0x10 pkg=org.ostsia.ostsia cmp=org.ostsia.ostsia/com.parse.PushService (has extras) }: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library.
            at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3278)
            at android.app.ActivityThread.access$2200(ActivityThread.java:172)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1520)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5834)
            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:1388)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
     Caused by: java.lang.RuntimeException: applicationContext is null. You must call Parse.initialize(context, applicationId, clientKey) before using the Parse library.
            at com.parse.Parse.checkContext(Parse.java:451)
            at com.parse.Parse.getApplicationContext(Parse.java:219)
            at com.parse.ManifestInfo.getContext(ManifestInfo.java:322)
            at com.parse.ManifestInfo.getPackageName(ManifestInfo.java:326)
            at com.parse.ManifestInfo.getIntentReceivers(ManifestInfo.java:131)
            at com.parse.ManifestInfo.hasIntentReceiver(ManifestInfo.java:123)
            at com.parse.ManifestInfo.getPushUsesBroadcastReceivers(ManifestInfo.java:174)
            at com.parse.PushService.wipeRoutingAndUpgradePushStateIfNeeded(PushService.java:454)
            at com.parse.PushService.onStartCommand(PushService.java:435)
            at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3261)
            at android.app.ActivityThread.access$2200(ActivityThread.java:172)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1520)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5834)
            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:1388)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)
03-03 21:27:12.599  31149-31149/org.ostsia.ostsia I/Process﹕ Sending signal. PID: 31149 SIG: 9

解决方案

Have the parse initialized in Application class similar as below

public class AppClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // Parse.enableLocalDatastore(this); // if you need this, put before init
        Parse.initialize(this, "gV6QK", "JJmFo99");
        PushService.setDefaultPushCallback(getApplicationContext(), MainActivity.class);
        ParseInstallation.getCurrentInstallation().saveInBackground();
    }
}

Don't forget to reference your app class in manifest

<application android:name=".AppClass">

Remove Parse init from MainActivity

这篇关于Android不从parse推送接收推送通知,当应用程序被关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆