Esempio n. 1
0
        /// <summary>
        /// 發送推播資訊
        /// </summary>
        public bool SendPushNotification(string json, string[] deviceIds, int pushDataId, string pushMsg, DateTime?publishDate = null, bool?isIOS = false, int?badge = 1)
        {
            var db = _uow.DbContext;

            using (var httpClient = new HttpClient())
            {
                httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                //charset=UTF-8
                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "key=" + firebasePushApiKey);
                httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Sender", "id=" + firebasePushSenderId);
                var utf8json       = Encoding.UTF8.GetString(Encoding.Default.GetBytes(json));
                var pushJsonObject = JObject.Parse(json);

                /*var pushiosJson = "{\"aps\":{\"alert\":{" + string.Format("\"title\":{0},\"body\":{0}", json) + "}},badge: 42,}";
                 * var iosPushJson = JObject.Parse(pushiosJson);*/
                var data = new FirebasePushRequest()
                {
                    registration_ids = deviceIds,
                    data             = pushJsonObject
                };
                if (isIOS.Value)
                {
                    data.notification = new FirebaseNotification()
                    {
                        body  = pushMsg,
                        badge = badge.Value,
                        sound = firebasePushSound
                    };
                }
                if (publishDate.HasValue)
                {
                    var ttl = Convert.ToInt32(publishDate.Value.ToUniversalTime().Subtract(DateTime.UtcNow).TotalSeconds) * 1000;
                    data.android.ttl  = string.Format("{0}s", ttl);
                    data.apns.headers = new Dictionary <string, string>();
                    data.apns.headers.Add("apns-expiration", ttl.ToString());
                    data.webpush.headers = new Dictionary <string, string>();
                    data.webpush.headers.Add("TTL", ttl.ToString());
                }
                var firebaseJson = JsonConvert.SerializeObject(data);
                var request      = new HttpRequestMessage(HttpMethod.Post, firebasePushUrl);
                request.Content = new StringContent(firebaseJson,
                                                    Encoding.UTF8,
                                                    "application/json");
                var response       = httpClient.SendAsync(request);
                var responseEntity = JsonConvert.DeserializeObject <FirebasePushResponse>(response.Result.Content.ReadAsStringAsync().Result);
                if (responseEntity.success)
                {
                    CreateMutiplePushLog(pushDataId, deviceIds.ToList(), publishDate); //建立log
                }
                return(true);
            }
        }
        public void SerializesCorrectly()
        {
            var payload       = "{'action' : 'digit.sync'}";
            var objectPayload = JsonConvert.DeserializeObject(payload);
            var request       = new FirebasePushRequest()
            {
                Data     = objectPayload,
                Priority = 10,
                To       = "recv"
            };
            var str = JsonConvert.SerializeObject(request);

            Assert.Equal("{\"data\":{\"action\":\"digit.sync\"},\"to\":\"recv\",\"priority\":10}", str);
        }