【问题标题】:how to send fcm notification to multiple device in single fcm reqest如何在单个 fcm 请求中向多个设备发送 fcm 通知
【发布时间】:2017-01-30 09:15:23
【问题描述】:

我想在单个 fcm 请求中向多个设备发送通知。 我的通知文本对于所有设备都是相同的。我必须同时向所有用户发送超过 10000 个通知,并且文本是相同的,所以我想以最小 fcm 请求发送所有通知。 我正在使用 c# asmx 服务。 听到是我的代码。

string regid="fcm_reg_id1,fcm_reg_id2" 像这样。

string applicationID = "abcd";

字符串 SENDER_ID = "123456";

            string regid="c_Z5yRoj4TY:APA91bGry2g_CIA1xaRy_LscxOvFX6YHqasKA96TjpG6yi1yytNyM5rtGL6DgxjGMSE5c74d7VdSL6W8zxO1ixVMlpVMwdgcrsGUWV0VfdbddC2XD","c_Z5yRoj4TY:APA91bGry2g_CIA1xaRy_LscxOvFX6YHqasKA96TjpG6yi1yytNyM5rtGL6DgxjGMSE5c74d7";

            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("https://fcm.googleapis.com/fcm/send");

            httpWebRequest.ContentType = "application/x-www-form-urlencoded;charset=UTF-8";

            httpWebRequest.Method = "POST";

            String collaps_key = "Score_update";

            string json = "collapse_key=abcd" + "&data.header=cricket&registration_id=" + regId + "&data.notificationId=" + notificationId + "&data.message=" + msg;

            httpWebRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID));
            httpWebRequest.Headers.Add(string.Format("Sender: key={0}", SENDER_ID));

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                //Console.WriteLine(json);
                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
                using (HttpWebResponse httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
                {
                    using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                    {
                        var result = streamReader.ReadToEnd();
                        Console.WriteLine(result);
                        retmsgid = result.ToString();
                        if (retmsgid.Trim() != "")
                        {
                            ResponceString = result.ToString();
                            string[] msgsplits = retmsgid.Split(',');
                            string[] msg1 = msgsplits[0].ToString().Split(':');
                            ReturnMessageId = msg1[1].ToString();
                        }
                        else
                        {
                            ReturnMessageId = "0";
                        }
                    }
                    httpResponse.Close();
                    httpResponse.Dispose();
                    httpWebRequest = null;
                }
            } 

【问题讨论】:

  • 您可以使用 IMEI 号码从 Web 执行此操作(需要在您的后端注册 IMEI 号码)。因此,您需要使用移动设备上的网络服务发布消息。现在您可以使用已注册 IMEI 号码的设备从网络广播您的消息。
  • 我想在上面代码中的单个请求中发送多个通知我想添加多个注册ID并发送它。

标签: android notifications


【解决方案1】:

由于FCM does not allow在发送消息时指定了1000多个注册ID:

此参数指定设备列表(注册令牌或 IDs) 接收多播消息。它必须至少包含 1 并且在 最多 1000 个注册令牌。

您唯一的选择是向topic 发送消息

【讨论】:

  • 我想一次向大约 100 个注册 ID(仅限移动设备)发送消息。如何编写请求?
  • 其实我的问题只是。可能是我无法正确构图。
【解决方案2】:

对于所有寻找向有限注册设备发送通知的方法的人来说,都有可能的解决方案。 (少于 1000 个设备)。 将设备 ID 的输入视为字符串:

device_ids_input="code1,code2,code3,..";

使用这段代码sn-ps来执行发送通知的命令。

string[] deviceIds = device_ids_input.Split(',');
    string hasSound = "1";
    string applicationID = "AIz------------------";
    string senderId = "73-------";


    WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
    tRequest.Method = "post";
    tRequest.ContentType = "application/json";
    var data = new
    {
        registration_ids = deviceIds,
        data = new
        {
            title = messageTitle,
            full_text = messageBody,
            Sound = hasSound

        }
    };
    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();


                }
            }
        }
    }

【讨论】:

    猜你喜欢
    • 2019-10-13
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多