最近给目前做的项目添加了一个新的功能,给客户端推送消息
我用的是百度做的云推送,具体介绍请参考:http://developer.baidu.com/
贴上我稍微改造了一下的服务器端推送工具类
/**
* android单播
* @param messageCenter
* @param userBean
* @return
*/
public static boolean singleAndroidPush(MessageCenter messageCenter,UserBean userBean) {
boolean flag = true;
// 1. 设置developer平台的ApiKey/SecretKey
String apiKey = Const.BAIDU_APP_KEY;
String secretKey = Const.BAIDU_APP_SECRET;
ChannelKeyPair pair = new ChannelKeyPair(apiKey, secretKey);
// 2. 创建BaiduChannelClient对象实例
BaiduChannelClient channelClient = new BaiduChannelClient(pair);
// 3. 若要了解交互细节,请注册YunLogHandler类
channelClient.setChannelLogHandler(new YunLogHandler() {
@Override
public void onHandle(YunLogEvent event) {
// TODO Auto-generated method stub
System.out.println(event.getMessage());
}
});
try {
// 4. 创建请求类对象
PushUnicastMessageRequest request = new PushUnicastMessageRequest();
request.setDeviceType(3); // device_type => 1: web 2: pc 3:android 4:ios 5:wp
request.setChannelId(Long.getLong(messageCenter.getAppChannelID()));
request.setUserId(messageCenter.getAppUserID());
// 若要显示通知,
request.setMessageType(1); // 默认是0
// 此格式不可更改
String message = "{\"title\":\""+messageCenter.getTitle()+"\",\"description\":\""+messageCenter.getContent()+"\"}";
System.out.println("android推送消息:"+message);
request.setMessage(message);
// 5. 调用pushMessage接口
PushUnicastMessageResponse response = channelClient.pushUnicastMessage(request);
// 6. 认证推送成功
Assert.assertEquals(1, response.getSuccessAmount());
} catch (ChannelClientException e) {
// 处理客户端错误异常
flag = false;
e.printStackTrace();
} catch (ChannelServerException e) {
// 处理服务端错误异常
flag = false;
System.out.println(
String.format("request_id: %d, error_code: %d, error_message: %s" ,
e.getRequestId(), e.getErrorCode(), e.getErrorMsg()
)
);
}finally{
return flag;
}
}
至于客户端接受推送的程序可以参考百度给出的案例
到目前的使用心得,推送偶尔会有延迟,其他还好!