#azure #xamarin #azure-notificationhub
#azure #xamarin #azure-notificationhub
Вопрос:
У меня есть центр уведомлений 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)
похоже, не получает уведомление, когда приложение работает в фоновом режиме. Я добавляю точки останова и инструкции отладки, которые никогда не вызываются. Однако уведомление по-прежнему запускается в фоновом режиме.
Есть ли что-нибудь очевидное, чего мне не хватает?
[править / править код]
Этот метод не запускается при получении уведомления с приложением в фоновом режиме.
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);
}
}
Этот метод запускает уведомление, когда приложение находится на переднем плане и работает (я беру удаленное уведомление и создаю локальное уведомление.
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.Defau<
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);
}
});
}
Спасибо!
Комментарии:
1. Можете ли вы поделиться соответствующим кодом?
2. @G.hakim - Отредактировал вопрос с соответствующим кодом.