private static byte[] GeneratePayload(NotificationPayload payload)
        {
            try
            {
                //convert Devide token to HEX value.
                byte[] deviceToken = new byte[payload.DeviceToken.Length / 2];
                for (int i = 0; i < deviceToken.Length; i++)
                {
                    deviceToken[i] = byte.Parse(payload.DeviceToken.Substring(i * 2, 2), System.Globalization.NumberStyles.HexNumber);
                }

                var memoryStream = new MemoryStream();

                // Command
                memoryStream.WriteByte(1); // Changed command Type

                //Adding ID to Payload
                memoryStream.Write(Encoding.ASCII.GetBytes(payload.PayloadId.ToString()), 0, payload.PayloadId.ToString().Length);

                //Adding ExpiryDate to Payload
                int    epoch     = (int)(DateTime.UtcNow.AddMinutes(300) - new DateTime(1970, 1, 1)).TotalSeconds;
                byte[] timeStamp = BitConverter.GetBytes(epoch);
                memoryStream.Write(timeStamp, 0, timeStamp.Length);

                byte[] tokenLength = BitConverter.GetBytes((Int16)32);
                Array.Reverse(tokenLength);
                // device token length
                memoryStream.Write(tokenLength, 0, 2);

                // Token
                memoryStream.Write(deviceToken, 0, 32);

                // String length
                string apnMessage = payload.ToJson();
                Logger.Info("Payload generated for " + payload.DeviceToken + " : " + apnMessage);

                byte[] apnMessageLength = BitConverter.GetBytes((Int16)apnMessage.Length);
                Array.Reverse(apnMessageLength);

                // message length
                memoryStream.Write(apnMessageLength, 0, 2);

                // Write the message
                memoryStream.Write(Encoding.ASCII.GetBytes(apnMessage), 0, apnMessage.Length);
                return(memoryStream.ToArray());
            }
            catch (Exception ex)
            {
                Logger.Error("Unable to generate payload - " + ex.Message);
                return(null);
            }
        }
Example #2
0
        public static bool SendPushNotification(string ApplicationId, string UserMessage, string Flag, string JsonMessage, Dictionary <string, object> Dictionary, int BadgeCount = 1, bool IsSoundOn = true)
        {
            try
            {
                UserMessage = (IsSoundOn == false ? "" : UserMessage);
                string Sound    = (IsSoundOn == false ? "" : "default");
                var    payload1 = new NotificationPayload(ApplicationId, UserMessage, BadgeCount, Sound, "1");
                payload1.AddCustom("flag", Flag);
                payload1.AddCustomJson("message2", Dictionary);
                payload1.AddCustom("message1", JsonMessage);
                var p = new List <NotificationPayload> {
                    payload1
                };
                var FileName = ConfigurationManager.AppSettings["PushFileName"].ToString(); //Pick from Web Config
                var password = ConfigurationManager.AppSettings["PushPassword"].ToString(); //Pick From Web Config
                // var P12File = HttpContext.Current.Server.MapPath("/Infrastructure/PushNotificationFile/" + FileName);
                var P12File  = System.Web.Hosting.HostingEnvironment.MapPath("/Infrastructure/PushNotificationFile/" + FileName);
                var push     = new PushNotification(false, P12File, password);
                var rejected = push.SendToApple(p);
                var feedback = push.GetFeedBack();

                if (feedback.Count() > 0)
                {
                    return(false);
                }
                else
                {
                    return(true);
                }
            }
            catch (Exception ex)
            {
                string ErrorMsg = ex.Message.ToString();
                ErrorLogging.LogError(ex);
                return(false);
            }
        }