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

时间:2015-07-02 03:09:51

标签: 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 / GCM-DMM(22111):广播意图回调:result = CANCELED forIntent {act = com.google.android.c2dm.intent.RECEIVE pkg = com.parse.parseunitypushsample (有额外的)}

     

07-02 04:43:07.041:I / ParsePushService(16145):收到推送通知。有效负载:{"警告":"来自Parse的测试推送!"," push_hash":" 2bf06f5e2a92eab2fcb855fc1117fa33"}

     

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

注意它说" foregrounded",即使其他应用程序在前台。这让我感到困扰,好像Parse决定不显示通知,因为它得出的结论是它在前景上。只是我的猜测。

我正在使用:

  • Unity 5.1.1f1(免费)
  • Android 5.1.1
  • 此处提供的解析和教程项目:https://parse.com/apps/quickstart#parse_push/unity/android/new(仅需要进行修改才能使其在Unity 5.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升级,还需要几个小修补程序才能运行。否则,它会干净并且似乎正确接收推送通知,但在背景上运行时不会显示它们。

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

谢谢:)

2 个答案:

答案 0 :(得分:0)

如果你有,那么你几乎就到了!我想你需要将这个脚本添加到你的一个GameObjects中:

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

检查并跟踪此问题,它可能对您有用: Parse Unity Push Sample not working

答案 1 :(得分:0)

不确定这是否有帮助,但我可以通过编辑可用的插件源here来解决此问题。为此,我只是在ParsePushUnityHelper.java类中缓存push msg的字符串值,然后通过Android CallStatic方法从Unity c#中检索它。然后,您可以使用其中一个公开的Json模块将其从json字符串转换为字典。请记住,您必须重新编译并将插件.jar链接到Unity项目。祝你好运!