用户工具

站点工具


差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

后一修订版
前一修订版
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方法的值。 ​    
 +  ​
toaster/user-menu-of-pns.1426662905.txt.gz · 最后更改: 2017/07/14 11:13 (外部编辑)