Мне нужно использовать Firebase Cloud Messaging в приложении DESKTOP Unity - PullRequest
0 голосов
/ 26 июня 2019

У меня есть вещи, установленные в моем проекте Unity, но мне нужно знать, могу ли я отправлять push-уведомления автономному приложению для настольного компьютера (Windows или Mac), работающему под Unity.

Я знаю, что база данных в реальном времени говорит, что она предназначена только для 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, поскольку она еще ничего не распознает, но я не развернулэто или построил это вообще.Я просто пытаюсь проверить функциональность в редакторе.

1 Ответ

1 голос
/ 27 июня 2019

К сожалению, облачные сообщения 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...