2016-09-23 2 views
2

Как обращаться с новым уведомлением iOS10 Действие, когда приложение закрыто (не в фоновом режиме)?Как обращаться с UNNotificationAction, когда приложение закрыто?

когда приложение minimalized все отлично работает с:

UNUserNotificationCenter.current().delegate = x 

и его обработки в

class x: UNUserNotificationCenterDelegate { 
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Swift.Void) { 
    } 
} 

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

+0

Я обнаружил, что это происходит только на моем реальном устройстве, симулятор в порядке с ним –

ответ

2

Да, он всегда запускает приложение, когда пользователь нажимает действие в уведомлении, кнопка запускает ваше приложение. Некоторые строки из apple doc:

врезки кнопки запускает приложение (либо на переднем или заднем плане) и дает возможность выполнить указанное действие. Вы используете этот класс для указания текста, отображаемого в кнопке, и информации, которую ваше приложение должно выполнить соответствующее действие.

+0

Я создал новый проект и там он работает. я отлаживаю его, установив badgeIcon = 1 уведомления, и с действием я снова делаю его 0. но в моем большом проекте сброс badgeIcon на 0, когда приложение закрыто, не работает. ничего не работает, нет действия, когда приложение закрыто, но в фоновом режиме - работает. что-то не так с моим проектом, но что? –

+0

В вашем приложении ничего не случилось. Поскольку push-уведомление обрабатывается iOS, а не ваше приложение, вы не можете изменить значок приложения при получении или отмене push-уведомления в Notification on kill. –

+0

но симулятор. и мы говорим о местном уведомлении –

1

Обработка кнопок уведомлений может быть выполнена как в Extension, так и в Containing App.

При нажатии кнопки действия ручка сначала переходит к Extension, а затем к Containing App, если требуется. Если Extension не обрабатывает действия уведомления, ручка передается на containing app.

Нажатие кнопки запускает приложение (или на переднем плане или фоне) и дает возможность выполнить указанное действие.

Обращение в расширении:

func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) 
{ 
    //You need to handle all the actions that appear with notification.. 
    completion(.dismissAndForwardAction) 
} 

Закрытие завершения принимает значение типа UNNotificationContentExtensionResponseOption:

enum UNNotificationContentExtensionResponseOption : UInt 
{ 
    case doNotDismiss //the custom UI is not dismissed after handling the action 
    case dismiss //the custom UI is dismissed after handling the action 
    case dismissAndForwardAction //the custom UI is dismissed after handling the action and the control is then passed to containing app for any additional handling 
} 

Обращение в App Содержит:

extension AppDelegate : UNUserNotificationCenterDelegate 
{ 
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) 
    { 
     // Action handling - handling for all actions is not required 
     completionHandler() 
    } 
} 

Для получения дополнительной информации вы можете обратиться к этому учебнику (https://github.com/pgpt10/RichNotificationSample).

Смежные вопросы