百度云推送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
原文地址:https://www.cnblogs.com/ciscoo/p/6507481.html