发送到后台的本地通知在模拟器中工作,但不在设备上工作

时间:2015-10-27 17:57:57

标签: ios swift notifications local simulator

在模拟器中,我能够得到我想要的确切结果:当我触发通知并且我的模拟器手机被锁定时,通知会被推送到手表。

这曾经在设备上工作(我在iOS 9.1上的iPhone 6和在watchOS 2.0上观看)。由于某种原因,它停止了工作,我不知道如何调试问题。

所以在设备上,我通过进入主屏幕并锁定手机并确保我的手表处于睡眠状态来确保应用程序处于后台。触发通知时,没有任何反应。当我打开应用程序时,通知终于被触发了。 I.E.如果我触发3个通知,则在我将应用程序重新打开到前台之前,它们都不会注册。这不是它在模拟器中的工作方式(模拟器具有上述正确的行为)。

我通过更改存储在Firebase数据库中的文本对象来触发通知。更改调用sendNotification函数。同样,这在模拟器中工作得很好并且用于在设备上工作但由于某些原因不再起作用。

在app delegate中我有:

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");
}

1 个答案:

答案 0 :(得分:0)

模拟器似乎与设备不同。模拟器本地通知就像远程推送通知一样奇怪。

我最终放弃尝试让应用程序在设备后台显示本地通知,因为我已经了解到这不是预期的行为。

正确的解决方案是设置远程推送通知,我使用Parse来做。现在它按预期工作了。我有一个使用Parse REST API向Parse发送POST请求的Web服务器,然后我的iOS应用程序被设置为接收远程推送通知,当我的手机被锁定时,该通知现在显示在我的手表上。