К сожалению, облачные сообщения Firebase не имеют SDK для настольных компьютеров в Unity (список поддерживаемых продуктов для настольных компьютеров, который, по-видимому, вы нашли, см. по этой ссылке ).
В зависимости от вашего варианта использования вы можете обойти это с базой данных реального времени. Если вы просто хотите надежно отправлять сообщения в режиме реального времени на запущенные экземпляры вашего приложения, вы можете сделать что-то вроде:
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"
}
}
}
}
Который позволяет вам читать / писать что-либо в messages / your_uid или messages / 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 на рабочий стол через обычный канал поддержки 1034 * и следуйте на странице Unity GitHub или с открытым исходным кодом C ++ SDK , чтобы следовать на данный момент прогресс в Firebase для игр (включая поддержку десктопов).
- Patrick