CKModifyBadgeOperation 在 iOS 11 中已被弃用。有人知道替代方法吗?

2024-01-09

我搜索过,但找不到例子。我也尝试过改编此代码(在其他地方推荐(CloudKit 不会将我的徽章计数重置为 0 https://stackoverflow.com/questions/25120070/cloudkit-wont-reset-my-badge-count-to-0):

func resetBadgeCounter() {
    let badgeResetOperation = CKModifyBadgeOperation(badgeValue: 0)
    badgeResetOperation.modifyBadgeCompletionBlock = { (error) -> Void in
        if error != nil {
            print("Error resetting badge: \(String(describing: error))")
        }
        else {
            UIApplication.shared.applicationIconBadgeNumber = 0
        }
    }
    CKContainer.default().add(badgeResetOperation)
}

这目前有效,但不再受支持,并且可能很快就会消失。

我想也许我应该使用 CKModfyRecordsOperation 或其他一些 CKDatabaseOperation,但我什至不知道如何使用。


我希望这对某人有帮助,因为似乎没有其他解决方案/解决方法。

  1. 创建一个通知服务扩展 (UNNotificationServiceExtension)为您的应用程序。它相当简单,并且在中进行了详细描述修改新下发的通知内容 https://developer.apple.com/documentation/usernotifications/modifying_content_in_newly_delivered_notifications。如果您对传入通知进行任何类型的处理,您可能已经有了一个。

  2. 在扩展中,您通常会在以下位置执行所有通知处理:override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void). The request附带content通知的内容,其中包括徽章号码。然后您可以修改它并传递给contentHandler要显示。 (如果您不确定如何执行此操作,请检查link https://developer.apple.com/documentation/usernotifications/modifying_content_in_newly_delivered_notifications多于;它有详细的说明和代码。)

  3. 要在需要时跟踪并重置徽章编号,您需要利用应用程序组(例如group.com.tzatziki)。这样您就可以在应用程序和扩展程序之间共享数据。在 Xcode 中创建应用程序组可以通过添加相关的能力并在中进行了解释应用扩展编程指南:处理常见场景 https://developer.apple.com/library/archive/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html#//apple_ref/doc/uid/TP40014214-CH21-SW1.

  4. 使用存储机制(在应用程序组内)来跟踪徽章计数,例如UserDefaults,并在扩展中使用它来更新徽章计数。在前述的override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void),你可以这样写:

    let badgeNumber = UserDefaults(suiteName: "group.com.tzatziki")?.value(forKey: "badgeNumber") as? NSNumber ?? NSNumber(integerLiteral: 0)
    let badgeNumberInt = badgeNumber.intValue + 1
    notificationContent.badge = NSNumber(value: badgeNumberInt)
    UserDefaults(suiteName: "group.io.prata")?.setValue(notificationContent.badge, forKey: "badgeNumber")
    

where notificationContent是一个实例UNMutableNotificationContent,源自request.content.mutableCopy() as? UNMutableNotificationContent

  1. 现在,剩下要做的唯一一件事就是重置应用程序中共享的徽章计数UserDefaults and in UIApplication.shared.applicationIconBadgeNumber.

Cheers!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CKModifyBadgeOperation 在 iOS 11 中已被弃用。有人知道替代方法吗? 的相关文章

  • 如何了解 iOS 11 中设备屏幕是否正在录制

    我有一个应用程序 它具有受版权保护的内容 我不希望用户记录它 如果他们开始录制屏幕 我希望我的应用程序能够捕捉到这一点 如果正在录屏 用什么函数来捕捉 我不想阻止 我想理解并抓住它 注意 一些答案表示解决方案包括 AirPlay 和镜像 我
  • iOS15 B4 NSPersistentCloudKitContainer“帐户暂时不可用”错误

    我在 iOS15 beta 4 上使用 NSPersistentCloudKitContainer 来跨设备同步核心数据 在设备上启动并登录 iCloud 时 我在日志中收到以下错误 成功 0 madeChanges 0错误 我有以下代码
  • Xcode 9.2 中缺少标头搜索路径、库路径和链接路径部分

    想在我的项目的设置面板中添加第三方库路径 但问题是没有标题搜索路径 库路径和链接路径部分 缺少标题搜索路径部分 I am using Xcode 9 2 and Swift 4 点击All and Combined按钮 您会看到标题搜索路径
  • 如何解码不同类型的 JSON 属性? [复制]

    这个问题在这里已经有答案了 我有一个 JSON tvShow id 5348 name Supernatural permalink supernatural url http www episodate com tv show super
  • CKFetchRecordsOperation + CKQueryOperations ...我错过了什么?

    经过大量搜索示例代码后 设法拼凑出 CKFetchRecordsOperation 就在这里 但我一定错过了什么 别误会我的意思 它确实是一种享受 但是 要执行 CKFetchRecordsOperation 您需要一个 CKRecordI
  • 如何应用iOS VNImageHomographicAlignmentObservation warpTransform?

    我正在测试 Apple 的 Vision Alignment API 并对 VNHomgraphicImageRegistrationRequest 有疑问 有人让它工作吗 我可以从中得到 warpTransform 但我还没有看到一个有意
  • iOS11 AppIcon无法更改

    Xcode 9 测试版 6 iOS 11 测试版 10 我想要使 用自定义应用程序图标打包应用程序 因此我尝试替换 DerivedData Users XXX Library Developer Xcode DerivedData proj
  • Swift 4 JSON Codable - 返回的值有时是一个对象,其他是一个数组

    我从 API 获取的数据返回单个对象 但当有多个对象时 它会返回同一键中的数组 对于我正在使用的当前模型 结构 当数组出现时解码会失败 这些结果是随机排序的 这意味着我不知道何时会收到对象或数组 有没有办法创建一个模型 考虑到这一事实 并可
  • Swift 与 Objective C 指针操作问题

    我在 Objective C 中有这段代码 运行良好 list controller gt audioBufferList list gt mBuffers 0 mDataByteSize inNumberFrames kSampleWor
  • 在 Swift 4 中,扩展声明还不能被覆盖

    我最近将我的代码迁移到Swift 4 我面临一个问题扩展 i e 扩展的声明还不能被覆盖 我已经阅读了多篇重新评估此问题的帖子 但他们都不接受下面描述的场景 class BaseCell UITableViewCell Some code
  • 来自字符串的 Swift Keypath

    有没有办法在 Swift 4 中从字符串创建 Keypath 以通过路径或变量名访问结构中的值 最后我发现我应该使用 CodingKeys 而不是 KeyPaths 通过 String 访问结构体变量的值 提前致谢 迈克尔 考虑你有这样的东
  • 如何使用 nosql 构建成就和徽章

    我目前有一个使用 mongodb 作为数据库的社交游戏应用程序 我的问题是 如果我想创建一个积分和徽章系统 有哪些建议 成就 徽章的业务逻辑可能会变得非常复杂并且非常临时 因此实时授予徽章似乎效率不高 我想象将跟踪的操作添加到队列中的某处
  • 如何在红米手机上通过应用程序图标显示徽章数量?

    我可以使用以下代码在三星设备上使用应用程序图标显示徽章计数
  • Swift 4 使用随机密钥解码嵌套 JSON [重复]

    这个问题在这里已经有答案了 我是 Swift 4 的新手 正在尝试从 Wikipedia API 解码此 JSON 我正在努力定义一个结构 因为我发现的所有示例 教程都仅嵌套 1 2 层深度 除此之外 当其中一个密钥是随机的时 如何解码数据
  • iPhone X 上横向的 UICollectionView

    当 iPhone X 横向使用时 您应该检查 safeAreaInsets 以在左侧和右侧制作适当大的装订线 UITableView 有新的insetsContentViewsToSafeArea属性 默认 true 自动将单元格内容保留在
  • Android 操作项上的通知徽章

    我想在操作栏中放置的购物车图像上添加一个通知徽章 并以编程方式操作它 有帮助吗 您可以显示自定义MenuItem on ActionBar通过创建一个custom layout for MenuItem 要设置自定义布局 您必须使用菜单项属
  • silverlight/xaml 中通知的图标徽章覆盖

    我的 silverlight 应用程序中有一个功能区栏 并且在其中一个图标上我希望有一个徽章图标 显示该图标激活的视图中的项目数 想象一下 OS X 中显示未读邮件数量的邮件图标或 IOS 应用程序图标上的通知计数器 我对 xaml 样式不
  • 如何扩展 Array 以获得泛型类型?

    我有一个链表类 声明如下 class LinkedNode
  • iOS 11 中的密码自动填充快速输入栏

    iOS 11 中引入了一项新功能 应用程序密码自动填充 此功能允许用户直接从键盘快速输入栏使用其应用程序中保存的密码 https techcrunch com 2017 06 08 ios 11s new password autofill
  • iOS 11 特定设置部分的 URL 方案停止工作

    我的应用程序使用 URL 方案将用户直接带到 设置 常规 关于 部分 以下 URL 在 10 3 x 中工作正常 应用程序首选项 根 常规 路径 关于 然而 这个 URL 方案在 iOS 11 GM 版本中不再有效 它仅启动 设置 应用程序

随机推荐