百度雲推送java服務端maven安裝完整demo


   最近在給app端寫接口,app需要接收推送,所以想到用百度雲推送。這里順便也記錄一下,方便以后復用。

項目用maven安裝,以下是百度推送的maven倉庫,

<!-- https://mvnrepository.com/artifact/cn.featherfly/bccs-api -->
        <dependency>
            <groupId>cn.featherfly</groupId>
            <artifactId>bccs-api</artifactId>
            <version>3.0.1</version>
        </dependency>

如果不用maven,那么直接在百度推送的官網上下載sdk將jar導入項目即可。

接下來是推送完整demo。百度推送是按設備推送,所以需要先注冊推送通道,需要一個channelId,在以前的版本還需要一個pushUserId,目前3.0.1已經不需要了。

/**
 * 推送單播通知   
 * @author
 * @Date 2017年3月2日
 * @Desc
 */
public class BaiduPush {

    public String[] pushNotificationByUser(String channelId,
            Integer deviceType, String message,Map<String,Object> map){
        String[] results = new String[3];
        String retCode = "1";
        String retMsg = "";
        try {
                // 1. 設置developer平台的ApiKey/SecretKey,需到百度推送注冊
                String apiKey = "";
                String secretKey = "";
                if (deviceType != null && deviceType.intValue() == 4) {// ios
                    apiKey = Constants.baiduIOSApiKey;
                    secretKey = Constants.baiduIOSSecretKey;
                }else if(deviceType==3){//Android
                    apiKey = Constants.baiduAndroidApiKey;
                    secretKey = Constants.baiduAndroidSecretKey;
                }
                // 2. 創建PushKeyPair
                PushKeyPair  pair = new PushKeyPair (apiKey, secretKey);
                //創建BaiduPushClient,訪問SDK接口
                BaiduPushClient pushClient = new BaiduPushClient(pair,
                        BaiduPushConstants.CHANNEL_REST_URL);

                // 3. 注冊YunLogHandler,獲取本次請求的交互信息
                pushClient.setChannelLogHandler(new YunLogHandler() {
                    @Override
                    public void onHandle(YunLogEvent event) {
                        System.out.println(event.getMessage());
                    }
                });
                JSONObject notification = new JSONObject();
                if(deviceType == 4){
                    JSONObject jsonAPS = new JSONObject();
                    jsonAPS.put("alert", message);
                    jsonAPS.put("sound", "ttt");
                    notification.put("aps", jsonAPS);
                    notification.put("title", "XXX");
//                    notification.put("key2", "value2");這里用於用戶自定義
                    
                    if (map != null && !map.isEmpty()){
                        Set<String> customContentMapKeys = map.keySet();
                        Iterator<String> irt = customContentMapKeys.iterator();
                        while (irt.hasNext()){
                            String key = (String)irt.next();
                            String value = (String)map.get(key);
                            notification.put(key, value);
                        }
                    }
                }else if(deviceType==3){
                    notification.put("title", "XXX");
                    notification.put("description",message);
                    notification.put("notification_builder_id", 0);
                    notification.put("notification_basic_style", 4);
                    notification.put("open_type", 1);
                    notification.put("url", "http://push.baidu.com");//app上點開推送之后跳轉的鏈接
                    JSONObject jsonCustormCont = new JSONObject();
                    jsonCustormCont.put("name", "test"); //自定義內容,key-value
                    notification.put("custom_content", jsonCustormCont);
                    if (map != null && !map.isEmpty()){//map中放的是用戶自定義內容
                        Set<String> customContentMapKeys = map.keySet();
                        Iterator<String> irt = customContentMapKeys.iterator();
                        while (irt.hasNext()){
                            String key = (String)irt.next();
                            String value = (String)map.get(key);
                            notification.put(key, value);
                        }
                    }
                }
                // 4. 創建請求類對象
                PushMsgToSingleDeviceRequest request = new PushMsgToSingleDeviceRequest()
                        .addChannelId(channelId)
                        .addTopicId(apiKey)
                        .addMsgExpires(new Integer(3600)). // message有效時間
                        addMessageType(1).// 1:通知,0:透傳消息. 默認為0 注:IOS只有通知.
                        addMessage(notification.toString()).
                        addDeviceType(deviceType);// deviceType => 3:android, 4:ios
                
                // 5. 調用pushMessage接口
                PushMsgToSingleDeviceResponse response = pushClient.
                        pushMsgToSingleDevice(request);

                // 6. 認證推送成功
                System.out.println("msgId: " + response.getMsgId()
                + ",sendTime: " + response.getSendTime());
        }catch (PushClientException e) {
            //ERROROPTTYPE 用於設置異常的處理方式 -- 拋出異常和捕獲異常,
            //'true' 表示拋出, 'false' 表示捕獲。
            if (BaiduPushConstants.ERROROPTTYPE) { 
                try {
                    throw e;
                } catch (PushClientException e1) {
                    e1.printStackTrace();
                }
            } else {
                e.printStackTrace();
            }
        } catch (PushServerException e) {
            if (BaiduPushConstants.ERROROPTTYPE) {
                try {
                    throw e;
                } catch (PushServerException e1) {
                    e1.printStackTrace();
                }
            } else {
                System.out.println(String.format(
                        "requestId: %d, errorCode: %d, errorMsg: %s",
                        e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
            }
        }finally {
            results[0] = retCode;
            results[1] = retMsg;
        }

        return results;
    }
    
    
    public static void main(String[] args) {
        BaiduPush baiduPush = new BaiduPush();
        Map<String, Object> map = new HashMap<>();
        baiduPush.pushNotificationByUser("clientChannelId", 3, "今天天氣不錯",map);
    }
    
}

官網文檔寫的很清楚,SDK中有完整的例子,附上地址:

http://push.baidu.com/doc/java/api

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM