0

i have developed code for push notification in ios in c# but it is not sending notification in mobile. I have used pushsharp library.

My code is as followed:

PushNotificationApple pushNotification = new PushNotificationApple();
pushNotification.SendNotification(postData);

My PushNotificationApple constructor code is as below:-

public PushNotificationApple()
        {
            if (_pushBroker == null)
            {
                //Create our push services broker
                _pushBroker = new PushBroker();

                //Wire up the events for all the services that the broker registers
                _pushBroker.OnNotificationSent += NotificationSent;
                _pushBroker.OnChannelException += ChannelException;
                _pushBroker.OnServiceException += ServiceException;
                _pushBroker.OnNotificationFailed += NotificationFailed;
                _pushBroker.OnDeviceSubscriptionExpired += DeviceSubscriptionExpired;
                _pushBroker.OnDeviceSubscriptionChanged += DeviceSubscriptionChanged;
                _pushBroker.OnChannelCreated += ChannelCreated;
                _pushBroker.OnChannelDestroyed += ChannelDestroyed;


                var appleCert = File.ReadAllBytes(System.Web.Hosting.HostingEnvironment.MapPath("~/Certificates" + ConfigSettings.SnaptymAPNSCertificate));


                _pushBroker.RegisterAppleService(new ApplePushChannelSettings(false, appleCert,ConfigSettings.SnaptymAPNSPassword)); //Extension method                
            }
        }

My SendNotification function is as below:-

public bool SendNotification(GcmNotificationPostDataModel postData)
        {

            if (_pushBroker != null)
            {
                foreach (var registrationId in postData.RegistrationIds)
                {

                    _pushBroker.QueueNotification(new AppleNotification()
                                                .ForDeviceToken(registrationId) //the recipient device id
                                                .WithAlert(postData.Data.Message) //the message
                                                .WithBadge(1)
                                                .WithSound("sound.caf"));

                }
            }

            return true;
        }
Nisarg Shah
  • 9
  • 1
  • 4
  • What error you are receiving ? You can trace the process in different events of push broker. Check if there is any exception – Ronak Patel Apr 14 '16 at 11:39
  • Make sure this is not the case with you http://stackoverflow.com/questions/28499395/apn-production-certificate-not-being-recognized-by-pushsharp – Ronak Patel Apr 14 '16 at 12:26
  • @patel Good call for production environment, but currently the OP is sending to sandbox. Can be seen in the first parameter of `new ApplePushChannelSettings(false, ....)` And also, this would raise an exception. – derpirscher Apr 14 '16 at 21:27
  • Your code is sending the message to the sandbox server of apple. Make sure, your ios app is also configured to register at the sandbox server (ie built with a development profile!) and like @patel said: add handlers for all of the pushbroker's events and see if any of the error events get raised. – derpirscher Apr 14 '16 at 21:31

1 Answers1

1

I am making use of PushSharp 4.0.10 and the following code works for me.

     private void SendMessage()
        {
            //IOS
            var MainApnsData = new JObject();
            var ApnsData = new JObject();
            var data = new JObject();

            MainApnsData.Add("alert", Message.Text.Trim());
            MainApnsData.Add("badge", 1);
            MainApnsData.Add("Sound", "default");

            data.Add("aps", MainApnsData);

            ApnsData.Add("CalledFromNotify", txtboxID.Text.Trim());
            data.Add("CustomNotify", ApnsData);

            //read the .p12 certificate file
            byte[] bdata = System.IO.File.ReadAllBytes(Server.MapPath("~/App_Data/CertificatesPushNew.p12"));

 //create push sharp APNS configuration
            var config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox,bdata,"YourPassword");


            //create a apnService broker
            var apnsBroker = new ApnsServiceBroker(config);

            // Wire up events
            apnsBroker.OnNotificationFailed += (notification, aggregateEx) => {

                aggregateEx.Handle(ex => {

                    // See what kind of exception it was to further diagnose
                    if (ex is ApnsNotificationException)
                    {
                        var notificationException = (ApnsNotificationException)ex;

                        // Deal with the failed notification
                        var apnsNotification = notificationException.Notification;
                        var statusCode = notificationException.ErrorStatusCode;

                        Console.WriteLine($"Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}");

                    }
                    else
                    {
                        // Inner exception might hold more useful information like an ApnsConnectionException           
                        Console.WriteLine($"Apple Notification Failed for some unknown reason : {ex.InnerException}");
                    }

                    // Mark it as handled
                    return true;
                });
            };

            apnsBroker.OnNotificationSucceeded += (notification) => {
                Console.WriteLine("Apple Notification Sent!");
            };

            var fbs = new FeedbackService(config);
            fbs.FeedbackReceived += (string deviceToken1, DateTime timestamp) =>
            {
                //Remove the deviceToken from your database
                // timestamp is the time the token was reported as expired
                Console.WriteLine("Feedback received!");
            };
            fbs.Check();

            // Start the broker
            apnsBroker.Start();

            var deviceToken = "Your device token";
            // Queue a notification to send
            apnsBroker.QueueNotification(new ApnsNotification
            {
                DeviceToken = deviceToken,
                Payload= data

 });

            // Stop the broker, wait for it to finish   
            // This isn't done after every message, but after you're
            // done with the broker
           apnsBroker.Stop();
        }
Debasish
  • 417
  • 1
  • 10
  • 21