gpt4 book ai didi

ios - 如果在应用程序未运行时收到推送通知,则推送通知会消失

转载 作者:可可西里 更新时间:2023-11-01 17:14:29 25 4
gpt4 key购买 nike

我正在开发一个可以接收推送通知的应用程序,在某些情况下,推送通知会触发后台获取操作。因此,我为我的应用启用了 remote-notification 后台功能。

当应用挂起时,推送通知导致应用唤醒并执行application:didReceiveRemoteNotification:fetchCompletionHandler,横幅出现在主屏幕上,通知保留在通知中心,直到用户点击它以启动应用程序。它完全按预期工作。

当应用程序未运行时,只要应用程序未被用户强制退出(参见 apple's documentation ),通知就会启动应用程序,并且应用程序执行 application:didFinishLaunchingWithOptions应用程序:didReceiveRemoteNotification:fetchCompletionHandler。横幅出现在主屏幕上,但随后通知消失。它不会保留在通知中心。此外,如果设备被锁定,有时通知甚至在发出警报声之前就消失了。

有趣的是,如果我禁用远程通知后台模式,一切正常。在这种情况下,应用程序不会在推送通知到达时启动。

当远程通知后台模式打开并且传入通知启动未运行的应用程序时,如何防止通知消失?我是否需要在 application:didFinishLaunchingWithOptions 中包含一些内容,让应用知道它正在后台启动,并且不应丢弃通知?

最佳答案

推送通知似乎消失了,因为当应用程序在后台启动并执行 application:didFinishLaunchingWithOptions: 时,它正在重新注册远程通知。重新注册似乎会丢弃任何排队的消息。

我的解决方案是在调用推送注册方法之前检查应用程序是否由于推送通知而在后台启动。我使用的是 Kinvey SDK,因此以下代码使用了 Kinvey 的方法,但我强烈怀疑此解决方案将适用于其他推送注册方法,包括标准的 UIApplication.registerForRemoteNotifications

导致我出现问题的代码是:

func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
// Initialize Kinvey SDK singleton
KCSClient.sharedClient().initializeKinveyServiceForAppKey("myappid",
withAppSecret: "mysecret",
usingOptions: nil)

KCSPush.registerForPush()
// rest of method...
}

我通过将其更改为解决了这个问题:

func application(application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool
{
// Initialize Kinvey SDK singleton
KCSClient.sharedClient().initializeKinveyServiceForAppKey("myappid",
withAppSecret: "mysecret",
usingOptions: nil)

if let _ =
launchOptions?[UIApplicationLaunchOptionsRemoteNotificationKey] as? NSDictionary {

let appState: UIApplicationState = UIApplication.sharedApplication().applicationState

if appState == .Active || appState == .Inactive {
KCSPush.registerForPush()
}
} else {
KCSPush.registerForPush()
}
// rest of method...
}

现在,当应用程序通过传入的推送通知在后台启动时,它不会重新注册推送,并且通知会保留在 iOS 通知中心,直到用户点击它或手动启动应用程序。

关于ios - 如果在应用程序未运行时收到推送通知,则推送通知会消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37174545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com