Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何重置徽章应用程序图标号?_Ios_Swift3_Apple Push Notifications_Cloudkit - Fatal编程技术网

Ios 如何重置徽章应用程序图标号?

Ios 如何重置徽章应用程序图标号?,ios,swift3,apple-push-notifications,cloudkit,Ios,Swift3,Apple Push Notifications,Cloudkit,我将推送通知集成到CloudKit中,这样iCloud中的每一个更改都会在我的iPhone上弹出一个通知,并且徽章应用程序图标号会相应地添加一个。但是,当我使用代码时: application.applicationBadgeNumber=0 要在applicationIDBECOMEACTIVE_uu应用程序:UIApplication中重置该数字,我注意到徽章应用程序图标数字确实消失了,但如果再次出现另一个新通知,则该数字不会像预期的那样重新开始,而只是在重置之前将一个添加到原始总数中。因此

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

application.applicationBadgeNumber=0

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

问题是您的apns有效负载,它包含的徽章计数超过1,您还需要重置有效负载

当您将application.applicationBadgeNumber设置为0时,它只在本地重置标记计数,而不是在服务器中重置

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

更新:Apns有效载荷

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

希望能有帮助


干杯。

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

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)

我明白你的意思,但是你能给我看一些具体的代码来重置服务器端吗?我试过一些方法,但都不管用。@Jaheny应用程序中一定有你必须使用的api服务吗?推送是通过服务器应用程序发送的,但不发送,因此当他们在服务器中创建apns消息时,他们必须使用一些负责徽章计数的数据库,查看我的更新apns有效负载的外观,并与知道在何处更改它的api人员联系。这很好,但现在CKModfifyBadgeOperation已被弃用。怎么办/
let operation = CKModifyBadgeOperation(badgeValue: 0)
operation.modifyBadgeCompletionBlock = {(error) in
    if let error = error{
        print("\(error)")
        return
    }
    application.applicationIconBadgeNumber = 0
}
CKContainer.default().add(operation)