Xamarin.iOS обрабатывает push-уведомления, когда приложение не закрыто - PullRequest
0 голосов
/ 04 июня 2018

Мне удалось обработать push-уведомление, если приложение работает в фоновом режиме, используя метод didReceiveRemoteNotification.Есть ли способ обработки push-уведомлений, если приложение находится на переднем плане и не закрыто?Спасибо

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Метод переопределения ReceivedRemoteNotification или DidReceiveRemoteNotification в AppDelegate будет запущен при получении push-уведомления, когда вы находитесь на переднем плане.

В этом методе вы можете проверить, является ли ваше приложениев состоянии Active или нет, и на его основе вы можете обрабатывать свои уведомления.

if (UIApplication.SharedApplication.ApplicationState == UIApplicationState.Active) 
{
    //You app is in Foreground state.
    //Process the Pushnotification data, or show alert.
}

Документ Apple .

Реализуйте приложение (: didReceiveRemoteNotification: fetchCompletionHandler :) вместо этого всякий раз, когда это возможно.Если ваш делегат реализует оба метода, объект приложения вызывает приложение (: didReceiveRemoteNotification: fetchCompletionHandler :).

Итак, если у вас есть оба метода (ReceivedRemoteNotification & DidReceiveRemoteNotification)реализованный в вашем AppDelegate, тогда будет вызван метод DidReceiveRemoteNotification.

0 голосов
/ 26 июня 2018

Для обработки события push-уведомления независимо от того, запущено приложение на переднем или заднем плане.Выполните следующие действия, чтобы всегда вызывать DidReceiveRemoteNotification

1) Переопределить метод DidReceiveRemoteNotification в AppDelegate.cs

public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)

2) Добавить необходимые фоновые режимы - удаленное уведомление (значение) в info.plist

3) Установите для содержимого, доступного в полезной нагрузке, значение 1

{
"aps" : {
    "alert" : {
        "title" : "Game Request",
        "body" : "Bob wants to play poker"
    },
    "badge" : 5,
    "content-available" : 1
}

}

0 голосов
/ 05 июня 2018

Реализовали ли вы UserNotification ?Если вы развернете свой проект на iOS 10+, вы можете попытаться подписать уведомление на FinishedLaunching(UIApplication application, NSDictionary launchOptions), например:

if (UIDevice.CurrentDevice.CheckSystemVersion(10, 0))
{
    var authOptions = UNAuthorizationOptions.Alert | UNAuthorizationOptions.Badge | UNAuthorizationOptions.Sound;
    UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) => {
        Console.WriteLine(granted);
    });
    UNUserNotificationCenter.Current.Delegate = new MyNotificationCenterDelegate();
}

Затем, когда уведомление придет и приложение будет на переднем плане, WillPresentNotification() будетогонь, это событие дескриптора возвращает, какое действие будет реагировать это приложение, когда приходит уведомление.Наконец, вы можете получить userInfo в событии DidReceiveNotificationResponse():

public class MyNotificationCenterDelegate : UNUserNotificationCenterDelegate
{
    public override void DidReceiveNotificationResponse(UNUserNotificationCenter center, UNNotificationResponse response, Action completionHandler)
    {
        completionHandler();
    }

    public override void WillPresentNotification(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
    {
        completionHandler(UNNotificationPresentationOptions.Sound | UNNotificationPresentationOptions.Alert);

    }       
}

Но если вы не хотите внедрять UserNotification или вы просто отправляете тихое удаленное уведомление с помощью клавиши content-available truedidReceiveRemoteNotification() также будет запущен, даже если приложение находится на переднем плане.

...