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


iOS实现远程推送的多语言显示,通常有两种方法:

  1. 在服务器端实现多语言推送。这种方法需要App在上传device token到后台服务器的时候,将App使用的语言也同步上传;
  2. 在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"。
iOS APNs 实现多语言及自定义事件_第1张图片

"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,Dev)