我一直在尝试使用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决定不显示通知,因为它得出的结论是它在前景上。只是我的猜测。
我正在使用:
提供清单:
<?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升级,还需要几个小修补程序才能运行。否则,它会干净并且似乎正确接收推送通知,但在背景上运行时不会显示它们。
这是预期的行为,还是我做错了什么?
谢谢:)
答案 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项目。祝你好运!