这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
toaster:user-menu-of-pns [2015/03/18 15:15] cobub 创建 |
toaster:user-menu-of-pns [2017/07/14 11:18] (当前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
- | dd | + | ~~Title:Cobub Toaster 推送服务器手册 - 开源移动应用运营平台 - 移动统计、移动推送解决方案 - Cobub 移动开发者中心~~ |
+ | {{description>本文档介绍了推送服务器的Web接口的使用方法。}} | ||
+ | {{keywords>Cobub Toaster,开源移动应用分析,移动分析,移动应用分析,推送服务器手册}} | ||
+ | ====== 推送服务器手册 ====== | ||
+ | |||
+ | |||
+ | 本文档介绍了推送服务器的Web接口的使用方法。 | ||
+ | |||
+ | 首先区分一下user channel和tag channel的概念: | ||
+ | |||
+ | user channel是以客户端唯一的uid作为channel的名称,客户端连接上来自动sub(sub表示加入channel) | ||
+ | tag channel 是客户端主动通过sub命令加入的通道,比如客户端sub “location:beijing”,那么它就加入了”location:beijing”的通道,对”location:beijing”下发消息, 该客户端就会收到消息, 可以把tag channel想象成标签推送 | ||
+ | ===== Web接口的调用方法 ===== | ||
+ | |||
+ | 开发者需要对Web接口以POST方法传递数据,Web接口将以JSON格式返回接口调用结果。 | ||
+ | |||
+ | 假如在服务器配置文件中配置了 | ||
+ | <code> | ||
+ | [web] | ||
+ | bind localhost:8080</code> | ||
+ | 那么可使用如下的Linux命令调用接口或编程调用: | ||
+ | <code> | ||
+ | curl –X POST –d POST_DATA http://localhost:8080/METHOD_NAME</code> | ||
+ | 其中 | ||
+ | |||
+ | POST_DATA 为POST的数据 | ||
+ | METHOD_NAME 为需要调用的方法名 | ||
+ | ===== 针对单一用户或者多个用户的推送(pub) ===== | ||
+ | METHOD_NAME: **pub** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "expired": "1403521931", | ||
+ | "appid": "XXX", | ||
+ | "channel": "xxx@qq.com", | ||
+ | "channel": "xxx@gmail.com", | ||
+ | "data": "hello world" | ||
+ | </code> | ||
+ | * **expired**: 为unix时间戳,最长为30天(在上面配置文件中设置),超出这个时间将不再下发此消息的离线消息,且无法继续通过web service查询到此消息的相关信息。值得注意的是, 如果提供了大于0的expired,那么默认是会保存离线消息的,没有收到消息的客户端在下次登录时会收到此离线消息,但是如果设置expired为0,表示此消息是即时消息,不需要保存离线消息,所以即时客户端没有收到消息,那么也是不会有离线消息产生的。 | ||
+ | * **channel**: 表示要下发的通道名称,可以提供多个channel。在这个方法里,channel的值对应SDK端提供的UID。 | ||
+ | * **data**: 要下发的数据,这个可以使任何格式的数据,甚至二进制数据也是支持的。一般情况下,可以使用JSON格式的文本赋值给data。下面列出了关于data格式的说明。 | ||
+ | * **appid**: 要推送的appid,appid只能提供一个。 | ||
+ | ===== 通知栏消息预置模板 ===== | ||
+ | |||
+ | |||
+ | 如使用SDK中预置的通知栏消息展现模板,则对于POST数据中 data 字段的格式要求,参照如下JSON串: | ||
+ | <code> | ||
+ | { | ||
+ | "type":"notification", //通知栏类型 | ||
+ | "style":"1", //通知栏样式编号 | ||
+ | "config":{ | ||
+ | "icondata":"XXXXXXX", //icon文件的BASE64编码 | ||
+ | "vibrate":"1", //是否震动:1 震动,0 不震动 | ||
+ | "sound":"1", //是否发出提示音:1有声音,0没声音 | ||
+ | "title":"XXXXXX", //通知栏标题 | ||
+ | "ticker":"XXXXXXX", //状态栏滚动信息 | ||
+ | "body":"XXXXXXX", //消息内容 | ||
+ | "clickconfig":{ //定义了用户点击后的行为,请见如下的例子 | ||
+ | "operation":"launchActivity", | ||
+ | "package":"com.wbkit.icclient", | ||
+ | "targetActivity":"com.wbkit.icclient.MainActivity" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | **clickconfig的例子一:打开应用(Activity)** | ||
+ | |||
+ | <code>{ | ||
+ | “operation”:“launchActivity”, //操作类型:打开Activity | ||
+ | “package” : “com.example.demo” //APK包名 | ||
+ | “targetActivity”: “com.example.demo.MainActivity”//Activity | ||
+ | }</code> | ||
+ | |||
+ | **clickconfig的例子二:下载APK并安装** | ||
+ | <code> | ||
+ | { | ||
+ | “operation”:“download”, //操作类型:下载APK) | ||
+ | “appname”: “捕鱼达人” //APP 名字 | ||
+ | “dlurl”: “http://xxxxxx.apk” //APK的url | ||
+ | //PS:下载后自动弹出安装 | ||
+ | }</code> | ||
+ | |||
+ | **clickconfig的例子三:打开页面** | ||
+ | <code> | ||
+ | { | ||
+ | “operation”:“loadWebpage”, //操作类型:打开页面 | ||
+ | //PS: url和page二选一,如果都填了优先url | ||
+ | “url”: “http://www.baidu.com”, //url | ||
+ | “page”: “.....” //页面内容 | ||
+ | } | ||
+ | </code> | ||
+ | ===== 透传消息预置模板 ===== | ||
+ | 需要使用如下的格式确定data内容 | ||
+ | <code> | ||
+ | { | ||
+ | “type”:“transparent”, //透传类型 | ||
+ | “config”:“{ | ||
+ | “content”:“XXXXXXX”,//透传消息内容 | ||
+ | } ” | ||
+ | }</code> | ||
+ | 返回格式 | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200", | ||
+ | "pushedCount": 100, | ||
+ | "offCount": 1, | ||
+ | "elapsed": 0.52, | ||
+ | "mid": "489c4464de66000" | ||
+ | } | ||
+ | </code> | ||
+ | * status: 200表示成功, 400 表示请求封包格式错误. | ||
+ | * pushedCount: 已经下发的消息数量,这个数值并不代表接收到消息的用户数量,仅仅表示推送服务器已经对100个连接下发了数据,只有当终端SDK提交了回执,服务器才会认为该用户收到了消息。 | ||
+ | * offCount: 表示提交的user channel中,当前不在线的数量。 | ||
+ | * elapsed: 这次推送在服务器端下发所消耗的时间,以毫秒为单位,是一个float型的数字。 | ||
+ | * mid: 这次推送消息的唯一任务ID,以后可以通过此mid查询到相应消息的信息,如客户接收到的数量,客户阅读的数量,消息内容等。 | ||
+ | ===== 针对指定的一个或多个TAG对应的用户进行推送(tagpub) ===== | ||
+ | **tagpub**是专门针对tag channel下发的命令,也支持离线消息,但是离线消息会消耗多一些资源。如果只需要实时下发,请把expired设置为0。 | ||
+ | METHOD_NAME: **tagpub** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "channel": "localtion:beijing", | ||
+ | "channel": "location:guangzhou", | ||
+ | "data": "hello world", | ||
+ | "appid": "XXX", | ||
+ | "expired": "1403521931" | ||
+ | </code> | ||
+ | * channel: tag channel的名称, 可以提供多个 | ||
+ | * data: 需要下发的数据 | ||
+ | * appid: appid与tag channel相关联, 只能提供app下的tag channel | ||
+ | * expired: 同pub方法 | ||
+ | 返回格式: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200", | ||
+ | "pushedCount": 100, | ||
+ | "elapsed": 0.52, | ||
+ | "mid": "489c4465de66000" | ||
+ | } | ||
+ | </code> | ||
+ | 各项意义同pub方法 | ||
+ | ===== 针对某个APP的所有用户进行推送(allpub) ===== | ||
+ | 此方法将向appid下的所有在线用户或者全部用户下发,区别只下发在线用户或全部用户是通过expired来区分的,如果expired为0,那么就只对在线的用户下发,不保存离线消息。 | ||
+ | |||
+ | METHOD_NAME: **allpub** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "appid": "XXX", | ||
+ | "data": "hello world", | ||
+ | "expired": "1403521931"<code> | ||
+ | </code> | ||
+ | 返回格式: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200", | ||
+ | "pushedCount": 100, | ||
+ | "elapsed": 0.52, | ||
+ | "mid": "489c4466de66000" | ||
+ | } | ||
+ | </code> | ||
+ | status说明: | ||
+ | |||
+ | * 200 成功 | ||
+ | * 400 请求封包有错误 | ||
+ | * 500 服务器内部错误(通常跟redis有关) | ||
+ | ===== 将用户的uid加入标签组(sub-tag) ===== | ||
+ | 提供了一个接口可以把某一些用户的uid加入到某一tag channel下,此操作是幂等的。 | ||
+ | METHOD_NAME:**sub-tag** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "appid": "XXX", | ||
+ | "tag": "localtion:beijing", | ||
+ | "uid": "xxx@qq.com", | ||
+ | "uid": "xxxx@gmail.com" </code> | ||
+ | 参数说明: | ||
+ | |||
+ | * appid: 与标签相关联的appid,只能有一个此参数 | ||
+ | * tag: 要加入的标签组的TAG,也只能有一个此参数 | ||
+ | * uid: 要加入标签的用户uid,可以是多个 | ||
+ | |||
+ | 返回结果: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200" | ||
+ | } | ||
+ | </code> | ||
+ | status说明 | ||
+ | |||
+ | * 200 成功 | ||
+ | * 400 请求封包有错误 | ||
+ | * 500 服务器内部错误(通常跟redis有关) | ||
+ | ===== 将一些用户从标签组中移除(unsub-tag) ===== | ||
+ | METHOD_NAME: u**nsub-tag** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "appid": "XXX", | ||
+ | "tag": "localtion:beijing", | ||
+ | "uid": "xxx@qq.com", | ||
+ | "uid": "xxxx@gmail.com", </code> | ||
+ | 参数说明 | ||
+ | |||
+ | * appid: 与标签相关联的appid,只能有一个此参数 | ||
+ | * tag: 要去除的标签组的TAG名称,只能有一个此参数 | ||
+ | * uid: 要移除标签的用户uid,可以提供多个 | ||
+ | 返回格式: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200" | ||
+ | }</code> | ||
+ | status说明 | ||
+ | |||
+ | * 200 成功 | ||
+ | * 400 请求封包有错误 | ||
+ | * 500 服务器内部错误(通常跟redis有关) | ||
+ | ===== 推送任务信息查询(message) ===== | ||
+ | METHOD_NAME: **message** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "mid": "489c4466de66000" </code> | ||
+ | 返回格式: | ||
+ | <code> | ||
+ | { | ||
+ | "status":"200" | ||
+ | "489c4466de66000": | ||
+ | { | ||
+ | "content":"hello world!", | ||
+ | "expire":"1404378620", | ||
+ | "readCount":"0", | ||
+ | "recvdCount":"0", | ||
+ | "startTime":"1403407632", | ||
+ | "totalCount":"2", | ||
+ | "appid": "XXX" | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | 返回说明: | ||
+ | |||
+ | * status: 接口查询的结果,200为正确执行 | ||
+ | * content: 消息的内容 | ||
+ | * expire: 消息过期的时间戳 | ||
+ | * readCount: 此消息被客户端点击(阅读)的数量 | ||
+ | * recvCount: 此消息被客户端接收到的数量 | ||
+ | * startTime: 此消息下发的时间 | ||
+ | * totalCount: 总下发量 | ||
+ | * 489c4466de66000: 查询的mid | ||
+ | * appid: appid | ||
+ | ===== user channel 查询(userchannel) ===== | ||
+ | METHOD_NAME: **userchannel** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "channel": "xxx@qq.com", | ||
+ | "channel": "xxxx@gmail.com" </code> | ||
+ | 返回: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200", | ||
+ | "xxx@qq.com": 1, //此uid在线 | ||
+ | "xxxx@gmail.com": 0 //此uid不在线 | ||
+ | } | ||
+ | </code> | ||
+ | ===== tag channel 查询(tagchannel) ===== | ||
+ | |||
+ | |||
+ | METHOD_NAME: **tagchannel** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "channel": "location:Beijing", | ||
+ | "channel": "location:Guangzhou"</code> | ||
+ | 返回: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200", | ||
+ | "location:Beijing": 456, //当前在"location:Beijing"这个标签TAG下有456人,包括在线及不在线用户 | ||
+ | "location:Guangzhou": 23 //当前在"location:Beijing"这个标签TAG下有23人,包括在线及不在线用户 | ||
+ | }</code> | ||
+ | ===== APP 信息查询(app-size) ===== | ||
+ | |||
+ | |||
+ | METHOD_NAME: **app-size** | ||
+ | POST_DATA: | ||
+ | <code> | ||
+ | "online": 1, | ||
+ | "appid": "xxx", | ||
+ | "appid": "yyy" </code> | ||
+ | * online: 为1表示查询在线的user数量,如果为0表示查询总数量,包括离线 | ||
+ | * appid: 可以提供多个appid进行查询 | ||
+ | 返回格式: | ||
+ | <code> | ||
+ | { | ||
+ | "status": "200", | ||
+ | "xxx": 1234, //appid为xxx的app目前在线(或总数)用户数为1234人 | ||
+ | "yyy": 567 //appid为yyy的app目前在线(或总数)用户数为567人 | ||
+ | }</code> | ||
+ | 其中返回的数字表示数量,具体含义依赖于调用时online方法的值。 | ||
+ | |