private async Task ProcessPendingActionsOrSaveMessage(SimplePushMessage message) { // Do we have any pending actions for this message? var pendingAction = await _pushDataContext.MessageInteractions.GetAsync(message.MessageId); if (pendingAction != null) { Logger.Instance.LogInformation("Found pending action of {0} for message {1}", pendingAction.UserAction, message.MessageId); await _pushDataContext.MessageInteractions.DeleteAsync(pendingAction.Id); await SendInteractionResultAsync(message, pendingAction.InteractionType, pendingAction.ButtonDescription, pendingAction.UserAction, pendingAction.InteractionTime); } else { // Store the message for later await _pushDataContext.SimplePushMessages.AddOrUpdateAsync(new PendingSimplePushMessage { Id = message.MessageId, Message = message }); } await _pushDataContext.SaveChangesAsync(); }
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); }