1

如果您在同一个有效负载中包含正文和 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"="%@";
4

3 回答 3

6

我做了几个测试。

例如发送

{
    "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 应该用于排他或关系。要么是其中的一个,要么是另一个,但不是两者兼而有之。

块引用

根据这篇文章,如果密钥丢失,则使用密钥。这就是为什么“身体”总是被忽略,要么是一个,要么是另一个。

于 2016-01-09T16:30:51.603 回答
0

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

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

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

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

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

另一种选择是使用loc-key, loc-argspair 并在设备上进行本地化。

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

最终,人们可以从文档中推断出body并且loc-key应该在排他或关系中使用。要么是其中的一个,要么是另一个,但不是两者兼而有之。

于 2013-05-15T19:01:10.753 回答
0

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

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

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

于 2017-02-22T05:21:31.750 回答