【问题标题】:How to reset the Badge app icon number?如何重置徽章应用图标编号?
【发布时间】:2017-03-10 14:04:26
【问题描述】:

我将推送通知集成到 CloudKit 中,以便 iCloud 中的每一次更改都会在我的 iPhone 上弹出一个通知,并且徽章应用程序图标编号会相应地添加一个。但是,当我使用代码时:

application.applicationIconBadgeNumber = 0

要在applicationDidBecomeActive(_ application: UIApplication) 中重置该数字,我注意到徽章应用程序图标编号确实消失了,但如果再次出现另一个新通知,该数字将不会像预期的那样再次从一个开始,而是在原始总数中添加一个重置前的号码。因此这个数字越来越大。我想知道如何解决这个问题?

【问题讨论】:

    标签: ios swift3 apple-push-notifications cloudkit


    【解决方案1】:

    问题是你的apns payload,它包含超过1的徽章计数,你也需要重置payload。

    当您设置 application.applicationIconBadgeNumber = 0 时,它只会在本地重置徽章计数,而不是在服务器中。

    解决方案也将重置服务器中用户的徽章计数。

    更新:Apns 有效负载

    {
        "aps" : {
            "alert" : {
                "title" : "Push",
                "body" : "Hello User"
            },
            "badge" : 5
        }
    
    }
    

    应用程序显示的徽章计数与上面的 apns 有效负载中相同,您需要从服务器重置上面有效负载中的徽章值。

    希望对你有帮助。

    干杯。

    【讨论】:

    • 我明白你的意思,但你能告诉我一些具体的代码来重置服务器端吗?我尝试了一些方法,但没有一个有效。
    • @Jaheny 您必须在应用程序中使用某些 api 服务?推送是通过服务器应用程序发送的,而不是发送它,所以当他们在服务器中创建apns 消息时,他们必须使用一些处理徽章计数的数据库,see my update how apns payload looks 与知道在哪里更改它的 API 人员交谈。
    【解决方案2】:

    我发现我不应该只将应用程序端设置为:

    UIApplication.sharedApplication().applicationIconBadgeNumber = 0
    

    但我还应该在 CKContainer 中设置 iCloud 端。因此,完整的代码如下:

    let operation = CKModifyBadgeOperation(badgeValue: 0)
    operation.modifyBadgeCompletionBlock = {(error) in
        if let error = error{
            print("\(error)")
            return
        }
        application.applicationIconBadgeNumber = 0
    }
    CKContainer.default().add(operation)
    

    【讨论】:

    • 这很好,但现在 CKModfifyBadgeOperation 已被弃用。做什么/
    猜你喜欢
    • 2017-02-13
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 2020-04-01
    • 1970-01-01
    相关资源
    最近更新 更多