应用程序在后台运行时的推送通知行为(Parse/Unity/Android)

应用程序在后台运行时的推送通知行为(Parse/Unity/Android),android,parse-platform,unity3d,Android,Parse Platform,Unity3d,我一直在尝试Parse的集成教程和示例,但我不知道当应用程序在后台运行时如何使推送通知显示在托盘中 但是,当应用程序关闭时,会出现通知! 此外,在前台时,推送通知事件也会正确触发 总之,除了在后台运行外,推送通知工作得非常好 日志中的通知如下所示: 07-02 04:43:06.979:I/GCM(22111):GCM消息com.parse.parseunitypushsample 0:1435804985959681%368c544ef9fd7ecd 07-02 04:43:07.033:W/

我一直在尝试Parse的集成教程和示例,但我不知道当应用程序在后台运行时如何使推送通知显示在托盘中

但是,当应用程序关闭时,会出现通知! 此外,在前台时,推送通知事件也会正确触发

总之,除了在后台运行外,推送通知工作得非常好

日志中的通知如下所示:

07-02 04:43:06.979:I/GCM(22111):GCM消息com.parse.parseunitypushsample 0:1435804985959681%368c544ef9fd7ecd

07-02 04:43:07.033:W/GCM-DMM(22111):广播意图回调:结果=取消forIntent{act=com.google.android.c2dm.intent.RECEIVE pkg=com.parse.parseunitypushsample(有附加项)}

07-02 04:43:07.041:I/ParsePushService(16145):收到推送通知。有效负载:{“警报”:“来自解析的测试推送!”,“推送散列”:“2bf06f5e2a92eab2fcb855fc1117fa33”}

07-02 04:43:07.041:I/ParsePushService(16145):推送通知是在应用程序预发时处理的

请注意,它说的是“前景化”,即使其他应用程序在前台。这让我有点困扰,好像Parse决定不显示通知,因为它断定它在前台。只是我的猜测

我正在使用:

  • 统一5.1.1f1(免费)
  • 安卓5.1.1
  • 这里提供的解析和教程项目:(只需修改即可使其在Unity5.x中运行)
  • 提供的舱单:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="com.parse.parseunitypushsample" android:versionCode="1" android:versionName="1.0">
    
        <uses-sdk android:minSdkVersion="10" />
    
        <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" />
        <permission android:protectionLevel="signature" android:name="com.parse.parseunitypushsample.permission.C2D_MESSAGE" />
        <uses-permission android:name="com.parse.parseunitypushsample.permission.C2D_MESSAGE" />
    
        <application android:label="@string/app_name" android:icon="@drawable/app_icon">
            <!-- Added "com.unity3d.player" below to avoid crash -->
            <activity android:name="com.unity3d.player.UnityPlayerActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <receiver android:name="com.parse.ParsePushBroadcastReceiver" 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" />
                    <category android:name="com.parse.parseunitypushsample" />
                </intent-filter>
            </receiver>
    
            <service android:name="com.parse.ParsePushService" />
        </application>
    </manifest>
    
    
    
我只是在构建教程项目,但它需要Unity升级和一些小的修复程序来运行。否则,它是干净的,似乎可以正确地接收推送通知,但在后台运行时不会显示它们

这是预期的行为,还是我做错了什么


谢谢:)

如果你做到了,那你就快到了!我认为您需要将此脚本添加到一个游戏对象中:

using UnityEngine;
using System.Collections;
using Parse;


    public class ParsePushRegistration : MonoBehaviour {
        // Use this for initialization
        void Start () {
            #if UNITY_ANDROID
            ParsePush.ParsePushNotificationReceived += (sender, args) => {                  
                AndroidJavaClass parseUnityHelper = new AndroidJavaClass ("com.parse.ParseUnityHelper");
                AndroidJavaClass unityPlayer = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
                AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject> ("com.unity3d.player.UnityPlayerNativeActivity");

                // Call default behavior.
                parseUnityHelper.CallStatic ("handleParsePushNotificationReceived", currentActivity, args.StringPayload);
            };              
            #endif
        }
    }
使用UnityEngine;
使用系统集合;
使用语法分析;
公共类注册:MonoBehavior{
//用于初始化
无效开始(){
#如果你是安卓
ParsePush.ParsePushNotificationReceived+=(发送方,参数)=>{
AndroidJavaClass parseUnityHelper=新的AndroidJavaClass(“com.parse.parseUnityHelper”);
AndroidJavaClass unityPlayer=新的AndroidJavaClass(“com.unity3d.player.unityPlayer”);

AndroidJavaObject currentActivity=unityPlayer.GetStatic不确定这是否有帮助,但我可以通过编辑可用的插件源代码来解决这个问题。为此,我只需将push消息的字符串值缓存在ParsePushUnityHelper.java类中,然后通过Android CallStatic方法从Unity c#检索它。然后可以使用请记住,您必须重新编译plugin.jar并将其链接到您的Unity项目。祝您好运!

非常感谢您的回答!我一直在尝试您的建议,以及您在另一个问题上发布的代码,但到目前为止还没有成功D:即使是c精益项目和您的更改,它只是不起作用。您建议的代码不会为我编译,因为“args.StringPayload”.在那个错误之后,我找到了这个线程。他们说在高于1.5.0的解析上使用它时会发生这种情况。我使用了1.5.1,刚刚尝试了1.5.2,仍然没有结果。我现在想尝试1.5.0,我会尽快告诉结果。等待“尽快获得结果”