【问题标题】:CloudKit notificationsCloudKit 通知
【发布时间】:2014-12-09 04:45:24
【问题描述】:

我可能在这里遗漏了一些明显的东西。

如何创建一个 CloudKit 通知,其中包含您收到通知的 CKRecord 的详细信息? (即不仅仅是一个通用的“创建新项目!”,而是一个带有记录标题的通知,例如,“吉尔和杰西卡的生日派对!”)

为每个新记录更改创建一个带有新通知的新订阅的正确方法。alertBody?这没有任何意义。

留下选项 queryNotification.recordID 将数据从 CloudKit(或我的本地存储)中提取出来并以某种方式将其添加到通知中?添加或更改已通知通知的值的方法是什么?我错过了什么?

更新:根据 Edwin 的建议,这里有一个代码 sn-p,但它不起作用。

let notification = CKNotificationInfo()
notification.alertBody = "Added: %@" as NSString
notification.alertLocalizationArgs = ["name"]

【问题讨论】:

    标签: ios apple-push-notifications cloudkit


    【解决方案1】:

    只需填写CKNotificationInfo对象的.alertLocalizationArgs

    .alertLocalizationArgs 的文档说:

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

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

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

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

    第二个样本:

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

    您在 Localizable.strings 文件中将“新闻:%1$@”作为键的位置

    更新:您现在似乎需要使用 .alertLocalizationKey。所以第一个样本不再起作用。

    【讨论】:

    • 好的。我已经尝试过了,但似乎无法让它发挥作用。除了 %@ 在我应该用于 swift 代码的字符串中是否有不同的 id?我的通知只是重复了字符串“已添加:%@”,并没有替换为我的记录数据。
    • 如果您想查看完整的代码在哪里运行,请查看:github.com/evermeer/EVCloudKitDao
    • 确保在使用不同设置创建新订阅之前先删除旧订阅
    • 是的,这似乎是问题所在。我删除了所有订阅,现在正在工作。谢谢!
    • 您的第一个示例仅包含 alertBody 对我不起作用。但是,当我添加可本地化文件并使用警报本地化键时,它就起作用了。
    猜你喜欢
    • 2022-10-22
    • 2016-02-29
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-06
    • 2021-11-10
    相关资源
    最近更新 更多