简单记录腾讯信鸽推送开发日志
iOS 推送工作原理
APNs
Apple Push Notification Service
,直译过来就是“苹果推送通知服务”,即苹果专门的推送服务器。
由于 Apple 对设备的控制非常严格,iOS 内应用消息的推送必须要经过 APNs。
被推送消息的转发顺序
应用服务器(Provider)=> APNs => iPhone/iOS => App。
工作原理说明
苹果利用自己专门的
推送服务器(APNs)
接收来自我们自己的应用服务器的需要被推送的信息,然后推送到指定的iOS设备
上,然后由设备通知到我们的应用程序,设备以通知或者声音的形式通知用户有新的消息。推送的前提是装有我们应用的设备需要向APNs服务器注册,注册成功后APNs服务器会返给我们一个device_token,拿到这个token后我们将这个token发给我们自己的应用服务器,当有需要被推送的消息时,我们的应用服务器会将消息按指定的格式打包,然后结合设备的device_token一并发给APNs服务器,由于我们的应用和APNs维持一个基于TCP的长连接,APNs将新消息推送到我们设备上,然后在屏幕上显示出新消息来。
推送数据格式
JSON
,且 APNs 限制了每个 notification
的 payload
最大长度是 256 字节。举例:
1 | { |
alert
的内容就是会显示在用户手机上的推送信息,它的值可以是一个String
,也可以是一个JSON
。当它是文本消息的时候,系统就会把这些文字显示到一个alertView
中;如果它也是由一个JSON
组成的话,其包含的字段如下:- body
- action-loc-key
- loc-key
- loc-args
- launch-image
body 部分就是
alertView
中将要展现出来的文本消息,loc-* 属性主要是用来实现本地化消息,launch-image
只是app 主 bundle 里的一个图片文件的名称,一般来说我们不指定这一属性。badge
是会在应用 icon 右上角显示的数量(注意是整型),提示有多少条未读消息等。sound
就是当推送信息送达是手机播放的声音,传defalut
就标明使用系统默认声音,如果传比如beep.wav
就会播放在我们应用工程目录下名称为 beep.wav 的音频文件。aps
之外的可以自定义数据结构。
本地化
有两种办法可以实现推送消息的本地化:
1,在推送的payload中使用loc-key
和loc-args
来指定进行本地化,这样Provider方只需要按照统一的格式来发送即可,消息的解析和组装则由客户端来完成。
2,如果推送的payload里面不包含loc-key/loc-args
信息,那么Provider方就需要自己做本地化处理,然后给不同的device发送不同的消息,为了做到这一点,还需要app在上传device token的时候也把用户的语言设置信息传回来。
腾讯信鸽接入
客户端配置
这个主要是 iOS 去完成的,这里略过,详见:iOS接入-腾讯信鸽。
服务端配置
服务端接入及调用腾讯信鸽非常简单,可以通过提供的服务端 SDK,也可以直接使用提供的 RESTful API
。下面以在 Lumen
中集成腾讯信鸽的 PHP SDK
为例说明。
- 引入类文件
腾讯信鸽的 PHP SDK
主要只有一个类文件 XingeApp.php
。把它放在 app/Tools/XingeApp.php
下,命名空间为设置为:namespace App\Tools
。
- 配置
access_id
和secret_key
相应的配置文件放在 config/txxg.php
中,内容只有以下两个:
1 |
|
access_id
和 secret_key
在注册了腾讯信鸽后会提供,填在这里就行了。
- 在工具类中调用 SDK 中的方法
1 | namespace App\Tools; |
之后在控制器中如果要给 App
发送推送消息,则只需要执行 Tol::iosPush()
就可以了。(注意引入该工具类先)