【发布时间】: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-example 和 stackoverflow.com/help/how-to-ask
-
@Magnas 好的,我已经添加了代码。现在您知道如何在模拟器上启用通知了吗?我不知道订阅代码如何提供帮助。我的代码没有问题。我在模拟器上遇到不触发通知的问题。
标签: ios swift notifications cloudkit cksubscription