云套件通知

7
我可能漏掉了一些显而易见的东西。
如何创建一个包含CKRecord详细信息的CloudKit通知呢?(即不仅是通用的“新项目已创建!”的通知,而是像“Jill和Jessica的生日派对!”这样带有记录标题的通知)。
正确的做法是为每个新记录更改创建一个新的subscription和notification.alertBody吗?那没有任何意义。
那么就只能使用queryNotification.recordID的选项从CloudKit(或我的本地存储)中提取数据,并将其添加到通知中了?如何添加或更改已经通知过的通知的值呢?我错过了什么吗?
更新:根据Edwin的建议,这里提供一段代码片段,但它无效。
let notification = CKNotificationInfo()
notification.alertBody = "Added: %@" as NSString
notification.alertLocalizationArgs = ["name"]
1个回答

12

只需填写CKNotificationInfo对象的.alertLocalizationArgs属性即可。

.alertLocalizationArgs的文档中提到:

使用此属性是可选的。该属性包含一个NSString对象数组,其中每个对象都对应于触发推送通知的记录的字段。这些名称用于从记录中检索相应的值。然后使用这些值替换警报正文或alertLocalizationKey字符串中的任何替换变量。这些值本身必须是NSString、NSNumber或NSDate对象。不要指定其他值的键。添加到推送通知时,长度大于100个字符的字符串值可能会被截断。

如果您使用%@作为替换变量,这些变量将按顺序依次替换数组中的项目。如果您使用% n$@形式的变量,其中n是整数,n表示要使用的数组项的索引(从1开始)。因此,数组中的第一项替换变量% 1 $@,第二项替换变量% 2 $@,以此类推。您可以使用索引替换变量来更改结果字符串中项目的顺序,这在本地化应用程序消息时可能是必要的。

以下是我如何使用它的两个示例:

            notificationInfo.alertBody = "%1$@ : %2$@"
            notificationInfo.alertLocalizationArgs = ["FromName", "Text"]

第二个样本:

            notificationInfo.alertLocalizationKey = "News: %1$@"
            notificationInfo.alertLocalizationArgs = ["Subject"]

在Localizable.strings文件中,如果你有一个"News: %1$@"作为键

更新:看起来现在需要使用.alertLocalizationKey。因此,第一个示例不再起作用。


如果您想查看完整的代码及其功能,请访问以下链接:https://github.com/evermeer/EVCloudKitDao - Edwin Vermeer
如果您在特定的“CKNotificationInfo”中使用“CKSubscription”,并且在*生产环境**中更改了“CKNotificationInfo”属性,则必须创建新容器。 - János
仅仅移除订阅不就足够了吗? - Edwin Vermeer
能否发送动态本地化字符串?例如,如果我想用英语和法语发送通知“备份数据”,是否有方法来实现?谢谢! - hyouuu
是的,请查看答案中的第二个示例。这些翻译必须压缩在您应用程序的.strings文件中。 - Edwin Vermeer
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接