为云套件远程推送通知定义订阅 ID

Defining Subscription IDs for cloud kit remote push notifications

我有大约 12 个 CKRecord 实体,假设我将信息存储在 public 和私有数据库中,并且还从私有数据库共享,我必须为每个 CKRecord 定义至少 3 个订阅 ID,这意味着 36 个订阅身份证。我可以在单独的控制器中执行此操作,并且在每个控制器中我可以处理从 AppDelegate 收到的远程推送通知。

在另一种方法中,我可以为每种类型的数据库定义 3 个订阅,当推送通知到达时,对于每个区域,查看每条记录并基于每种记录类型处理订阅。所有这些代码都需要在 AppDelegate 中定义吗?

哪种方法更好,各自的优缺点是什么。在我花很多时间选择一种方法然后因为不正确而不得不回溯之前,我想知道吗?还是我需要两种方法来满足不同的目的

我通常使用您提到的第二种方法。我使用 CloudKit subscription ID 来确定我应该从 AppDelegate 调用哪个方法,然后在其他地方使用适当处理通知的代码。

像这样:

//MARK: Background & Push Notifications
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

  let dict = userInfo as! [String: NSObject]

  if let notification = CKNotification(fromRemoteNotificationDictionary: dict), let subscriptionID = notification.subscriptionID{
    print("iOS Notification: \(subscriptionID)")
    switch subscriptionID{
      case "a":
        processNotificationA(notification: notification)
      case "b":
        processNotificationB(notification: notification)
      default:
        processAnyNotification(notification: notification)
    }
  }
}

希望对您有所帮助。