【问题标题】:Is the following structure with body and loc-args in the same notification payload valid?以下在同一通知有效负载中具有正文和 loc-args 的结构是否有效?
【发布时间】:2013-03-18 21:11:41
【问题描述】:

如果您在同一个有效负载中包含正文和 loc-args 和 loc-key,以下有效负载通知会导致任何问题吗?

{"aps":{"alert":{"body" : "Bob wants to play poker", "loc-key":"general","loc-args":["Test DEFAULT."]},"badge":1,"sound":"default"}}

我这样设置的原因。是不是我不确定在应用程序期间是否会处理仅包含正文的通知,因此它将使用本地化的 loc-args 和可本地化字符串中的以下键值:

"general"="%@";

【问题讨论】:

    标签: ios push-notification apple-push-notifications


    【解决方案1】:

    我做了几个测试。

    例如发送

    {
        "aps": {
            "alert": {
                "body": "hello world!",
                "loc-args": ["andy", "my text"],
                "loc-key": "comment"
            }
        },
        "sound": "default",
        "extras": {}
    }
    

    在我的设备上,我的 loc 文件中有一个字符串,如下所示:

    "comment" = "%@ has comment %@";
    

    所以我收到的通知是:

    Andy has comment my text
    

    现在我发送了这样的新通知:

        {
            "aps": {
                "alert": {
                    "body": "hello world!",
                    "loc-args": ["andy", "my text"],
                    "loc-key": "does_not_exist"
                }
            },
            "sound": "default",
            "extras": {}
        }
    

    使用不存在的 loc-key,我收到的通知是

    does_not_exist
    

    正如 kadam 在他的回答中所说:

    最终,可以从文档中推断出 body 和 loc-key 应该 用于排他或关系。要么之一,要么另一个,但 不是两者兼而有之。

    块引用

    根据this post,如果缺少密钥,则使用密钥。这就是为什么“body”总是被忽略,它要么是一个,要么是另一个。

    【讨论】:

      【解决方案2】:

      有两个选项可以本地化嵌入在推送通知中的警报消息。一种是在服务器上进行本地化,并将本地化消息作为alert 键的字符串值发送。例如:

      {"alert": "A localized sentence."}

      (可选)如果您还想设置启动图像和/或让警报的查看按钮读取“查看”以外的内容,您可以将alert 的字符串值替换为字典。在这种情况下,字符串值应该是字典中body 的值。例如:

      {'alert': {'body: "A localized sentence.", action-loc-key: "...", launch-image: "..."' }}

      docs 警告说,如果字典中只有 body 键,请不要使用字典。而是将body 的值设置为alert 的字符串值。

      另一种选择是使用loc-keyloc-args 对并在设备上进行本地化。

      虽然我还没有验证如果bodyloc-key 都出现在alert 字典中,那么iOS 默认是哪一个,我猜它会选择一个而忽略另一个。有权访问有效推送通知开发设置的人可以验证是哪一个。

      最终,可以从docs 推断出bodyloc-key 应该用于排他或关系。一个或另一个,但不能两者兼而有之。

      【讨论】:

        【解决方案3】:

        我还不到 50 岁,所以我无法发表评论,只能跟进 @kadam 的回答,仅供将来访问此问题的人参考。

        虽然我还没有验证如果 body 和 loc-key 都出现在 alert 字典中,iOS 默认是哪一个,我猜它会选择一个而忽略另一个。有权访问有效推送通知开发设置的人可以验证是哪一个。

        我已经尝试过了,如果它在应用程序本身上有一个值,它默认为 loc-key 的值。如果没有,则使用 body 的值。

        【讨论】:

        • 您应该将此作为评论添加到@kadam 的答案中,而不是作为自己的答案发布。
        猜你喜欢
        • 1970-01-01
        • 2019-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-21
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        相关资源
        最近更新 更多