使用 FCM(Firebase 云消息传递)通过 C# 向 Android 发送推送

新手上路,请多包涵

我正在使用此代码通过 C# 和 GCM 发送通知消息,使用 Winforms、Webforms 等。现在我想发送到 FCM(Firebase 云消息传递)。我应该更新我的代码吗? :

 public class AndroidGCMPushNotification
{
    public AndroidGCMPushNotification()
    {
        //
        // TODO: Add constructor logic here
        //
    }
    public string SendNotification(string deviceId, string message)
    {
        string SERVER_API_KEY = "server api key";
        var SENDER_ID = "application number";
        var value = message;
        WebRequest tRequest;
        tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send");
        tRequest.Method = "post";
        tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY));

        tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID));

        string postData = "collapse_key=score_update&time_to_live=108&delay_while_idle=1&data.message=" + value + "&data.time=" + System.DateTime.Now.ToString() + "&registration_id=" + deviceId + "";
        Console.WriteLine(postData);
        Byte[] byteArray = Encoding.UTF8.GetBytes(postData);
        tRequest.ContentLength = byteArray.Length;

        Stream dataStream = tRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse tResponse = tRequest.GetResponse();

        dataStream = tResponse.GetResponseStream();

        StreamReader tReader = new StreamReader(dataStream);

        String sResponseFromServer = tReader.ReadToEnd();

        tReader.Close();
        dataStream.Close();
        tResponse.Close();
        return sResponseFromServer;
    }
}

但 GCM 已更改为 FCM。发送通知的代码是否相同?我在哪里可以找到 SERVER_API_KEY?是相同的解决方案吗?

原文由 Teste 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 317
1 个回答

遵循方法,我已用于在 ASP.Net REST API 中编写 Firebase 通知服务。

 public async Task<bool> NotifyAsync(string to, string title, string body)
    {
        try
        {
            //Server key from FCM console
            var serverKey = string.Format("key={0}", "Provide your Server key here from Fibase console");

            //Sender id from FCM console
            var senderId = string.Format("id={0}", "Provide your Sender Id here from Firebase Console");

            var data = new
            {
                to, // Recipient device token
                notification = new { title, body }
            };

            // Using Newtonsoft.Json
            var jsonBody = JsonConvert.SerializeObject(data);

            using (var httpRequest = new HttpRequestMessage(HttpMethod.Post, "https://fcm.googleapis.com/fcm/send"))
            {
                httpRequest.Headers.TryAddWithoutValidation("Authorization", serverKey);
                httpRequest.Headers.TryAddWithoutValidation("Sender", senderId);
                httpRequest.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json");

                using (var httpClient = new HttpClient())
                {
                    var result = await httpClient.SendAsync(httpRequest);

                    if (result.IsSuccessStatusCode)
                    {
                        return true;
                    }
                    else
                    {
                        // Use result.StatusCode to handle failure
                        // Your custom error handler here
                        return false;
                    }
                }
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }

        return false;
    }

请参阅此博客以发送组通知 https://firebase.google.com/docs/cloud-messaging/android/send-multiple

原文由 Coding Enthusiast 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题