/// <summary> /// Creates the push request. /// </summary> /// <param name="request">The request.</param> /// <returns>HttpWebRequest.</returns> protected HttpWebRequest CreatePushRequest(PushMessageRequestV3 request) { HttpWebRequest httpRequest = null; if (request != null) { httpRequest = (HttpWebRequest)HttpWebRequest.Create(apiBaseUrl + "push"); FillAuthenticationV3(httpRequest); var jsonObject = new JObject(); jsonObject.Add(request.Platform.ToJson()); jsonObject.Add(request.Audience.ToJson()); if (request.Notification == null && request.AppMessage == null) { throw ExceptionFactory.CreateInvalidObjectException(nameof(request), reason: "Notification/AppMessage"); } if (request.Notification != null) { jsonObject.Add(new JProperty("notification", JObject.FromObject(request.Notification))); } if (request.AppMessage != null) { jsonObject.Add(new JProperty("message", JObject.FromObject(request.AppMessage))); } jsonObject.Add(new JProperty("options", JObject.FromObject(CreateRequestOptions(request)))); httpRequest.FillData(HttpConstants.HttpMethod.Post, jsonObject.ToString()); } return(httpRequest); }
/// <summary> /// Sends the push message asynchronously. /// </summary> /// <param name="request">The request.</param> /// <returns>PushResponseCode.</returns> /// <exception cref="System.InvalidOperationException">Failed to send push message.</exception> public async Task <PushResponse> SendPushMessageAsync(PushMessageRequestV3 request) { try { var httpRequest = CreatePushRequest(request); var responseContent = await httpRequest.ReadResponseAsTextAsync(Encoding.UTF8); return(ParseResponse(responseContent)); } catch (Exception ex) { throw ex.Handle(request); } }
/// <summary> /// Sends the push message. /// </summary> /// <param name="request">The request.</param> /// <returns>PushResponseCode.</returns> /// <exception cref="System.InvalidOperationException">Failed to send push message.</exception> public PushResponse SendPushMessage(PushMessageRequestV3 request) { try { var httpRequest = CreatePushRequest(request); var responseContent = httpRequest.ReadResponseAsText(Encoding.UTF8); return(ParseResponse(responseContent)); } catch (HttpOperationException httpEx) { throw PushMessageException.FromHttpOperationException(httpEx) ?? httpEx as Exception; } catch (Exception ex) { throw ex.Handle(request); } }
/// <summary> /// Creates the request option. /// </summary> /// <param name="request">The request.</param> /// <returns>Dictionary<System.String, System.Object>.</returns> protected Dictionary <string, object> CreateRequestOptions(PushMessageRequestV3 request) { Dictionary <string, object> result = new Dictionary <string, object>(); if (request != null) { result.Add("sendno", GenerateSendIdentity()); if (request.LifeTime != null) { result.Add("time_to_live", request.LifeTime.Value); } if (!string.IsNullOrWhiteSpace(request.OverrideMessageId)) { result.Add("override_msg_id", request.OverrideMessageId); } result.Add("apns_production", !(request.IsTestEnvironment ?? this.IsTestEnvironment ?? false)); } return(result); }
/// <summary> /// To the push message request v3. /// </summary> /// <param name="request">The request.</param> /// <returns>Beyova.JPush.V3.PushMessageRequestV3.</returns> public static Beyova.JPush.V3.PushMessageRequestV3 ToPushMessageRequestV3(this PushMessageRequest request) { Beyova.JPush.V3.PushMessageRequestV3 result = null; if (request != null) { result = new Beyova.JPush.V3.PushMessageRequestV3() { Platform = request.Platform, IsTestEnvironment = request.IsTestEnvironment, LifeTime = request.LifeTime, OverrideMessageId = request.OverrideMessageId, Notification = new Notification(), AppMessage = new AppMessage { Content = request.Message.Content, Title = request.Message.PushTitle, CustomizedValue = request.Message.CustomizedValue } }; Audience audience = new Audience(); List <string> list = new List <string>(request.ReceiverValue.Split(new char[] { ',', ';', ' ' }, StringSplitOptions.RemoveEmptyEntries)); switch (request.PushType) { case PushType.Broadcast: audience.Add(PushTypeV3.Broadcast, null); break; case PushType.ByAlias: audience.Add(PushTypeV3.ByAlias, list); break; case PushType.ByRegistrationId: audience.Add(PushTypeV3.ByRegistrationId, list); break; case PushType.ByTag: audience.Add(PushTypeV3.ByTagWithinOr, list); break; default: break; } result.Audience = audience; Notification notification = new Notification(); if ((request.Platform & PushPlatform.Android) == PushPlatform.Android) { result.Notification.AndroidNotification = new AndroidNotificationParameters { Alert = request.Message.Content, BuilderId = request.Message.BuilderId, CustomizedValues = request.Message.CustomizedValue, Title = request.Message.PushTitle }; } if ((request.Platform & PushPlatform.iOS) == PushPlatform.iOS) { result.Notification.iOSNotification = new iOSNotificationParameters { Alert = request.Message.Content, Sound = request.Message.Sound, CustomizedValues = request.Message.CustomizedValue, Badge = request.Message.BadgeValue }; } } return(result); }