【问题标题】:iOS Simulator never receives notifications from CloudKit serveriOS 模拟器永远不会收到来自 CloudKit 服务器的通知
【发布时间】:2020-07-24 14:13:39
【问题描述】:

重要提示:问题不在于模拟通知,而在于从 CloudKit 服务器接收真实通知并获得工作同步。

模拟器上的通知永远不会触发,即使应用程序启动,我也无法很好地测试我的应用程序。具体来说,我已经订阅了 CKDatabaseSubscription。任何人都知道如何让模拟器上的通知获得工作同步?

我只在真实设备上接收通知并且有工作同步,它在那里完美运行。

func subscriptionToNotifications(for container: CKContainer) {
    if subscriptionIsLocallyCached { return }
    
    let application = UIApplication.shared
    let sharedDatabase = container.sharedCloudDatabase
    
    let subscription = CKDatabaseSubscription(subscriptionID: "shared-changes")
    subscription.recordType = "CD_List"
    
    let notificationInfo = CKSubscription.NotificationInfo()
    notificationInfo.shouldSendContentAvailable = true
    notificationInfo.shouldBadge = true
    notificationInfo.alertBody = "Task list was changed"
    notificationInfo.soundName = "default"
    
    subscription.notificationInfo = notificationInfo;
    
    /// Saving subscription to Shared Database
    container.sharedCloudDatabase.save(subscription) { (subscription, error) in
        if let error = error {
            print("Error saving subscription:\n", error.localizedDescription)
        } else if let subscription = subscription {
            print("Successfully saved Subscription:\n", subscription.debugDescription)
        }
    }
    
    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
        if let error = error {
            print("Error registering notifications authorization")
        } else if granted {
            print("Successfully authorized Notifications!")
        }
    }
    
    application.registerForRemoteNotifications()
    
    /// Creating operation which will notify when subscription will be saved
    let operation = CKModifySubscriptionsOperation(subscriptionsToSave: [subscription], subscriptionIDsToDelete: [])
    
    operation.modifySubscriptionsCompletionBlock = { [unowned self] subscriptions, subscriptionIDs, error in
        if let error = error {
            print("Error registering notifications authorization")
        } else {
            self.subscriptionIsLocallyCached = true
            print("Successfully modified subscriptions")
        }
    }
    
    operation.qualityOfService = .utility
    
    sharedDatabase.add(operation)
}

【问题讨论】:

  • 如果你不显示你的代码,人们不得不猜测。
  • 什么代码?这只是关于允许在模拟器上整体通知。它适用于真实设备,不适用于模拟器。请投票支持,这对我很重要。
  • 我没有投票,但请阅读这些 - StackOverflow 如果对代码问题有疑问:stackoverflow.com/help/minimal-reproducible-examplestackoverflow.com/help/how-to-ask
  • @Magnas 好的,我已经添加了代码。现在您知道如何在模拟器上启用通知了吗?我不知道订阅代码如何提供帮助。我的代码没有问题。我在模拟器上遇到不触发通知的问题。

标签: ios swift notifications cloudkit cksubscription


【解决方案1】:

CloudKit 通知在模拟器上大部分时间都不起作用,你应该在真机上测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 2022-01-15
    • 2016-10-21
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    相关资源
    最近更新 更多