如何配置解析 sdk 客户端以在 unity 3d 中接收推送通知

问题描述 投票:0回答:2

我已经更改了一些代码并为 .net 插件编译了最新的解析 SDK 以实现统一。现在我想配置统一客户端应用程序以接收推送通知(尤其是 android)。我不知道如何配置它,我只是找到了一些代码来接收或显示通知,而不是如何像所有权限一样配置它或将云消息密钥放在哪里。如果有人可以帮助我?谢谢

unity3d parse-platform
2个回答
1
投票

是的,当然。我发现了一些奇怪的东西,我有两个消息接收器 firebase 和解析,当应用程序在前台时 firebase 接收器工作`

    //Events subscription
    private void Awake()
    {
        instance  = this;
        Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
        ParsePush.ParsePushNotificationReceived += OnMessageReceiveByParse;
        Firebase.Messaging.FirebaseMessaging.MessageReceived += 
        OnMessageReceiveByFirebase;
    }

    // method call when firebase message received
    void OnMessageReceiveByFirebase(object 
sender,Firebase.Messaging.MessageReceivedEventArgs args)
    {
        Debug.Log("Message from firebase : " + args.Message);
    }

    // method call when parse message received
    void OnMessageReceiveByParse(object sender, ParsePushNotificationEventArgs args)
    {

        Debug.Log("Message from Parse Server : " + args.Payload);
    }

    // parse guide receiver implementation
    void cool(object sender, ParsePushNotificationEventArgs args)
    {
#if UNITY_ANDROID
        AndroidJavaClass parseUnityHelper = new AndroidJavaClass("com.parse.ParsePushUnityHelper");
        AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

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

`

我用android studio调试app启动的时候一直报错,我用classes parse sdk not compiled dll: this classe doesn't exist in my sdk:

    (Filename: ./Runtime/Export/Debug.bindings.h Line: 45)
2019-07-12 09:12:33.968 14620-14663/? E/Unity: AndroidJavaException: java.lang.ClassNotFoundException: com.parse.ParsePushUnityHelper
    java.lang.ClassNotFoundException: com.parse.ParsePushUnityHelper
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:453)
        at java.lang.Class.forName(Class.java:378)
        at com.unity3d.player.UnityPlayer.nativePause(Native Method)
        at com.unity3d.player.UnityPlayer.l(Unknown Source:0)
        at com.unity3d.player.UnityPlayer$22.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:193)
        at com.unity3d.player.UnityPlayer$e.run(Unknown Source:32)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "com.parse.ParsePushUnityHelper" on path: DexPathList[[zip file "/data/app/com.wmg.mascothunt-bUi8a5Uz_-d12IhMoYJuOQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.wmg.mascothunt-bUi8a5Uz_-d12IhMoYJuOQ==/lib/arm, /data/app/com.wmg.mascothunt-bUi8a5Uz_-d12IhMoYJuOQ==/base.a

0
投票

使 过时和过期的 Parse 与 unity/android build 一起工作应该是你追求通知 API 的最后选择。(顺便说一句,它可能在 2016 年之前与 Unity 一起工作)

如果您使用复制 Parse.Unity.dll 的原始方法,您最终会得到一个重复的类任务,因为 Unity 已经在其最新版本中添加了它。

Type Task<> exists in both Unity.Tasks and mscorelib

解决这个问题的方法是使用 here 提供的提取的 dll,但这不适用于推送通知,它仅对数据库有用。因为你会得到:

ClassNotFoundException: com.parse.ParsePushUnityHelper

您需要知道 Unity 中的解析由 parse .NET sdk 处理,android 中的解析由 parse android sdk 处理,当您尝试使用 unity 项目创建 android apk 时,问题就开始了,因为case parse 使用反射和 AndroidJavaClass 来转换它的一些 android sdk 以在 .NET sdk 中使用它们,这些 java 类需要从已经发布的 sdk 中手动提取并根据您的目的进行操作。为此,您需要提取 ParsePush.jar 并提供它的 Unity 依赖项(这是一个 classes.jar 文件)以构建您的 ParsePush.jar,然后操作此 jar 文件并在将其放入 asset/android/ 时删除 Unity 依赖项插件文件夹,因为那里已经提供了 Unity。

我已经完成了上述所有工作,问题是一些旧设备的 DeviceToken 和 PushType 是空的,这与 Firebase 依赖项有关,我不明白为什么,因为在 unity 时我没有在 Java 文件中找到任何调试工具正在通过反思使用它们。

© www.soinside.com 2019 - 2024. All rights reserved.