private static void ShowNativeNotification(Common.Message message, string notificationId, ButtonSet buttonSet = null, string alertTextOverride = null)
		{
			var nativeNotificationId = new Random().Next();

			// Setup intent to launch application
			var context = Application.Context;

			// Build the notification
			var builder = new Notification.Builder(context)
				.SetContentTitle(message.SenderDisplayName)
				.SetSmallIcon(Resource.Drawable.donky_notification_small_icon_simple_push)
				.SetContentText(alertTextOverride ?? message.Body)
				.SetVibrate(new[] { 0L, 100L })
			    .SetSound(RingtoneManager.GetDefaultUri(RingtoneType.Notification));

			var pushMessage = message as SimplePushMessage;
			if (pushMessage != null && buttonSet != null && buttonSet.ButtonSetActions.Any())
			{
				builder.SetAutoCancel(false);
				// Jelly Bean + above supports multiple actions
				if (buttonSet.ButtonSetActions.Count == 2
				    && Build.VERSION.SdkInt >= BuildVersionCodes.JellyBean)
				{
					foreach (var action in buttonSet.ButtonSetActions)
					{
						builder.AddAction(0,
							action.Label,
							CreateIntentForAction(context, nativeNotificationId, 
								notificationId, action, pushMessage,
								buttonSet));
					}
				}
				else
				{
					builder.SetContentIntent(CreateIntentForAction(context, nativeNotificationId, 
						notificationId, buttonSet.ButtonSetActions[0], 
						pushMessage, buttonSet));
				}
			}
			else
			{
				var intent = CreateIntentForBasicPush(context, nativeNotificationId, notificationId);
				builder.SetContentIntent(intent)
					.SetAutoCancel(true);
			}

            // bug
            if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
            {
                builder.SetCategory(Notification.CategoryMessage)
                    .SetPriority((int) NotificationPriority.High)
                    .SetVisibility(NotificationVisibility.Public);

                // this is for a Heads-Up Notification (Out of App Notification)
                var push = new Intent();
                push.AddFlags(ActivityFlags.NewTask);
                push.SetClass(context, Java.Lang.Class.FromType(context.GetType()));
                var fullScreenPendingIntent = PendingIntent.GetActivity(context, 0,
                    push, PendingIntentFlags.CancelCurrent);
                builder
                    .SetContentText(alertTextOverride ?? message.Body)
                    .SetFullScreenIntent(fullScreenPendingIntent, true);

            }

			var notification = builder.Build();

			notification.LedARGB = Color.White;
			notification.Flags |= NotificationFlags.ShowLights;
			notification.LedOnMS = 200;
			notification.LedOffMS = 2000;

			var notificationManager = (NotificationManager) context.GetSystemService(Context.NotificationService);
			notificationManager.Notify(nativeNotificationId, notification);
		}
		private static PendingIntent CreateIntentForAction(Context context, int nativeNotificationId,
			string donkyNotificationId, ButtonSetAction action, SimplePushMessage message, ButtonSet buttonSet)
		{
			var serialiser = DonkyCore.Instance.GetService<IJsonSerialiser>();
			var intent = new Intent(context, typeof(PushActionIntentService));
			if (Build.VERSION.SdkInt >= BuildVersionCodes.HoneycombMr1)
			{
				intent.AddFlags(ActivityFlags.IncludeStoppedPackages);
			}

			intent.PutExtra(DonkyAndroid.DonkyNotificationId, donkyNotificationId);
			intent.PutExtra(PushActionIntentService.NativeNotificationId, nativeNotificationId);
			intent.PutExtra(PushActionIntentService.ButtonActionData, action.Data);
			intent.PutExtra(PushActionIntentService.Message, serialiser.Serialise(message));
			intent.PutExtra(PushActionIntentService.ButtonSet, serialiser.Serialise(buttonSet));
			switch (action.ActionType)
			{
				case "Open":
					intent.SetAction(PushActionIntentService.OpenAction);
					intent.PutExtra(PushActionIntentService.UserAction, "Button" + (buttonSet.ButtonSetActions.IndexOf(action) + 1));
					break;

				case "DeepLink":
					intent.SetAction(PushActionIntentService.DeepLinkAction);
					intent.PutExtra(PushActionIntentService.UserAction, "Button" + (buttonSet.ButtonSetActions.IndexOf(action) + 1));
					break;

				case "Dismiss":
					intent.SetAction(PushActionIntentService.CancelAction);
					intent.PutExtra(PushActionIntentService.UserAction, "Dismissed");
					break;
			}
			
			var pendingIndentId = new Random().Next(Int32.MaxValue);
			return PendingIntent.GetService(context, pendingIndentId, intent, PendingIntentFlags.UpdateCurrent);
		}