1. 程式人生 > >java集成jpush實現客戶端推送

java集成jpush實現客戶端推送

step eclips 著作權 步驟 isn new args set oid

代碼地址如下:
http://www.demodashi.com/demo/13700.html

前言

java 集成jpush 實現客戶端推送

一、準備工作

開發環境:
jdk1.6
Eclipse Luna Service Release 1 (4.4.1)
運行環境:
eclipse

二、jpush 推送說明

jpush推送是國內的服務廠商提供的一站式push服務(同時支持iOS、android),後面也加入了即時通訊的能力供app使用。致力於打造簡單、可靠、價格有競爭力的服務(簡單功能全免費,高級版才收費),讓應用開發商可以聚焦業務開發,push相關的技術實現全部通過極光推送來解決,僅需調用極光推送的api即可

三、推送原理

安卓客戶端推送原理

JPush WP Push 包括 1個部分,MPNs 推送(代理)。

紅色部分是 MPNs 推送,JPush 代理開發者的應用,向微軟 MPNs 服務器推送。由 Microsoft MPNs Server 推送到 WP 設備上。

藍色部分是 JPush 應用內推送部分,但目前暫不支持應用內消息。
技術分享圖片

蘋果客戶端推送原理

從圖可以看出,JPush iOS Push 包括 2 個部分,APNs 推送(代理),與 JPush 應用內消息。

紅色部分是 APNs 推送,JPush 代理開發者的應用(需要基於開發者提供的應用證書),向蘋果 APNs 服務器推送。由 APNs Server 推送到 iOS 設備上。

藍色部分是 JPush 應用內推送部分,即 App 啟動時,內嵌的 JPush SDK 會開啟長連接到 JPush Server,從而 JPush Server 可以推送消息到 App 裏。
技術分享圖片

四、代碼結構

技術分享圖片

mysql 表結構
技術分享圖片

五、服務端程序實現

1、推送基本分為安卓與蘋果。

Android("android"),
IOS("ios"),
WinPhone("winphone");

private final String value;

private DeviceType(final String value) {
    this.value = value;
}

public String value() {
    return this.value;
}

2、定義推送接口推送單個用戶、多個用戶、單個設備、整個app。

public void pushToUser(String type,String userId, PushEntity pushEntity);

public void pushToUserList(String type,List<String> userIdList, PushEntity pushEntity);

public void pushToDevice(String type,List<String> deviceTokenList, PushEntity pushEntity);

public void pushToApp(String type,PushEntity pushEntity);

3、推送環境區分、安卓不區分開發與生產環境,蘋果需要區分。

        List<String[]> JpushInfoList = MobilePushService.getJpushKeyInfo(type,pushEntity.getJpushApiMasterSecret(),
                pushEntity.getJpushAppKey());
        // 如果配置mobile.notify.ios.production=false,則是開發模式
        boolean iosMode = true;
        // 設置平臺
        payloadBuilder.setPlatform(deviceType.equals(DeviceType.IOS) ? Platform.ios() : Platform.android());

        Map<String, Object> extrasMap = new HashMap<String, Object>();

4、集成jpush api 實現推送功能。

            try {
                JPushClient jPushClient = new JPushClient(jpushInfo[0], jpushInfo[1], iosMode,
                        (pushEntity.getJpushTimeToLive() == null ? 86400 : pushEntity.getJpushTimeToLive()));
                jPushClient.sendPush(pushPayload);
            } catch (Exception e) {

                // 個推時如果手機端沒有註冊用戶,不打錯誤日誌
                if (e.getMessage().indexOf("\"code\": 1011") == -1) {
                    logger.error("JPUSH推送消息時發生異常:[" + e.getMessage() + "]", e);
                }
            }
        

5、通過mysql配置jpush key與secret 動態更換配置。

        // 如果設定了自定義key,則使用自定義,否則進行數據庫查詢
        if (StringUtils.isNotBlank(apiMasterSecret) && StringUtils.isNotBlank(appKey)) {
            resultA.add(new String[] { apiMasterSecret, appKey });
        } else {
            resultList = CptNotifyJpush.dao.findCptNotifyJpush(type);
            if (resultList != null && resultList.size() > 0) {
                for (CptNotifyJpush result : resultList) {
                    resultA.add(new String[] {result.getStr("api_master_secret"),result.getStr("app_key") });
                }
            }
        }

六、客戶端集成步驟

step1:去極光推送註冊賬號:https://www.jpush.cn/,並註冊應用。
step2:上傳apns證書到極光,apns證書的生成步驟參考:
http://docs.jpush.io/client/ios_tutorials/#ios_1
仔細閱讀該文檔,上傳成功後控制臺的應用詳情裏面會顯示“已驗證”,說明證書有效。

step3:對你的app工程重新配置,使用新的支持apns的provision文件(若此前應用已支持apns,可以不用換),否則後面無法正常獲得device token.
step4:集成其sdk,包括一個.a和一個.h文件,最新版本大約是2.1,其sdk中也包含了demo,註意在2.1版本之前需要創建一個plist文件用於保存秘鑰信息等,在最新版本不需要此文件。
sdk下載地址:https://www.jpush.cn/common/products#product-download

step5:主要代碼修改如下:
appdelegate.h:

static NSString appKey = @"Your_app_key";
static NSString
channel = @"Your_channel_identifier";
static BOOL isProduction = NO;

七、運行方法

public static void main(String args[]){
    
    JPushService pushService=new JPushService();
    
    PushEntity pushEntity=new PushEntity();
    //修改密鑰
    pushEntity.setJpushApiMasterSecret("0a35d2fabea1df2dfc36d32l");
    pushEntity.setJpushAppKey("a344debcf41e5542b291d52f");
    pushEntity.setMsgContent("test jpush");
    pushEntity.setMsgTitle("test jpush");
    
    pushService.sendNotification2App("",pushEntity, DeviceType.IOS);
    
} pushEntity.setJpushAppKey("a344debcf41e5542b291d52f");
    pushEntity.setMsgContent("test jpush");
    pushEntity.setMsgTitle("test jpush");
    
    pushService.sendNotification2App("",pushEntity, DeviceType.IOS);java集成jpush實現客戶端推送

代碼地址如下:
http://www.demodashi.com/demo/13700.html

註:本文著作權歸作者,由demo大師代發,拒絕轉載,轉載需要作者授權

java集成jpush實現客戶端推送