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