• 百度云推送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
  • 相关阅读:
    POJ 3211 Washing Clothes
    MySQL 优化Limit分页
    signed 与 unsigned 有符号和无符号数
    C/C++ 变量的初始化
    C/C++ 变量的初始化
    返回值的判断
    返回值的判断
    《涅槃经》的研读
    《涅槃经》的研读
    Opencv Surf算子特征提取与最优匹配
  • 原文地址:https://www.cnblogs.com/ciscoo/p/6507481.html
Copyright © 2020-2023  润新知