为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

iOS
噜噜哒 2019-10-29 11:18:43
当应用程序进入前台时,我有推送通知正在工作,并设法更新了图标徽章计数。我对此有点困惑... iPhone收到通知,弹出消息似乎激活了我的应用程序,并且徽章仅在我启动该应用程序后更新。就用户体验而言,这听起来不对。我的理解是,徽章计数应该通过增加计数来通知用户需要采取什么措施,但这不会发生,直到应用程序上线之后。那么,有没有一种方法可以让应用在收到推送通知时以及在后台时更新其徽章计数?请注意,我的应用程序不使用位置,并且我已UIRemoteNotificationTypeBadge在通知注册请求中使用。干杯AF
查看完整描述

3 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

实际上,在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

}


查看完整回答
反对 回复 2019-10-29
  • 3 回答
  • 0 关注
  • 633 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信