極光推送 java集成

**移動(dòng)端設(shè)備: **
Android:走自建的TCP長(zhǎng)連接通道
iOS : 走自家的系統(tǒng)推送通道,
WinPhone: 走自家的系統(tǒng)推送通道,
那么意味著你服務(wù)端要維護(hù)這三套推送系統(tǒng)。

極光推送是:使得開(kāi)發(fā)者可以即時(shí)地向其應(yīng)用程序的用戶推送通知或者消息,與用戶保持互動(dòng),從而有效地提高留存率,提升用戶體驗(yàn)。簡(jiǎn)單的說(shuō)就是通過(guò)JPush后臺(tái)管理網(wǎng)站進(jìn)行app消息的推送??梢宰層脩艏皶r(shí)的收到最新的消息提示。
但是往往有時(shí)候需要我們自己開(kāi)發(fā)自己的后臺(tái)管理網(wǎng)站實(shí)現(xiàn)推送的功能,這個(gè)時(shí)候就需要調(diào)用JPush提供的API接口,來(lái)進(jìn)行消息的推送。這里我只講一些核心API接口,JPush 當(dāng)前支持 Android, iOS, Windows Phone 三個(gè)平臺(tái)的推送。其關(guān)鍵字分別為:"android", "ios", "winphone"。

服務(wù)端主動(dòng)推送到客戶端的原理:
目前服務(wù)端給客戶端推送,普遍做法是客戶端與服務(wù)端維持一個(gè)長(zhǎng)連接,客戶端定時(shí)向服務(wù)端發(fā)送心跳值以維持這個(gè)長(zhǎng)連接。當(dāng)有新消息過(guò)來(lái)的時(shí)候,服務(wù)端查出該消息對(duì)應(yīng)的TCP Channel的ID并找到對(duì)應(yīng)的通道進(jìn)行消息下發(fā)。
這只是最基本的通訊模型,在此之上,有衍生出針對(duì)消息的發(fā)布/訂閱模型,客戶端可以訂閱某一個(gè)Topic,服務(wù)端根據(jù)Topic找到對(duì)應(yīng)的Channel進(jìn)行批量的消息下發(fā)。所有的客戶端隱式的訂閱的all這個(gè)opic,所以『類(lèi)似中國(guó)移動(dòng)給全網(wǎng)信號(hào)內(nèi)所有手機(jī)發(fā)消息的模式』亦可以理解『廣播消息』,即給all這個(gè)Topic發(fā)消息。

下面是[Java]后臺(tái)的代碼部分:

調(diào)用地址
POST https://api.jpush.cn/v3/push

public class JPushClientExample {  
    //在極光注冊(cè)上傳應(yīng)用的 appKey 和 masterSecret  
    private static final String appKey ="a148767f7440ff9daf56457f";//必填,例如466f7032ac604e02fb7bda89  
    private static final String masterSecret = "731e374afd796d5942ba1363";//必填,每個(gè)應(yīng)用都對(duì)應(yīng)一個(gè)masterSecret  
    private static JPushClient jpush = null;  
/*調(diào)用驗(yàn)證
*HTTP Header(頭)里加一個(gè)字段(Key/Value對(duì)):
*Authorization: Basic base64_auth_string 其中 base64_auth_string 的生成算法為:*base64(appKey:masterSecret)即,對(duì) appKey 加上冒號(hào),加上 masterSecret 拼裝
*起來(lái)的字符串,再做 base64 轉(zhuǎn)換
*/
    /* 
     * 保存離線的時(shí)長(zhǎng)。秒為單位。最多支持10天(864000秒)。 
     * 0 表示該消息不保存離線。即:用戶在線馬上發(fā)出,當(dāng)前不在線用戶將不會(huì)收到此消息。 
     * 此參數(shù)不設(shè)置則表示默認(rèn),默認(rèn)為保存1天的離線消息(86400秒 
     */  
    private static long timeToLive =  60 * 60 * 24;    
    public static void main(String[] args) {  
        /* 
         * Example1: 初始化,默認(rèn)發(fā)送給android和ios,同時(shí)設(shè)置離線消息存活時(shí)間 
         * jpush = new JPushClient(masterSecret, appKey, timeToLive); 
         *  
         * Example2: 只發(fā)送給android         *  
         * Example3: 只發(fā)送給IOS 
         * jpush = new JPushClient(masterSecret, appKey, DeviceEnum.IOS); 
         *  
         * Example4: 只發(fā)送給android,同時(shí)設(shè)置離線消息存活時(shí)間 
         * jpush = new JPushClient(masterSecret, appKey, timeToLive, DeviceEnum.Android); 
         */  
        jpush = new JPushClient(masterSecret, appKey, timeToLive);  
        /*  
         * 是否啟用ssl安全連接, 可選 
         * 參數(shù):?jiǎn)⒂胻rue, 禁用false,默認(rèn)為非ssl連接 
         */  
        jpush.setEnableSSL(true);  
  
        //測(cè)試發(fā)送消息或者通知  
        testSend();  
    }  
推送字段解說(shuō).png
    private static void testSend() {  
        // 在實(shí)際業(yè)務(wù)中,建議 sendNo 是一個(gè)你自己的業(yè)務(wù)可以處理的一個(gè)自增數(shù)字。  
        // 除非需要覆蓋,請(qǐng)確保不要重復(fù)使用。詳情請(qǐng)參考 API 文檔相關(guān)說(shuō)明。  
//      Integer num= getRandomSendNo();  
        String sendNo="1900192560";  
        String msgTitle = "Hi, JPush!";  
        String msgContent = "我是JPush測(cè)試信息,已經(jīng)成功發(fā)送給你,請(qǐng)查收。";      
        /* 
         * IOS設(shè)備擴(kuò)展參數(shù), 
         * 設(shè)置badge,設(shè)置聲音 
         */  
        Map<String, Object> extra = new HashMap<String, Object>();  
        IOSExtra iosExtra = new IOSExtra(1, "WindowsLogonSound.wav");  
        extra.put("id1",iosExtra);  
        extra.put("id2","I am extra infomation");  
        //IOS和安卓一起  
        MessageResult msgResult = jpush.sendNotificationWithAppKey(sendNo, msgTitle, msgContent, 0, extra);  
        //對(duì)所有用戶發(fā)送通知, 更多方法請(qǐng)參考文檔  
    //  MessageResult msgResult = jpush.sendCustomMessageWithAppKey(sendNo,msgTitle, msgContent);  
        if (null != msgResult) {  
            System.out.println("服務(wù)器返回?cái)?shù)據(jù): " + msgResult.toString());  
            if (msgResult.getErrcode() == ErrorCodeEnum.NOERROR.value()) {  
                System.out.println("發(fā)送成功, sendNo=" + msgResult.getSendno());  
            } else {  
                System.out.println("發(fā)送失敗, 錯(cuò)誤代碼=" + msgResult.getErrcode() + ", 錯(cuò)誤消息=" + msgResult.getErrmsg());  
            }  
        } else {  
            System.out.println("無(wú)法獲取數(shù)據(jù)");  
        }     
    }  
    public static final int MAX = Integer.MAX_VALUE;  
    public static final int MIN = (int) MAX/2;  
    /** 
     * 保持 sendNo 的唯一性是有必要的 
     * It is very important to keep sendNo unique. 
     * @return sendNo 
     */  
    public static int getRandomSendNo() {  
        return (int) (MIN + Math.random() * (MAX - MIN));  
    }  
}

狀態(tài)碼.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 推送技術(shù)產(chǎn)生場(chǎng)景: --服務(wù)器端主動(dòng)性: 客戶端與服務(wù)器交互都是客戶端主動(dòng)的, 服務(wù)器一般不能主動(dòng)與客戶端進(jìn)行數(shù)據(jù)...
    原軍鋒閱讀 35,169評(píng)論 4 60
  • 版本記錄 前言 ??現(xiàn)在很多APP都有推送功能,其中極光推送就是很多APP的首選。我們最近的幾個(gè)APP也是用的極光...
    刀客傳奇閱讀 8,666評(píng)論 0 8
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,812評(píng)論 25 709
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評(píng)論 19 139
  • 版本記錄 前言 ??前一篇已經(jīng)對(duì)極光推送產(chǎn)品架構(gòu)和服務(wù)進(jìn)行了介紹,這一篇?jiǎng)t只對(duì)ios客戶端的集成和使用等狀況進(jìn)行了...
    刀客傳奇閱讀 1,292評(píng)論 0 0

友情鏈接更多精彩內(nèi)容