В симуляторе я могу получить точный результат, который хочу: когда я запускаю уведомление, а мой телефон-симулятор заблокирован, уведомление отправляется на часы.
Раньше это работало на устройстве (мой iPhone 6 на iOS 9.1 и Watch на watchOS 2.0). По какой-то причине он перестал работать, и я не знаю, как отладить проблему.
Итак, на устройстве я убеждаюсь, что приложение находится в фоновом режиме, перейдя на главный экран, заблокировав телефон и убедившись, что мои часы спят. При срабатывании уведомления ничего не происходит. Когда я открываю приложение, уведомления наконец срабатывают. т.е. если я запускаю 3 уведомления, ни одно из них не регистрируется, пока я не открою приложение обратно на передний план. Это не так, как это работает в симуляторе (симулятор имеет правильное поведение, описанное выше).
Уведомление запускается, когда я изменяю текстовый объект, который хранится в моей базе данных Firebase. Изменение вызывает функцию sendNotification. Опять же, это отлично работает в симуляторе и раньше работало на устройстве, но по какой-то причине больше не работает.
В делегате приложения у меня есть:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Alert, categories: nil))
// Setting up Local Notification
let assistAction = UIMutableUserNotificationAction()
assistAction.activationMode = UIUserNotificationActivationMode.Background
assistAction.identifier = categoryID
assistAction.title = "Assist"
assistAction.authenticationRequired = false
assistAction.destructive = false
// Category
let assistCategory = UIMutableUserNotificationCategory()
assistCategory.identifier = categoryID
assistCategory.setActions([assistAction], forContext: UIUserNotificationActionContext.Default)
// Only way to get this to work with parameter
let categories = NSSet(object: assistCategory)
// Settings
let settings = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: categories as? Set<UIUserNotificationCategory>)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
// UIApplication.sharedApplication().registerForRemoteNotifications()
return true
}
Затем в моем контроллере представления у меня есть:
func sendNotification(customerName: String, helpText: String) {
// Local Notification
let notification = UILocalNotification()
notification.alertBody = "\(customerName) \(helpText)"
notification.soundName = UILocalNotificationDefaultSoundName
notification.fireDate = NSDate()
notification.category = categoryID
UIApplication.sharedApplication().presentLocalNotificationNow(notification)
print("Sent notification");
}