我在我的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上进行游戏的进度(包括桌面支持(。
- 帕特里克