這里會(huì)顯示出您選擇的修訂版和當(dāng)前版本之間的差別。
后一修訂版 | 前一修訂版 | ||
toaster:user-menu-of-pns [2015/03/18 15:15] cobub 創(chuàng)建 |
toaster:user-menu-of-pns [2017/07/14 11:18] (當(dāng)前版本) |
||
---|---|---|---|
行 1: | 行 1: | ||
- | dd | + | ~~Title:Cobub Toaster 推送服務(wù)器手冊(cè) - 開源移動(dòng)應(yīng)用運(yùn)營(yíng)平臺(tái) - 移動(dòng)統(tǒng)計(jì)、移動(dòng)推送解決方案 - Cobub 移動(dòng)開發(fā)者中心~~? |
+ | {{description>本文檔介紹了推送服務(wù)器的Web接口的使用方法。}}? | ||
+ | {{keywords>Cobub Toaster,開源移動(dòng)應(yīng)用分析,移動(dòng)分析,移動(dòng)應(yīng)用分析,推送服務(wù)器手冊(cè)}}? | ||
+ | ====== 推送服務(wù)器手冊(cè) ======? | ||
+ | ? | ||
+ | ? | ||
+ | 本文檔介紹了推送服務(wù)器的Web接口的使用方法。? | ||
+ | ? | ||
+ | 首先區(qū)分一下user channel和tag channel的概念:? | ||
+ | ? | ||
+ | user channel是以客戶端唯一的uid作為channel的名稱,客戶端連接上來(lái)自動(dòng)sub(sub表示加入channel)? | ||
+ | tag channel 是客戶端主動(dòng)通過(guò)sub命令加入的通道,比如客戶端sub “l(fā)ocation:beijing”,那么它就加入了”location:beijing”的通道,對(duì)”location:beijing”下發(fā)消息, 該客戶端就會(huì)收到消息, 可以把tag channel想象成標(biāo)簽推送? | ||
+ | ===== Web接口的調(diào)用方法 =====? | ||
+ | ? | ||
+ | 開發(fā)者需要對(duì)Web接口以POST方法傳遞數(shù)據(jù),Web接口將以JSON格式返回接口調(diào)用結(jié)果。? | ||
+ | ? | ||
+ | 假如在服務(wù)器配置文件中配置了? | ||
+ | <code>? | ||
+ | [web]? | ||
+ | bind localhost:8080</code>? | ||
+ | 那么可使用如下的Linux命令調(diào)用接口或編程調(diào)用:? | ||
+ | <code>? | ||
+ | curl –X POST –d POST_DATA http://localhost:8080/METHOD_NAME</code>? | ||
+ | 其中? | ||
+ | ? | ||
+ | POST_DATA 為POST的數(shù)據(jù)? | ||
+ | METHOD_NAME 為需要調(diào)用的方法名? | ||
+ | ===== 針對(duì)單一用戶或者多個(gè)用戶的推送(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時(shí)間戳,最長(zhǎng)為30天(在上面配置文件中設(shè)置),超出這個(gè)時(shí)間將不再下發(fā)此消息的離線消息,且無(wú)法繼續(xù)通過(guò)web service查詢到此消息的相關(guān)信息。值得注意的是, 如果提供了大于0的expired,那么默認(rèn)是會(huì)保存離線消息的,沒(méi)有收到消息的客戶端在下次登錄時(shí)會(huì)收到此離線消息,但是如果設(shè)置expired為0,表示此消息是即時(shí)消息,不需要保存離線消息,所以即時(shí)客戶端沒(méi)有收到消息,那么也是不會(huì)有離線消息產(chǎn)生的。? | ||
+ | * **channel**: 表示要下發(fā)的通道名稱,可以提供多個(gè)channel。在這個(gè)方法里,channel的值對(duì)應(yīng)SDK端提供的UID。? | ||
+ | * **data**: 要下發(fā)的數(shù)據(jù),這個(gè)可以使任何格式的數(shù)據(jù),甚至二進(jìn)制數(shù)據(jù)也是支持的。一般情況下,可以使用JSON格式的文本賦值給data。下面列出了關(guān)于data格式的說(shuō)明。? | ||
+ | * **appid**: 要推送的appid,appid只能提供一個(gè)。? | ||
+ | ===== 通知欄消息預(yù)置模板 =====? | ||
+ | ? | ||
+ | ? | ||
+ | 如使用SDK中預(yù)置的通知欄消息展現(xiàn)模板,則對(duì)于POST數(shù)據(jù)中 data 字段的格式要求,參照如下JSON串:? | ||
+ | <code>? | ||
+ | { ? | ||
+ | "type":"notification", //通知欄類型? | ||
+ | "style":"1", //通知欄樣式編號(hào)? | ||
+ | "config":{ ? | ||
+ | "icondata":"XXXXXXX", //icon文件的BASE64編碼? | ||
+ | "vibrate":"1", //是否震動(dòng):1 震動(dòng),0 不震動(dòng)? | ||
+ | "sound":"1", //是否發(fā)出提示音:1有聲音,0沒(méi)聲音? | ||
+ | "title":"XXXXXX", //通知欄標(biāo)題? | ||
+ | "ticker":"XXXXXXX", //狀態(tài)欄滾動(dòng)信息? | ||
+ | "body":"XXXXXXX", //消息內(nèi)容? | ||
+ | "clickconfig":{ //定義了用戶點(diǎn)擊后的行為,請(qǐng)見(jiàn)如下的例子? | ||
+ | "operation":"launchActivity", ? | ||
+ | "package":"com.wbkit.icclient", ? | ||
+ | "targetActivity":"com.wbkit.icclient.MainActivity" ? | ||
+ | } ? | ||
+ | } ? | ||
+ | }? | ||
+ | </code>? | ||
+ | **clickconfig的例子一:打開應(yīng)用(Activity)**? | ||
+ | ? | ||
+ | <code>{? | ||
+ | “operation”:“l(fā)aunchActivity”, //操作類型:打開Activity? | ||
+ | “package” : “com.example.demo” //APK包名? | ||
+ | “targetActivity”: “com.example.demo.MainActivity”//Activity? | ||
+ | }</code>? | ||
+ | ? | ||
+ | **clickconfig的例子二:下載APK并安裝**? | ||
+ | <code>? | ||
+ | {? | ||
+ | “operation”:“download”, //操作類型:下載APK)? | ||
+ | “appname”: “捕魚達(dá)人” //APP 名字? | ||
+ | “dlurl”: “http://xxxxxx.apk” //APK的url? | ||
+ | //PS:下載后自動(dòng)彈出安裝? | ||
+ | }</code>? | ||
+ | ? | ||
+ | **clickconfig的例子三:打開頁(yè)面**? | ||
+ | <code>? | ||
+ | {? | ||
+ | “operation”:“l(fā)oadWebpage”, //操作類型:打開頁(yè)面? | ||
+ | //PS: url和page二選一,如果都填了優(yōu)先url? | ||
+ | “url”: “http://www.baidu.com”, //url? | ||
+ | “page”: “.....” //頁(yè)面內(nèi)容? | ||
+ | }? | ||
+ | </code>? | ||
+ | ===== 透?jìng)飨㈩A(yù)置模板 =====? | ||
+ | 需要使用如下的格式確定data內(nèi)容? | ||
+ | <code>? | ||
+ | {? | ||
+ | “type”:“transparent”, //透?jìng)黝愋? | ||
+ | “config”:“{? | ||
+ | “content”:“XXXXXXX”,//透?jìng)飨?nèi)容? | ||
+ | } ”? | ||
+ | }</code>? | ||
+ | 返回格式? | ||
+ | <code>? | ||
+ | {? | ||
+ | "status": "200",? | ||
+ | "pushedCount": 100,? | ||
+ | "offCount": 1,? | ||
+ | "elapsed": 0.52,? | ||
+ | "mid": "489c4464de66000"? | ||
+ | }? | ||
+ | </code>? | ||
+ | * status: 200表示成功, 400 表示請(qǐng)求封包格式錯(cuò)誤.? | ||
+ | * pushedCount: 已經(jīng)下發(fā)的消息數(shù)量,這個(gè)數(shù)值并不代表接收到消息的用戶數(shù)量,僅僅表示推送服務(wù)器已經(jīng)對(duì)100個(gè)連接下發(fā)了數(shù)據(jù),只有當(dāng)終端SDK提交了回執(zhí),服務(wù)器才會(huì)認(rèn)為該用戶收到了消息。? | ||
+ | * offCount: 表示提交的user channel中,當(dāng)前不在線的數(shù)量。? | ||
+ | * elapsed: 這次推送在服務(wù)器端下發(fā)所消耗的時(shí)間,以毫秒為單位,是一個(gè)float型的數(shù)字。? | ||
+ | * mid: 這次推送消息的唯一任務(wù)ID,以后可以通過(guò)此mid查詢到相應(yīng)消息的信息,如客戶接收到的數(shù)量,客戶閱讀的數(shù)量,消息內(nèi)容等。? | ||
+ | ===== 針對(duì)指定的一個(gè)或多個(gè)TAG對(duì)應(yīng)的用戶進(jìn)行推送(tagpub) =====? | ||
+ | **tagpub**是專門針對(duì)tag channel下發(fā)的命令,也支持離線消息,但是離線消息會(huì)消耗多一些資源。如果只需要實(shí)時(shí)下發(fā),請(qǐng)把expired設(shè)置為0。? | ||
+ | METHOD_NAME: **tagpub**? | ||
+ | POST_DATA:? | ||
+ | <code>? | ||
+ | "channel": "localtion:beijing",? | ||
+ | "channel": "location:guangzhou",? | ||
+ | "data": "hello world",? | ||
+ | "appid": "XXX",? | ||
+ | "expired": "1403521931"? | ||
+ | </code>? | ||
+ | * channel: tag channel的名稱, 可以提供多個(gè)? | ||
+ | * data: 需要下發(fā)的數(shù)據(jù)? | ||
+ | * appid: appid與tag channel相關(guān)聯(lián), 只能提供app下的tag channel? | ||
+ | * expired: 同pub方法? | ||
+ | 返回格式:? | ||
+ | <code>? | ||
+ | {? | ||
+ | "status": "200",? | ||
+ | "pushedCount": 100,? | ||
+ | "elapsed": 0.52,? | ||
+ | "mid": "489c4465de66000"? | ||
+ | }? | ||
+ | </code>? | ||
+ | 各項(xiàng)意義同pub方法? | ||
+ | ===== 針對(duì)某個(gè)APP的所有用戶進(jìn)行推送(allpub) =====? | ||
+ | 此方法將向appid下的所有在線用戶或者全部用戶下發(fā),區(qū)別只下發(fā)在線用戶或全部用戶是通過(guò)expired來(lái)區(qū)分的,如果expired為0,那么就只對(duì)在線的用戶下發(fā),不保存離線消息。? | ||
+ | ? | ||
+ | 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說(shuō)明:? | ||
+ | ? | ||
+ | * 200 成功? | ||
+ | * 400 請(qǐng)求封包有錯(cuò)誤? | ||
+ | * 500 服務(wù)器內(nèi)部錯(cuò)誤(通常跟redis有關(guān))? | ||
+ | ===== 將用戶的uid加入標(biāo)簽組(sub-tag) =====? | ||
+ | 提供了一個(gè)接口可以把某一些用戶的uid加入到某一tag channel下,此操作是冪等的。? | ||
+ | METHOD_NAME:**sub-tag**? | ||
+ | POST_DATA:? | ||
+ | <code>? | ||
+ | "appid": "XXX",? | ||
+ | "tag": "localtion:beijing",? | ||
+ | "uid": "xxx@qq.com",? | ||
+ | "uid": "xxxx@gmail.com" </code>? | ||
+ | 參數(shù)說(shuō)明:? | ||
+ | ? | ||
+ | * appid: 與標(biāo)簽相關(guān)聯(lián)的appid,只能有一個(gè)此參數(shù)? | ||
+ | * tag: 要加入的標(biāo)簽組的TAG,也只能有一個(gè)此參數(shù)? | ||
+ | * uid: 要加入標(biāo)簽的用戶uid,可以是多個(gè)? | ||
+ | ? | ||
+ | 返回結(jié)果:? | ||
+ | <code>? | ||
+ | {? | ||
+ | "status": "200"? | ||
+ | }? | ||
+ | </code>? | ||
+ | status說(shuō)明? | ||
+ | ? | ||
+ | * 200 成功? | ||
+ | * 400 請(qǐng)求封包有錯(cuò)誤? | ||
+ | * 500 服務(wù)器內(nèi)部錯(cuò)誤(通常跟redis有關(guān))? | ||
+ | ===== 將一些用戶從標(biāo)簽組中移除(unsub-tag) =====? | ||
+ | METHOD_NAME: u**nsub-tag**? | ||
+ | POST_DATA:? | ||
+ | <code>? | ||
+ | "appid": "XXX",? | ||
+ | "tag": "localtion:beijing",? | ||
+ | "uid": "xxx@qq.com",? | ||
+ | "uid": "xxxx@gmail.com", </code>? | ||
+ | 參數(shù)說(shuō)明? | ||
+ | ? | ||
+ | * appid: 與標(biāo)簽相關(guān)聯(lián)的appid,只能有一個(gè)此參數(shù)? | ||
+ | * tag: 要去除的標(biāo)簽組的TAG名稱,只能有一個(gè)此參數(shù)? | ||
+ | * uid: 要移除標(biāo)簽的用戶uid,可以提供多個(gè)? | ||
+ | 返回格式:? | ||
+ | <code>? | ||
+ | {? | ||
+ | "status": "200" ? | ||
+ | }</code>? | ||
+ | status說(shuō)明? | ||
+ | ? | ||
+ | * 200 成功? | ||
+ | * 400 請(qǐng)求封包有錯(cuò)誤? | ||
+ | * 500 服務(wù)器內(nèi)部錯(cuò)誤(通常跟redis有關(guān))? | ||
+ | ===== 推送任務(wù)信息查詢(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>? | ||
+ | 返回說(shuō)明:? | ||
+ | ? | ||
+ | * status: 接口查詢的結(jié)果,200為正確執(zhí)行? | ||
+ | * content: 消息的內(nèi)容? | ||
+ | * expire: 消息過(guò)期的時(shí)間戳? | ||
+ | * readCount: 此消息被客戶端點(diǎn)擊(閱讀)的數(shù)量? | ||
+ | * recvCount: 此消息被客戶端接收到的數(shù)量? | ||
+ | * startTime: 此消息下發(fā)的時(shí)間? | ||
+ | * totalCount: 總下發(fā)量? | ||
+ | * 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, //當(dāng)前在"location:Beijing"這個(gè)標(biāo)簽TAG下有456人,包括在線及不在線用戶? | ||
+ | "location:Guangzhou": 23 //當(dāng)前在"location:Beijing"這個(gè)標(biāo)簽TAG下有23人,包括在線及不在線用戶? | ||
+ | }</code>? | ||
+ | ===== APP 信息查詢(app-size) =====? | ||
+ | ? | ||
+ | ? | ||
+ | METHOD_NAME: **app-size**? | ||
+ | POST_DATA:? | ||
+ | <code>? | ||
+ | "online": 1,? | ||
+ | "appid": "xxx",? | ||
+ | "appid": "yyy" </code>? | ||
+ | * online: 為1表示查詢?cè)诰€的user數(shù)量,如果為0表示查詢總數(shù)量,包括離線? | ||
+ | * appid: 可以提供多個(gè)appid進(jìn)行查詢? | ||
+ | 返回格式:? | ||
+ | <code>? | ||
+ | {? | ||
+ | "status": "200",? | ||
+ | "xxx": 1234, //appid為xxx的app目前在線(或總數(shù))用戶數(shù)為1234人? | ||
+ | "yyy": 567 //appid為yyy的app目前在線(或總數(shù))用戶數(shù)為567人? | ||
+ | }</code>? | ||
+ | 其中返回的數(shù)字表示數(shù)量,具體含義依賴于調(diào)用時(shí)online方法的值。 ? | ||
+ | |