在后台运行应用时通过推送通知更新徽章

当应用程序进入前台时,我有推送通知正在工作,并设法更新了图标徽章计数。


我对此有点困惑... iPhone收到通知,弹出消息似乎激活了我的应用程序,并且徽章仅在我启动该应用程序后更新。


就用户体验而言,这听起来不对。我的理解是,徽章计数应该通过增加计数来通知用户需要采取什么措施,但这不会发生,直到应用程序上线之后。


那么,有没有一种方法可以让应用在收到推送通知时以及在后台时更新其徽章计数?


请注意,我的应用程序不使用位置,并且我已UIRemoteNotificationTypeBadge在通知注册请求中使用。


干杯AF


噜噜哒
浏览 634回答 3
3回答

宝慕林4294392

实际上,在iOS 10中,远程通知将didReceiveRemoteNotification在您的AppDelegate中自动调用Method。您有2种在后台更新徽章计数的方法。我也为我当前的应用程序完成了此操作。您也不需要Notification Service Exetension。第一种方式将带有有效载荷的APS徽章密钥发送到APN。这将根据徽章有效载荷中的Integer值更新徽章计数。例如:// Payload for remote Notification to APN{    "aps": {        "content-available": 1,        "alert": "Hallo, this is a Test.",        "badge": 2, // This is your Int which will appear as badge number,        "sound": default    }}第二路当applicationState处于时,您可以切换application.applicationState并更新徽章计数.background。但是当发送到APN ex时,您必须注意不要在Notification负载中设置徽章密钥参数// Payload to APN as silent push notification{    "aps": {        "content-available": 1    }}根据应用程序状态处理徽章更新这是我的工作代码,用于在APN的有效负载中在没有徽章密钥的情况下更新徽章计数。func application(_ application: UIApplication, didReceiveRemoteNotification    userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {    print("APN recieved")    // print(userInfo)    let state = application.applicationState    switch state {    case .inactive:        print("Inactive")    case .background:        print("Background")        // update badge count here        application.applicationIconBadgeNumber = application.applicationIconBadgeNumber + 1    case .active:        print("Active")    }}重置徽章计数当您的应用恢复为活动状态时,请不要忘记重置您的徽章计数。func applicationDidBecomeActive(_ application: UIApplication) {    // reset badge count    application.applicationIconBadgeNumber = 0}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

iOS