我已经在Unity项目中安装了东西,但是我需要知道是否能够将推送通知发送到运行Unity的独立桌面(Windows或Mac)应用程序。
我知道实时数据库说它仅适用于IOS / Android,但我个人认为它可以像现在正在制作的那样在桌面应用程序上运行。这可以与Cloud Messaging一起使用吗?
请帮助。
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控制台发送测试通知,因为它尚无法识别任何内容,但我尚未部署或完全构建它。我只是想在编辑器中测试功能。
答案 0 :(得分:1)
不幸的是,firebase云消息传递在Unity中没有桌面SDK(有关支持的桌面产品的列表,请参见this link)。
但是,根据您的用例,您也许可以使用Realtime Database解决此问题。如果只想可靠地将消息实时发送到正在运行的应用程序实例,则可以执行以下操作: 1)使用Firebase身份验证进行身份验证(建议从匿名身份验证或电子邮件地址/密码开始)。
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"
}
}
}
}
您可以在其中读/写message / your_uid或messages / some_uid / your_uid下的任何内容。
您可以create your node使用:
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);
}
});
}
}
您可以通过以下方式listen to changes:
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);
}
}
这几乎不是完整的代码集,并且我已经验证了它可以编译(并且模拟器中的数据库规则看起来正确)。但是我还没有构建完整的测试应用来验证所有内容。
希望这会有所帮助,如果这不能满足您当前的需求,我们深表歉意。随时通过normal support channel发送针对台式机FCM的功能请求,然后继续进行Unity GitHub page或open source C++ SDK,以跟踪Firebase游戏的进展情况(包括桌面支持) )。
-帕特里克