无法获取CloudKit推送通知

时间:2019-03-08 18:49:44

标签: ios cloudkit

我有来自CloudKit的推送通知,但恐怕我已经做了一些事情来打破它们。如果有人看到我看不到的东西,请帮忙。

应用启动时,我呼叫setupSubscriptions(),其代码如下:

let predicate = NSPredicate(value: true)
let subscriptionID = "public-new-changes-deleted"
let subscription = CKQuerySubscription(recordType: recordType, predicate: predicate, subscriptionID: subscriptionID, options: [.firesOnRecordCreation, .firesOnRecordUpdate, .firesOnRecordDeletion])
let notificationInfo = CKSubscription.NotificationInfo()
notificationInfo.shouldSendContentAvailable = true
subscription.notificationInfo = notificationInfo

publicDB.save(subscription) { subscription, error in
if error != nil {
    print("subscription was set up")
}

设置消息确实触发。我也尝试过制作notificationInfo CKQuerySubscription.NotificationInfo,但无论是{{1}还是CKSubscription都没有明显的区别。

在我的应用程序委托中:

application.registerForRemoteNotifications()

愿意application(_ application:, didRegisterForRemoteNotificationsWithDeviceToken:)得到一条消息,表明该应用程序已注册了通知。

那我有:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        print("application did receive remote notification")
}

接下来,我进入CloudKit仪表板并创建,修改或删除记录,但是什么也没有发生。我希望收到didReceiveRemoteNotification的消息。但是什么都没有。这项工作较早,但我想不出要更改的内容。

我可以在那里创建记录并在应用程序中查询它们,因此我确定它可以看到它们,但是当它们被更改时我无法推动。

其他内容:

在目标的“功能”标签中:

  • 在后台模式下都检查了“后台获取”和“远程通知”。
  • iCloud已打开并且正在使用正确的容器-我可以使用相同的recordType和publicDB CKDatabase对象从CloudKit进行提取。
  • 推式通知已打开,我的权利文件中有一个值为“ development”的“ APS Environment”标志。

在我的Apple Developer帐户页面上的“应用程序ID”下,“ iCloud”和“推送通知”的“开发”和“发行版”都亮绿灯。

我可以在CloudKit仪表板中看到,一旦运行应用程序,订阅类型就会创建。

我正在设备上而不是模拟器上进行测试。

我尝试过:

  • 更改是否在注册通知之前或之后创建订阅。
  • 添加消息正文,警报声音和shouldBadge,并使用UNUserNotificationCenter请求通知,并使App Delegate成为UNUserNotificationCenterDelegate。初次运行该应用程序时出现提示,但通知没有到达。
  • 将订阅分为.firesOnRecordCreation的一个订阅和一个用于更新和删除的订阅。
  • 使用CKModifySubscriptionsOperation而不是数据库的save方法添加订阅。

如果您有任何想法请告诉我。谢谢。

0 个答案:

没有答案