Oht
Oht

Reputation: 409

Push notifications on Xamarin IOS

we're developing a cross platform(ios and android) app on Xamarin using Xamarin.Forms. We've managed to get the same application working on IOS and Android. Great!

We would like to include push notifications in our app and this already works in Android. For IOS however, it's a completely different story.. No bare bones library to be found, Anywhere!!

For android we used the Google Cloud Messaging Client by Redth, this libary is so easy to use. We had it running in 2 hours or less. However, Nothing to be found anything like this for IOS.

How do i register my IOS device for push notifications in xamarin? We already have the right certificates, etc. its only the device side we need to get working. Something to point me in the right direction?

Upvotes: 1

Views: 4808

Answers (3)

Sayed Azharuddin
Sayed Azharuddin

Reputation: 55

    // Register for push notifications.
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
        {
            var authOptions = UserNotifications.UNAuthorizationOptions.Alert | UserNotifications.UNAuthorizationOptions.Badge | UserNotifications.UNAuthorizationOptions.Sound;
            UserNotifications.UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) =>
            {
                Console.WriteLine(granted);
            });
            UIApplication.SharedApplication.RegisterForRemoteNotifications();
        }
        else if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
        {
            var settings = UIUserNotificationSettings.GetSettingsForTypes(UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound, new NSSet());
            UIApplication.SharedApplication.RegisterUserNotificationSettings(settings);
            UIApplication.SharedApplication.RegisterForRemoteNotifications();
        }
        else
        {
            var notificationTypes = UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound;
            UIApplication.SharedApplication.RegisterForRemoteNotificationTypes(notificationTypes);
        }

}
private SBNotificationHub Hub { get; set; }
        public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
        {

            Hub = new SBNotificationHub(Constants.ListenConnectionString, Constants.NotificationHubName);
//if user is not logged In
            Employee employee = JsonConvert.DeserializeObject<Employee>(Settings.CurrentUser);
            if (employee != null)
            {

                NSSet tags = new NSSet(new string[] { "username:" + employee.Email }); // create tags if you want
                Hub.RegisterNativeAsync(deviceToken, tags, (errorCallback) =>
                    {
                        if (errorCallback != null)
                            Console.WriteLine("RegisterNativeAsync error: " + errorCallback.ToString());
                    });
            }
            else
            {
                Hub.UnregisterAllAsync(deviceToken, (error) =>
                {
                    if (error != null)
                    {
                        Console.WriteLine("Error calling Unregister: {0}", error.ToString());
                        return;
                    }
                });
            }
        }


public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error)
        {
            AzurePushNotificationManager.RemoteNotificationRegistrationFailed(error);
        }
        public override void ReceivedRemoteNotification(UIApplication application, NSDictionary userInfo)
        {
            ProcessNotification(userInfo, false);
        }
        void ProcessNotification(NSDictionary options, bool fromFinishedLaunching)
        {
            // Check to see if the dictionary has the aps key.  This is the notification payload you would have sent
            if (null != options && options.ContainsKey(new NSString("aps")))
            {
                //Get the aps dictionary
                NSDictionary aps = options.ObjectForKey(new NSString("aps")) as NSDictionary;

                string alert = string.Empty;

                if (aps.ContainsKey(new NSString("alert")))
                    alert = (aps[new NSString("alert")] as NSString).ToString();

                if (!fromFinishedLaunching)
                {
                    //Manually show an alert
                    if (!string.IsNullOrEmpty(alert))
                    {
                        NSString alertKey = new NSString("alert");
                        UILocalNotification notification = new UILocalNotification();
                        notification.FireDate = NSDate.Now;
                        notification.AlertBody = aps.ObjectForKey(alertKey) as NSString;
                        notification.TimeZone = NSTimeZone.DefaultTimeZone;
                        notification.SoundName = UILocalNotification.DefaultSoundName;
                        UIApplication.SharedApplication.ScheduleLocalNotification(notification);
                    }
                }
            }
        }

Upvotes: 0

chandan
chandan

Reputation: 2453

Use this push notification link for getting or enabling push notification services in IOS.

You will need to do following steps:

1> Create and download SSL and APNS certificates and push notification enabled provisioning profile.

2> First double click on SSL certificates than APNS certificates than provisioning profile.

3.> Now export p12 file from key-chain access and create PEM file from command prompt.

4> Now Register for push notification within FinishedLaunching.

5.> Run your program , You will get a device token and send it to the server.

Now APNS server would send this notification respective to the token.

Upvotes: 1

kwiersma
kwiersma

Reputation: 321

You might want to look into PushSharp to power the server side part of the iOS and Android notifications. I believe they also have a Xamarin.iOS library you can use to subscribe to the push notifications.

Upvotes: 1

Related Questions