如何在远程通知的alertBody中显示来自CKRecord的数据?

时间:2017-10-28 16:29:28

标签: ios swift notifications cloudkit ckrecord

在我的应用中,我有一个公共CloudKit数据库。我将它用于远程订阅。

我已在CloudKit仪表板中创建了GlobalNotification记录,为此记录创建了类型content的{​​{1}}字段,并在我的AppDelegate中实现了以下方法以使通知正常工作:

String

之后,我在cloudKit仪表板中创建了一条新的 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内容文本"在CloudKit仪表板中此记录的GlobalNotification字段中。 当我的设备上发出通知时,我会看到"有些文字"其中的文字是alertBody,但我想看看" CloudKit内容文字"。

我希望此通知显示从GlobalNotification记录的content字段中获取的字符串。我该如何更改代码才能实现此目的?

我已经阅读了有关所需的内容并试图添加info.desiredKeys = ["内容"]但它没有帮助。我也用Google搜索,但还没有找到解决方案。

1 个答案:

答案 0 :(得分:3)

您不能仅使用警报正文来执行此操作。

您需要设置三个组件才能实现此功能。您需要使用包含可替换参数的消息定义字符串。然后你必须告诉你的通知使用该字符串。最后,您告诉您的通知将哪个记录字段替换为字符串。

首先,您需要在localizable.strings文件中添加一个键/字符串对。在字符串中,您可以使用%n $ @指定要替换参数的位置,其中" n"每个附加参数的增量。

其次,在您的通知中,您需要将.alertLocalizationKey设置为您在上面的字符串文件中指定的键名。

第三,在通知中,将.alertLocalizaionArgs属性设置为记录中的字段名称数组。

此Apple页面提供了如何使用可替换参数构造字符串的示例:https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1515182-alertlocalizationargs

这个问题还显示了一些示例代码:(样本1不再起作用。关注样本2)CloudKit notifications