我需要在桌面Unity应用程序上使用Firebase云消息传递



我在我的Unity项目上安装了内容,但是我需要知道我是否能够将推送通知发送到独立桌面(Windows或Mac(运行Unity的独立桌面(Windows或Mac(。

我知道实时数据库说它仅适用于iOS/Android,但我个人就可以在桌面应用程序上工作,就像我现在正在制作的那样。这可以与云消息一起使用?

请帮助。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase.Messaging;
public class NotificationManager : MonoBehaviour
{

    public void OnMessageReceived(object sender, MessageReceivedEventArgs e)
    {
        Debug.Log("From: " + e.Message.From);
        Debug.Log("Message ID: " + e.Message.MessageId);
    }

}

我无法从Firebase控制台发送测试通知,因为它尚未识别任何内容,但是我尚未部署或构建它。我只是想在编辑器中测试功能。

不幸的是,Firebase Cloud Messaging没有Unity的桌面SDK(有关支持的桌面产品列表,请参见此链接,看来您已经找到了(。

不过,根据您的用例,您可以使用实时数据库来解决此问题。如果您只想可靠地将消息可靠地发送到应用程序的运行实例,则可以做类似的事情:1(使用Firebase Auth进行身份验证(我建议从匿名身份验证或电子邮件地址/密码开始(。

2(在您的RTDB中有一些节点,只能由接收器读取,但是任何登录的用户都可以写入(确保用户不能踩彼此的消息,要么对写作UID进行另一个限制,要么只是确保您无法在您的规则中覆盖消息(。

3(将侦听器附加到用户的RTDB节点,以收听新消息。

4(写入节点以发送消息。

所以,我在RTDB中设置了这样的数据库规则集:

{
  "rules": {
    ".read": false,
    ".write": false,
    "messages": {
      "$read_uid": {
        "$write_uid": {
          ".read": "$write_uid == auth.uid || $read_uid == auth.uid",
          ".write": "$write_uid == auth.uid || $read_uid == auth.uid"
        },
        ".read": "$read_uid == auth.uid",
        ".write": "$read_uid == auth.uid || newData.val() == auth.uid"
      }
    }
  }
}

您可以在消息/your_uid或消息/some_uid/your_uid下读/写任何内容。

您可以使用:

创建节点
public class Register : MonoBehaviour
{
    public void RegisterUser(string username, string password)
    {
        FirebaseAuth.DefaultInstance.CreateUserWithEmailAndPasswordAsync(username, password).ContinueWithOnMainThread(
            task =>
            {
                if (task.IsCompleted)
                {
                    var databaseReference = FirebaseDatabase.DefaultInstance.RootReference;
                    databaseReference.Child("messages").SetValueAsync(task.Result.UserId);
                }
            });
    }
}

您可以通过:

来收听此更改
public class ListenForMessages : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        FirebaseDatabase.DefaultInstance
            .GetReference($"/messages/{FirebaseAuth.DefaultInstance.CurrentUser.UserId}")
            .ValueChanged += HandleValueChanged;
    }
    private void HandleValueChanged(object sender, ValueChangedEventArgs e)
    {
        Debug.Log("Do something with " + e.Snapshot);
    }
}

然后发送消息变为:

public class SendMessage : MonoBehaviour
{
    public void SendMessageToUser(string uid, string message)
    {
        FirebaseDatabase.DefaultInstance
            .GetReference($"/messages/{uid}/{FirebaseAuth.DefaultInstance.CurrentUser.UserId}").Push()
            .SetValueAsync(message);
    }
}

这几乎不是一组完整的代码集,我已经验证了它是否编译(模拟器中的数据库规则看起来正确(。但是我尚未构建一个完整的测试应用程序来验证这一切。

希望它会有所帮助,如果这不满足您当前的需求,我深表歉意。请随时通过普通支持频道在桌面上向FCM发送功能请求,然后在Unity GitHub页面或开源C SDK上跟进,以跟进firebase在Firebase上进行游戏的进度(包括桌面支持(。

- 帕特里克

相关内容

  • 没有找到相关文章

最新更新