使用 Parse Unity SDK 收到通知但未显示 + Android

Notification is received but not displayed using Parse Unity SDK + Android

我正在为 Android 使用 Parse Unity SDK。

我已成功注册设备。

void Start() {
    //Parse Installation
    if (ParseInstallation.CurrentInstallation != null && !string.IsNullOrEmpty(ParseInstallation.CurrentInstallation.DeviceToken))
    {
        Debug.Log("Device Token : " + ParseInstallation.CurrentInstallation.DeviceToken);
    }
    else
    {
        ParseInstallation installation = ParseInstallation.CurrentInstallation;
        installation.Channels = new List<string> { Config.Instance.GetUserInfo().GetEmail() };
        installation.SaveAsync().ContinueWith(t => {
            if (t.IsFaulted || t.IsCanceled)
            {
                Debug.Log("Push subscription failed.");
            }
            else
            {
                Debug.Log("Push subscription success.");
            }
        });


        //installation.
    }
}

才发现通知是"received",但既不显示在应用程序中,也不显示在通知栏中。

I/GCM     ( 1285): GCM message com.ahmed.app 0:1433935471473270%3f8fc5dbf9fd7ecd
I/ParsePushService( 7057): Push notification received. Payload: {"alert":"test","push_hash":"098f6bcd4621d373cade4e832627b4f6"}
I/ParsePushService( 7057): Push notification is handled while the app is foregrounded.
W/GCM-DMM ( 1285): broadcast intent callback: result=CANCELLED forIntent { act=com.google.android.c2dm.intent.RECEIVE pkg=com.ahmed.app (has extras) }

此外,Unity 没有收到通知(见代码)

void Awake() {
        ParsePush.ParsePushNotificationReceived += (sender, args) => {
            #if UNITY_ANDROID
            AndroidJavaClass parseUnityHelper = new AndroidJavaClass("com.parse.ParseUnityHelper");
            AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

            //Debugging the payload
            Debug.Log("Calling Parse from Unity and Payload is : " + args.StringPayload);

            // Call default behavior.
            parseUnityHelper.CallStatic("handleParsePushNotificationReceived", currentActivity, args.StringPayload);


            #endif
        };
    }

这个事件没有被触发。

这是我的 AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.ahmed.app" android:theme="@android:style/Theme.NoTitleBar" android:versionName="1.0" android:versionCode="1" android:installLocation="preferExternal">
  <supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true" />

    <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
  <uses-feature android:glEsVersion="0x00020000" />
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  <uses-permission android:name="android.permission.WAKE_LOCK" />
  <uses-permission android:name="com.android.vending.BILLING" />
  <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.ahmed.app.permission.C2D_MESSAGE" />
  <uses-permission android:name="com.ahmed.app.permission.C2D_MESSAGE" />

  <application android:icon="@drawable/app_icon" android:label="@string/app_name" android:debuggable="false">
    <activity android:name="com.unity3d.player.UnityPlayerNativeActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
    </activity>
    <meta-data android:name="com.google.android.gms.version" android:value="4030500" />
    <activity android:name="com.outlinegames.unibill.PurchaseActivity" android:label="@string/app_name" android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" />       
    <service android:name="com.parse.ParsePushService" /> 
    <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.ahmed.app" />
        </intent-filter>
    </receiver>
  </application>

知道问题出在哪里吗?

我已经回答过类似的问题,我只是想告诉你。

Parse Unity Push Sample not working

基本上,您的这行代码是错误的:

 AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

您必须将其替换为

 AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("com.unity3d.player.UnityPlayerNativeActivity");

我没有手动下载 SDK,而是下载了 Parse Push 示例项目并将文件复制到我的项目中。使用 SDK 1.5.2 示例项目,它现在可以工作了。