[Push]百度消息推送的应用

鄢翰藻
2023-12-01

推送技术是指通过客户端与服务器端建立长链接,客户端可以接收由服务器端不定时发送的消息,在客户机/服务器的应用程序中,推送技术能够向客户机传送数据而无需其发出请求,例如发送电子邮件。相比较而言,万维网却是基于拉技术(Pull Technology),因此客户机浏览器必须事先向网页发出请求,所需信息才能被传送过来。

手机推送服务的原理很简单,就是通过建立一条手机与服务器的连接链路,当有消息需要发送到手机时,通过此链路发送即可

/**
  * 初始化百度推送
 * @return
 */
public static BaiduPushClient initPushClient(){
	String apiKey=""; 
	String secretKey=""; //需要去百度云推送平台申请
	PushKeyPair pair = new PushKeyPair(apiKey, secretKey); //设置两个属性
	BaiduPushClient pushClient = new BaiduPushClient(pair, BaiduPushConstants.CHANNEL_REST_URL);//实例化BaiduPushClient对象

	pushClient.setChannelLogHandler(new YunLogHandler() {
		@Override
		public void onHandle(YunLogEvent arg0) {
		System.out.println(arg0.getMessage());
		}
	});
	return pushClient;
}

/**
 * 消息推送
 * @return
 */
public static int pushOnlyMessage(String content,int pushType,int devType){
	BaiduPushClient pushClient=initPushClient();    //得到百度推送
	PushMsgToSingleDeviceRequest request=new PushMsgToSingleDeviceRequest();
	request.addMsgExpires(new Integer(3600))	//消息有效时间
	request.addDeviceType(devType);  		// devType => 1: web 2: pc 3:android 4:ios 5:wp
	request.addChannelId("");	 		// 广播ID
	request.addMessageType(pushType);		//
	request.addMessage(content);
	try {
		PushMsgToSingleDeviceResponse response=pushClient.pushMsgToSingleDevice(request);
		System.out.println("推送成功"+response.getMsgId());
	} catch (PushClientException e) {
		e.printStackTrace();
	} catch (PushServerException e) {
		e.printStackTrace();
	}
	return 0;
}


实例代码:

//向安卓移动端推送
public String sendAndroidMessage(String messageTitle, String messageContent, String[] channelIds)throws PushClientException,PushServerException {
    	
    	//1. 创建PushKeyPair用于app的合法身份认证apikey和secretKey可在应用详情中获取
	PushKeyPair pair = new PushKeyPair(apiKeyForAndorid, secretKeyForAndorid);
	// 2. 创建BaiduPushClient,访问SDK接口
	BaiduPushClient pushClient = new BaiduPushClient(pair,BaiduPushConstants.CHANNEL_REST_URL);
	// 3. 注册YunLogHandler,获取本次请求的交互信息
	pushClient.setChannelLogHandler(new YunLogHandler() {
		@Override
		public void onHandle(YunLogEvent event) {
			log.debug(event.getMessage());
		}
	});
	try {
		// 4. 设置请求参数,创建请求实例
		//创建Android通知
		JSONObject notification = new JSONObject();
		notification.put("title", messageTitle);		//标题
		notification.put("description",messageContent);		//内容
		notification.put("notification_builder_id", 0);		//客户端自定义通知样式,如果没有设置默认为0
		notification.put("notification_basic_style", 4);	//只有notification_builder_id为0时才有效,才需要设置,
		notification.put("open_type", 2);			//点击通知后的行为(打开Url:1; 自定义行为:2:其它值则默认打开应用;)
		notification.put("pkg_content", "#Intent;launchFlags=0x10000000;"
					      + "component=com.gasj.cp/.ui.MessageInfoActivity;"
					      + "S.descrip="+messageContent+";"
					      + "B.ispush=true;S.title="+messageTitle+";end");			
		PushBatchUniMsgRequest request = new PushBatchUniMsgRequest()
					.addChannelIds(channelIds)			//频道
					.addMsgExpires(new Integer(3600))		//设置消息的有效时间,单位秒,默认3600*5.
					.addMessageType(1)				//通知类型 0 透传,1通知
					.addMessage(notification.toString())
					.addDeviceType(3)				//客户端类型 3,安卓 4 ios
					.addTopicId("BaiduPush");			// 设置类别主题			        
		// 5. 执行Http请求
		PushBatchUniMsgResponse response = pushClient.pushBatchUniMsg(request);		 
		// 6. Http请求返回值解析
		log.info(String.format("msgId: %s, sendTime: %d",response.getMsgId(), response.getSendTime()));
		result="已发送";
	} catch (PushClientException e) {
		log.error(e.getMessage());
		result="发送失败";
	} catch (PushServerException e) {
		log.error(String.format("requestId: %d, errorCode: %d, errorMessage: %s",e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
		result="发送失败";
	}
	return result;
}






 类似资料: