常见问题FAQ
我能推送长消息吗?
不能,APNs限制了每个notification的payload最大长度是256字节,超长的消息是不能发送的。
推送怎么加声音提醒
消息推送是可以指定声音的。譬如你可以对正面的反馈使用欢快的声音,对负面的反馈使用低沉一点的声音,都可以达到别出心裁让人眼前一亮的目的。
你需要先放一些aiff、wav或caf音频文件到app的资源文件中,然后在推送的时候指定不同的音频文件名就可以了。
推送的Badge是怎么回事
推送并不一定会导致应用图标上红色数字增加,是否显示这一数字,显示成多少,都取决于开发者自己。
在发送推送消息的时候,我们可以选择是否递增这一数字;如果不选择这一项,那么消息推送并不会导致应用图标上红色数字的出现。
其实我们只需要在任何时候设置 UIApplication.applicationIconBadgeNumber 属性为0,就可以让这个数字消失掉。
一般我们会选择在应用启动的时候(application:didFinishLaunchingWithOptions:方法中),或者干脆一点,在应用每次被切换到前台的时候(applicationWillEnterForeground:方法中),调用这一行代码,即可立刻清除掉Badge数字了。
AVOS Cloud平台发出去的通知格式究竟是什么样子的
对于每一条推送消息,都包含一个payload,通常是组成了一个JSON的Dictionary,这其中必不可少的是aps属性,它对应的value也是一个Dictionary,包含下面一些内容:
-
alert消息(文本或Dictionary)
-
应用图标上的红色数字
-
播放的声音文件名
在由推送激活的app打开事件中,application:didFinishLaunchingWithOptions:
的options参数就是这个大的Dictionary对象。
{ aps = { alert = "hello, everyone"; badge = 2; sound = default; }; }
这里要注意的时alert部分,它的值可以是一个String(文本消息),也可以是一个JSON的Dictionary。当它是文本消息的时候,系统就会把这些文字显示到一个alertview中;若它也是由一个JSON Dictionary组成的话,其格式如下:
- body
- action-loc-key
- loc-key
- loc-args
- launch-image
body部分就是alertView中将要展现出来的文本消息,loc-属性主要是用来实现本地化消息,launch-image只是app主bundle里的一个图片文件的名称,一般来说我们不指定这一属性。
如何显示本地化的消息
有两种办法可以实现推送消息的本地化:
1.在推送的payload中使用loc-key和loc-args来指定进行本地化,这样Provider方只需要按照统一的格式来发送即可,消息的解析和组装则由客户端来完成。
2.如果推送的payload里面不包含loc-key/loc-args信息,那么Provider方就需要自己做本地化处理,然后给不同的device发送不同的消息,为了做到这一点,还需要app在上传device token的时候也把用户的语言设置信息传回来。
目前,因为AVOS Cloud主要就是瞄准中国大陆市场和海外中文用户,所以我们在推送上还不提供多语言支持。应用该怎么响应推送消息
上面说的处理流程,只能简单展示一下远程消息,激活用户让他们重新回到app中来。但是有时候,我们希望带给用户更好的使用体验,譬如如果我们告诉用户:张三刚刚评论了你的照片。这时候用户如果点击action按钮进入app,我们是展示具体的评论页面为好,还是展示通常的启动页面然后让用户自己去找张三的评论好?我想负责任的开发者都会选择前者:)
要做到灵活响应不同类型的通知消息,我们需要在通知的payload中增加更多信息,而不能仅仅只有alert出来的文字信息。对于AVOS Cloud消息推送平台来讲,就需要开发者使用更高级功能的JSON格式。譬如我们发送这样的json字符串:
{"action":{"type":4},"alert":"hello, everyone”}
最终在app内会收到这样的UserInfo Dictionary:{ action = { type = 4; }; aps = { alert = "hello, everyone"; badge = 4; }; }