您的位置:首页 > 移动开发 > IOS开发

iOS APNs 实现多语言及自定义事件

2017-03-09 14:10 232 查看
iOS实现远程推送的多语言显示,通常有两种方法:

在服务器端实现多语言推送。这种方法需要App在上传device token到后台服务器的时候,将App使用的语言也同步上传;
在App端实现多语言显示。

在这里主要介绍下第2种实现方法。

我们先来看下,APNs的payload定义的格式:(注意,payload的最大长度是256bytes,超出长度的推送消息会失败)

比较常用的一种payload的格式:
{
"aps" : {
"alert" : "我是被推送的消息",
"badge" : 1,
"sound" : "default"
}
}


这是最简单的一种格式,App直接显示alert中的字符串。这种方法适用于服务器端实现多语言(如果需要的话)。

定义loc-的payload格式:

"alert"的对象可以是简单的字符串,也可以是一个JSON对象。如果定义为一个JSON对象,则可以通过以下定义来在App端实现多语言显示:
(1) loc-key: 在App端的Localizable.strings文件中定义好的多语言字段;
(2) loc-args: 在App端的多语言字段中需要带的参数;
(3) action-loc-key: 同样在App端的Localizable.string文件中定义好的多语言字段,用来替代在锁屏页面View按钮
(4) body: 推送中显示的字段;(经测试,如果定义了loc-key,那么这个字段似乎没用)
(5) launch-image: 应用在 bundle 里的一个图片文件的名称,一般来说我们不指定这一属性;
{
"aps" : {
"alert" : {
"body" : "我是推送的消息",
"action-loc-key" : "Play_MSG",
"loc-key":"Borrow_MSG",
"loc-args":["XYZ"]
},
"badge" : 1,
"sound" : "default"
}
}
"action-loc-key"字段不是必须的,是否定义的样式区别如下:“slide to view”中的"view"就是定义的多语言字段 "Play_MSG"。



"loc-args"字段也不是必须的,如果"loc-key"的多语言字段中不需要参数,则该字段可以省略。例如:"loc-key"中"Borrow_MSG"定义的多语言字段为 "%@ wants to borrow %@'s money"。那么"loc-args"的值就应该是 ["LiLei", "HanMeimei"]。最终App端显示的推送消息就是 “LiLei wants to borrow HanMeimei's money”。

自定义key-value的payload格式:
{
"aps" : {
"alert" : {
"body" : "",
"action-loc-key" : "",
"loc-key":"",
"loc-args":[]
},
"badge" : 1,
"sound" : "default"
},
"key1":"value1",
"key2":["value21", "value22"]
}
让App更加灵活地根据不同类型的推送消息来处理不同的事件。value值可以为字符串,也可以为JSON对象。

附:在本地测试推送服务器:
PushMeBaby
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios apns 多语言