如何在远程通知的 alertBody 中显示来自 CKRecord 的数据?
How to show data from a CKRecord in alertBody of a Remote Notification?
在我的应用程序中,我有一个 public CloudKit 数据库。我将它用于远程订阅。
我在 CloudKit 仪表板中创建了一个 GlobalNotification 记录,为此记录创建了 content
类型 String
的字段,并在我的 AppDelegate 中实现了以下方法来发出通知工作:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let subscription = CKQuerySubscription(recordType: "GlobalNotification", predicate: NSPredicate(format: "TRUEPREDICATE"), options: .firesOnRecordCreation)
let info = CKNotificationInfo()
info.alertBody = "Some Text" // here i want to show content String data of a CKRecord which fired a notification
info.shouldBadge = true
info.soundName = "default"
subscription.notificationInfo = info
CKContainer.default().publicCloudDatabase.save(subscription, completionHandler: { subscription, error in
if error == nil {
// Subscription saved successfully
} else {
// An error occurred
}
})
}
之后,我在 cloudKit 仪表板中创建了一条新的 GlobalNotification
记录,并在 CloudKit 中为此记录的 content
字段中添加了一些 "CloudKit content Text" =] 仪表板。
当通知在我的设备上触发时,我在它的 alertBody 中看到 "Some text" 文本,但我想看到 "CloudKit content Text".
我希望此通知显示从 GlobalNotification 记录的 content
字段中获取的字符串。我应该如何更改我的代码以实现此目的?
我读过 desiredKeys 并尝试添加 info.desiredKeys = ["content"] 但它没有帮助。我也搜索过,但没有找到解决方案。
您不能只使用警报正文来做到这一点。
要完成这项工作,您需要设置三个组件。您需要使用包含可替换参数的消息定义一个字符串。然后你必须告诉你的通知使用那个字符串。最后,您告诉您的通知将哪些记录字段替换为字符串。
首先,您需要在 localizable.strings 文件中添加一对 key/string。在字符串中,您可以使用 %n$@ 指定要替换参数的位置,其中每个附加参数的 "n" 递增。
其次,在您的通知中,您需要将 .alertLocalizationKey 设置为您在上面的字符串文件中指定的键名。
第三,在您的通知中,将 .alertLocalizaionArgs 属性 设置为您记录中的字段名称数组。
此 Apple 页面提供了如何使用可替换参数构造字符串的示例:https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1515182-alertlocalizationargs
这个问题还显示了一些示例代码:(示例 1 不再有效。按照示例 2)CloudKit notifications
在我的应用程序中,我有一个 public CloudKit 数据库。我将它用于远程订阅。
我在 CloudKit 仪表板中创建了一个 GlobalNotification 记录,为此记录创建了 content
类型 String
的字段,并在我的 AppDelegate 中实现了以下方法来发出通知工作:
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let subscription = CKQuerySubscription(recordType: "GlobalNotification", predicate: NSPredicate(format: "TRUEPREDICATE"), options: .firesOnRecordCreation)
let info = CKNotificationInfo()
info.alertBody = "Some Text" // here i want to show content String data of a CKRecord which fired a notification
info.shouldBadge = true
info.soundName = "default"
subscription.notificationInfo = info
CKContainer.default().publicCloudDatabase.save(subscription, completionHandler: { subscription, error in
if error == nil {
// Subscription saved successfully
} else {
// An error occurred
}
})
}
之后,我在 cloudKit 仪表板中创建了一条新的 GlobalNotification
记录,并在 CloudKit 中为此记录的 content
字段中添加了一些 "CloudKit content Text" =] 仪表板。
当通知在我的设备上触发时,我在它的 alertBody 中看到 "Some text" 文本,但我想看到 "CloudKit content Text".
我希望此通知显示从 GlobalNotification 记录的 content
字段中获取的字符串。我应该如何更改我的代码以实现此目的?
我读过 desiredKeys 并尝试添加 info.desiredKeys = ["content"] 但它没有帮助。我也搜索过,但没有找到解决方案。
您不能只使用警报正文来做到这一点。
要完成这项工作,您需要设置三个组件。您需要使用包含可替换参数的消息定义一个字符串。然后你必须告诉你的通知使用那个字符串。最后,您告诉您的通知将哪些记录字段替换为字符串。
首先,您需要在 localizable.strings 文件中添加一对 key/string。在字符串中,您可以使用 %n$@ 指定要替换参数的位置,其中每个附加参数的 "n" 递增。
其次,在您的通知中,您需要将 .alertLocalizationKey 设置为您在上面的字符串文件中指定的键名。
第三,在您的通知中,将 .alertLocalizaionArgs 属性 设置为您记录中的字段名称数组。
此 Apple 页面提供了如何使用可替换参数构造字符串的示例:https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1515182-alertlocalizationargs
这个问题还显示了一些示例代码:(示例 1 不再有效。按照示例 2)CloudKit notifications