Фоновое уведомление из Azure Notification Hub в Xamarin - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть центр уведомлений Azure, который успешно отправляет уведомления на Android и на iOS на переднем плане.

Вот мой шаблон APNS:

const string templateBodyAPNS = "{ aps = { \"content-available\" = 1; }; Message = ${messageParam}; id=${id; }";

Это отлично работает, и я могу обрабатывать уведомления на переднем плане и нажимать точки останова и т.д. через код

public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action completionHandler)

Однако public override void DidReceiveRemoteNotification(UIApplication application,NSDictionary userInfo, Action completionHandler), похоже, не получает уведомление, когда приложение находится в фоновом режиме. Я добавляю точки останова и операторы Debug, которые никогда не вызываются. Тем не менее, уведомление все еще срабатывает в фоновом режиме.

Есть ли что-то очевидное, чего мне не хватает?

[править]

Этот метод не срабатывает при получении уведомления с приложением в фоновом режиме.

</p> <pre><code> public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler) { NSDictionary aps = userInfo.ObjectForKey(new NSString("aps")) as NSDictionary; string alert = string.Empty; if (aps.ContainsKey(new NSString("alert"))) alert = (aps[new NSString("alert")] as NSString).ToString(); // Show alert if (!string.IsNullOrEmpty(alert)) { var notificationAlert = UIAlertController.Create("Notification", alert, UIAlertControllerStyle.Alert); notificationAlert.AddAction(UIAlertAction.Create("OK", UIAlertActionStyle.Cancel, null)); UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(notificationAlert, true, null); } }

Этот метод запускает уведомление, когда приложение находится на переднем плане и работает (я беру удаленное уведомление и создаю локальное уведомление. </p> <pre><code>public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler) { if (notification.Request.Content.Body != null) { string[] notifdata = notification.Request.Content.Body.Split(','); if (notifdata.Length > 1) { var content = new UNMutableNotificationContent(); content.Title = "New News Item"; content.Subtitle = notifdata[0]; //content.Body = "Body"; content.Badge = 1; content.CategoryIdentifier = notifdata[1]; content.Sound = UNNotificationSound.Default; var trigger = UNTimeIntervalNotificationTrigger.CreateTrigger(10, false); var requestID = "notificationRequest"; var request = UNNotificationRequest.FromIdentifier(requestID, content, trigger); UNUserNotificationCenter.Current.Delegate = new UserNotificationCenterDelegate(); UNUserNotificationCenter.Current.AddNotificationRequest(request, (err) => { if (err != null) { // Report error System.Console.WriteLine("Error: {0}", err); } else { var runcount = Preferences.Get("count", 0); // Report Success System.Console.WriteLine("Count is" + runcount); System.Console.WriteLine("Notification Scheduled: {0}", request); } }); }

Спасибо!

...