fcm push-уведомление на мобильный с темой обмена сообщениями с использованием C # - PullRequest
0 голосов
/ 25 октября 2018

У нас есть важное требование - отправлять уведомления более чем 50000 пользователям мобильных устройств (Android и IOS).Мы реализовали это с помощью темы сообщений.Мы создали пакет для каждых 998 пользователей, а затем перешли к fcm, используя тему.Но доставка push-уведомлений неточная.Иногда некоторые устройства получают уведомление, а иногда нет устройств.Мы использовали только две темы: одну для Android и другую для IOS.Отправка нескольких пакетов (каждый пакет содержит 998 токенов) в одну и ту же тему.Подскажите, пожалуйста, в чем заключается проблема, или расскажите, как выполнить описанный выше сценарий.

Пакетное нажатие

 public string pushBatchbasedonTopic(string Topic, List<string> RegisterIds)
            {
                _basemobile.WriteToLog("\n Log pushBatchbasedonTopic: ","");
                string topic = Topic;
                string str = null;
                try
                {
                    string senderId = WebConfigurationManager.AppSettings["FCM_SENDER_ID"].ToString();
                    string applicationkey = WebConfigurationManager.AppSettings["FCM_KEY"].ToString();
                    WebRequest tRequest = WebRequest.Create("https://iid.googleapis.com/iid/v1:batchAdd");
                    tRequest.Method = "post";
                    tRequest.ContentType = "application/json";
                    tRequest.Timeout = 600000;

                    var dataser = new
                    {
                        to = topic,
                        registration_tokens = RegisterIds.ToArray()

                    };

                    var serializer = new JavaScriptSerializer();
                    var json = serializer.Serialize(dataser);
                    Byte[] byteArray = Encoding.UTF8.GetBytes(json);
                    tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationkey));
                    tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
                    tRequest.ContentLength = byteArray.Length;
                    _basemobile.WriteToLog("\n Log tRequest: ", tRequest.ToString());
                    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();
                                    str = sResponseFromServer;
                                    _basemobile.WriteToLog("\n Log sResponseFromServer: ", sResponseFromServer);
                                }
                            }
                        }
                    }
                    _basemobile.WriteToLog("\n Log TopicCreation: " + str, "");
                    return str;

                }
                catch (Exception ex)
                {
                    str = ex.Message;
                    _basemobile.WriteToLog("\n Log topic creation  error: " + ex.Message, "");
                    _basemobile.WriteToLog("\n Stack Trace topic creation: " + ex.StackTrace, "");
                    _basemobile.WriteToLog("\n InnerException topic creation: " + ex.InnerException, "");
                    return str;
                }
            }

FCM Push

   public string pushusingFCMforBatchAndroidBasedOnOneTopic(string Id, string Condition, string Message, string Type, string count)
        {
            _basemobile.WriteToLog("\n Log pushusingFCMforBatchAndroidBasedOnOneTopic: ", "");
            string setcondition = Condition;
            //string deviceId = DeviceToken;
            string str = null;
            try
            {
                string senderId = WebConfigurationManager.AppSettings["FCM_SENDER_ID"].ToString();
                string applicationkey = WebConfigurationManager.AppSettings["FCM_KEY"].ToString();
                WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
                tRequest.Method = "post";
                tRequest.ContentType = "application/json";
                tRequest.Timeout = 600000;

                var dataser = new
                {
                    //to = deviceId,
                    condition = setcondition,
                    data = new
                    {
                        Notification_Id = Id,
                        msg_type = Type,
                        Count = count,
                        sound = "Enabled",
                        body = Message,
                        badge = count
                    }
                    // count = 0,
                    //type = Type
                };

                var serializer = new JavaScriptSerializer();
                var json = serializer.Serialize(dataser);
                Byte[] byteArray = Encoding.UTF8.GetBytes(json);
                tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationkey));
                tRequest.Headers.Add(string.Format("Sender: id={0}", senderId));
                tRequest.ContentLength = byteArray.Length;
                _basemobile.WriteToLog("\n Log tRequest: ", tRequest.ToString());
                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();
                                str = sResponseFromServer;
                                _basemobile.WriteToLog("\n Log sResponseFromServer: ", sResponseFromServer);
                            }
                        }
                    }
                }
                _basemobile.WriteToLog("\n Log pushfcmandroid: " + str, "");
                return str;
            }
            catch (Exception ex)
            {
                str = ex.Message;
                _basemobile.WriteToLog("\n Log errorios: " + ex.Message, "");
                _basemobile.WriteToLog("\n Stack Traceios: " + ex.StackTrace, "");
                _basemobile.WriteToLog("\n Inner Exceptionios: " + ex.InnerException, "");
                return str;
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...