百度云推送javaSDK demo

百度云推送巴拉巴拉巴拉

近阶段由于PM同学的强烈要求,我们app服务端准备接入百度云推送工程,那么现在开始demo走起,本Demo主要是针对标签推送。


下载百度云推送SDK

网址:http://push.baidu.com/doc/java/api
找到javaSDK进行下载即可;

import com.baidu.yun.core.log.YunLogEvent;
import com.baidu.yun.core.log.YunLogHandler;
import com.baidu.yun.push.auth.PushKeyPair;
import com.baidu.yun.push.client.BaiduPushClient;
import com.baidu.yun.push.constants.BaiduPushConstants;
import com.baidu.yun.push.exception.PushClientException;
import com.baidu.yun.push.exception.PushServerException;
import com.baidu.yun.push.model.PushMsgToTagRequest;
import com.baidu.yun.push.model.PushMsgToTagResponse;

/**
 * Created by New-Bee on 2017/2/16.
 */
public class PushTest {
    public static void main(String[] args) throws PushClientException, PushServerException {
        /**
         * 1.
         *   身份合法性验证
         */
        String apiKey = "domotGdRGCLR2x20UujEZNIz"; // 创建应用时,会在应用里面看到
        String secretKey = "IglRgUVnCHyGhblwo6UWAtzkFxkEMRxR"; // 同上
        PushKeyPair pair = new PushKeyPair(apiKey, secretKey);

        /**
         * 2.
         *   创建一个BaiduPushClient对象来访问官方发布接口
         *   参数说明:
         *      pair : 通过apiKey和secretKey获取PushKeyPair对象
         *      BaiduPushConstants.CHANNEL_REST_URL:
         *      为服务URL地址,注意,如果你的推送服务器不可以访问外网的话,那么这个url是不能用的
         *
         * */
        BaiduPushClient pushClient = new BaiduPushClient(pair,
                BaiduPushConstants.CHANNEL_REST_URL);

        /**
         * 3.
         *    注册YunLogHandler对象,来获取交互请求中的详细信息
         *
         * */
        pushClient.setChannelLogHandler(new YunLogHandler() {
            public void onHandle(YunLogEvent event) {
                System.out.println(event.getMessage());
            }
        });

        try {
            /**
             * 4.
             *    开始组装按标签组推送接口所需要的参数
             *
             *    addTagName:标签名称
             *    addMsgExpires:消息失效时间(单位秒)
             *    addMessageType: 1 :普通通知 ,2:透传通知
             *    addMessage: 添加消息体
             *    addDeviceType:设备类型 3:android 4:IOS
             * */
            PushMsgToTagRequest request = new PushMsgToTagRequest()
                    .addTagName("xingge")
                    .addMsgExpires(new Integer(3600))
                    .addMessageType(1)
                    // .addSendTime(System.currentTimeMillis() / 1000 + 70).
                    .addMessage("{\"title\":\"TEST\",\"description\":\"Hello Baidu push!\"}")
                    .addDeviceType(3);
            /**
             * 5.
             *     开始推送消息
             * */
            PushMsgToTagResponse response = pushClient.pushMsgToTag(request);
            /**
             * 6.
             *     Http请求返回值解析
             * */
            System.out.println("msgId: " + response.getMsgId() + ",sendTime: "
                    + response.getSendTime() + ",timerId: "
                    + response.getTimerId());
        } catch (PushClientException e) {
            if (BaiduPushConstants.ERROROPTTYPE) {
                throw e;
            } else {
                e.printStackTrace();
            }
        } catch (PushServerException e) {
            if (BaiduPushConstants.ERROROPTTYPE) {
                throw e;
            } else {
                System.out.println(String.format(
                        "requestId: %d, errorCode: %d, errorMsg: %s",
                        e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
            }
        }
    }
}

这里需要注意一点

安卓与IOS的消息体格式是不一样的
详细消息接口说明请参照官方文档

Android

{  
    "title" : "hello" ,  
    "description": "hello world" // 必选  
    "notification_builder_id": 0, // 可选  
    "notification_basic_style": 7, // 可选  
    "open_type":0, // 可选  
    "url": "http://developer.baidu.com", // 可选  
    "pkg_content":"", // 可选  
    "custom_content":{"key":"value"},  // 自定义 
}

IOS

{
    "aps": {  
         "alert":"Message From Baidu Cloud Push-Service",
         "sound":"",  // 可选
          "badge":0,    // 可选
    },
    "key1":"value1",// 自定义
    "key2":"value2"
}

一些问题

  1. 消息推送延时特别严重,与官方所说的实时并不一致;
  2. 在写Demo过程当中发现,IOS与Android居然是分开的,个人觉得这块对于RD来说应该是透明的,设计不太合理;
  3. IOS偶现消息丢失现象,通过现象推测,个人觉得应该是消息覆盖或消息在还没推送到设备时已经失效;

总结

Created with Raphaël 2.1.0 端 端 云服务 云服务 调用端SDK接口进行绑定; 绑定成功并返回channelId。
Created with Raphaël 2.1.0 端 端 Java服务 Java服务 携带channelId以及设备类型,调用服务端接口与自己的服务进行绑定 绑定成功。
Created with Raphaël 2.1.0 java服务 java服务 云服务 云服务 调用JavaSDK接口并把消息推到云端 推送成功,携带msgId和sendTime返回 推送失败,携带requestId返回

你可能感兴趣的:(Java)