在C#中使用FCM发送批量推送通知?

时间:2017-04-06 09:35:19

标签: c# firebase firebase-cloud-messaging

我正在编写一个c#服务,允许我使用FCM发送推送通知。现在,一切正常,但后来我想使用FCM发送批量推送通知。

我希望能够同时向多个设备发送相同的消息。当前需要一个注册令牌,然后完成整个过程,然后转到下一个。但如果我必须立即向许多号码发送推送通知,这将毫无用处。什么应该是我最好的选择?

c#c​​ode

   public String SendPushNotification(string regtoken)
    {


            try
            {

                string applicationID = "#############3";

                string senderId = "##########";

                string deviceId = regtoken;
                WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
                tRequest.Method = "post";
                tRequest.ContentType = "application/json";
                var data = new
                {
                    to = deviceId,
                    notification = new
                    {
                        body = message,
                        title = "",
                        sound = ""

                    }
                };
                var serializer = new JavaScriptSerializer();
                var json = serializer.Serialize(data);
                Byte[] byteArray = Encoding.UTF8.GetBytes(json);
                tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID));
                tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
                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();
                                String str = sResponseFromServer;
                            }
                        }
                    }
                    status = statusmessages();
                }
            }
            catch (Exception ex)
            {
                string str = ex.Message;
                status = "failure";
            }


        return status;





    }

1 个答案:

答案 0 :(得分:4)

更新:对于v1,似乎不再支持registration_ids,并且使用主题是最佳方法。

您可以使用registration_ids参数,在那里您最多可以指定1000个注册令牌:

  

此参数指定多播消息的收件人,即发送到多个注册令牌的消息。

     

该值应该是要向其发送多播消息的注册令牌数组。该数组必须包含至少1个且最多1000个注册令牌。要将消息发送到单个设备,请使用to参数。

只需替换

to = deviceId

类似

registration_ids = deviceIds

其中deviceIds是一个令牌数组。

或者您可以使用Topic Messaging,只要用户订阅了您的主题,他们就会收到发送到该主题的消息。