2017-10-28 110 views
1

在我的应用程序中,我有一个公共的CloudKit数据库。我将它用于远程订阅。如何在远程通知的alertBody中显示CKRecord中的数据?

我在一个CloudKit仪表盘创建一个GlobalNotification记录,创造了一个类型Stringcontent场此记录在我的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 
      } 
     }) 
    } 

之后,我创建新GlobalNotification记录在cloudKit仪表盘,并添加在content领域的一些“CloudKit内容文本”在一个CloudKit仪表板这个纪录。 当通知在我的设备上触发时,我在alertBody中看到“某些文本”文本,但我希望看到“CloudKit内容文本”。

我想这个通知显示来自GlobalNotification记录的content领域采取的字符串。我应该如何改变我的代码来实现这一目标?

我读过有关desiredKeys并尝试添加info.desiredKeys = [“内容”],但它并没有帮助。我也google了,但还没有找到解决方案。

回答

1

你不能这样做,只使用警报体。

有你需要的设置,使这项工作三个部分组成。您需要定义包含可更换参数的消息的字符串。然后你必须告诉你的通知使用该字符串。最后,你告诉你的通知将哪个记录字段替换为字符串。

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

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

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

这款苹果页给出了如何使用可替换的参数构造字符串的例子:https://developer.apple.com/documentation/cloudkit/cknotificationinfo/1515182-alertlocalizationargs

这个问题也给出了一些示例代码:(样品1不起作用任何更多的后续样品2)CloudKit notifications

相关问题