您的位置:首页 > 编程语言 > Java开发

百度云推送javaSDK demo

2017-03-15 18:31 197 查看

百度云推送巴拉巴拉巴拉

近阶段由于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"
}


一些问题

消息推送延时特别严重,与官方所说的实时并不一致;

在写Demo过程当中发现,IOS与Android居然是分开的,个人觉得这块对于RD来说应该是透明的,设计不太合理;

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.0java服务java服务云服务云服务调用JavaSDK接口并把消息推到云端推送成功,携带msgId和sendTime返回推送失败,携带requestId返回
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息