使用Firebase将通知从Web发送到Android设备



我现在尝试实现此流程:当用户在服务器应用程序上添加一些文件时,通知应触发并从服务器发送到FCM,然后从那里传递消息说明某些内容像:"添加了新文件"。基本上,我想通知移动设备用户服务器上的某些内容已更改。

我尝试了很多事情,但至少似乎没有任何事情可以正常工作。在移动方面,我在Xamarin.android项目中设置了Firebase,当我直接从Firebase控制台发送通知时,我会收到通知,一切都很好。

但是我不想通过Firebase控制台发送通知,我宁愿从服务器(即ASP.NET MVC Project(发送通知到Firebase Console,然后将其从那里传递到Android设备。

我的第一个问题是:是否有人知道如何将有关device_id的Web应用程序告知?是否有某种方法可以使Android设备在服务器上发送此信息?也许从那里我可以存储数据并偶尔进行更新,因为它基本上是一个刷新的令牌。

我的第二个问题是:即使我硬代码为Active Android设备的Devertion_ID,并尝试从服务器发送消息:

public class FirebaseService : IFirebaseService
{
    public void SendMessageToClientApplication(string message, string serverApiKey, string senderId, string deviceId)
    {
        AndroidFCMPushNotificationStatus result = new AndroidFCMPushNotificationStatus();
        try
        {
            result.Successful = false;
            result.Error = null;
            deviceId = "eMk6mD8P8Dc:APA91bG5Lmqn4Hwb4RZJ1Mkdl8Rf_uYQsQCEfDJK334tzSvIGzdao7o2X6VmtcTEp_Li0mG8iUoUT7-_RnZxQKocHosZwx6ITWdpmQyCwUv60IIIy0vxNlEaccT6RqK6c-cE1C6I3FTT";
            var value = message;
            WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
            tRequest.Method = "post";
            tRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";
            tRequest.Headers.Add(string.Format("Authorization: key={0}", serverApiKey));
            tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
            string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message="
                + value + "&data.time=" + DateTime.Now.ToString() + "&registration_id=" + deviceId + "";
            Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            tRequest.ContentLength = byteArray.Length;
            using (Stream dataStream = tRequest.GetRequestStream())
            {
                dataStream.Write(byteArray, 0, byteArray.Length);
                using (WebResponse tResponse = tRequest.GetResponse())
                {
                    using (Stream dataStreamResponse = tResponse.GetResponseStream())
                    {
                        using (StreamReader tReader = new StreamReader(dataStreamResponse))
                        {
                            String sResponseFromServer = tReader.ReadToEnd();
                            result.Response = sResponseFromServer;
                        }
                    }
                }
            }
        }
        catch (Exception ex)
        {
            result.Successful = false;
            result.Response = null;
            result.Error = ex;
        }
    }
} 

我在firebase控制台中均未获得任何东西,当然也什么也没有。

我试图在我的服务器应用程序上实现firebase Web作为JavaScript:

<script>
    var config = {
        apiKey: "mykey",
        authDomain: "myauthdomain",
        databaseURL: "mydatabaseurl",
        projectId: "myprojectid",
        storageBucket: "mystoragebucket",
        messagingSenderId: "mysenderid"
    };
    window.onload = function () {
        firebase.initializeApp(config);
        const messaging = firebase.messaging();
        messaging.requestPermission()
            .then(function () {
                console.log('Notification permission granted.');
                return messaging.getToken()
            })
            .then(function (token) {
                console.log(token);
            })
            .catch(function (err) {
                console.log('Unable to get permission to notify.', err);
            });
        messaging.onMessage(function (payload) {
            console.log('onMessage: ', payload);
        });
    }
</script>

但是,此代码获得了某种不同的device_id(又名令牌(,可能是为该服务器计算机生成的。

有人是否有将Device_ID发送到服务器应用程序以及从那里发送通知消息到Firebase Console的经验?我很感谢一些代码示例,教程或任何可以提供帮助的内容,因为我在Google搜索过程中找不到一些有用的东西。

我的第一个问题是:是否有人知道如何将有关device_id的Web应用程序告知?

最常见的方法是在数据库中存储设备令牌(每个使用FCM具有这样的令牌(的列表,例如Firebase数据库。云函数中有一个示例,用于firebase文档。在此示例中,接收消息的设备是网页,但是iOS和Android的方法相同。

我还建议阅读使用Firebase数据库和云消息传递的Android设备之间发送通知。在本文中,每个用户都订阅了一个主题,而不是发送到设备令牌。这防止了必须在代码中管理设备令牌。

相关内容

  • 没有找到相关文章

最新更新