个推+mui+html5 +java完成消息推送

几个月前写的,个推官方的例子真是难,找了好久才拼出来这几个方法,本文包含java调用个推SDK的消息推送和app方向的接收消息。

package geti;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import com.gexin.fastjson.JSONObject;
import com.gexin.rp.sdk.base.IPushResult;
import com.gexin.rp.sdk.base.impl.SingleMessage;
import com.gexin.rp.sdk.base.impl.Target;
import com.gexin.rp.sdk.base.payload.APNPayload;
import com.gexin.rp.sdk.base.payload.MultiMedia;
import com.gexin.rp.sdk.http.IGtPush;
import com.gexin.rp.sdk.template.LinkTemplate;
import com.gexin.rp.sdk.template.NotificationTemplate;
import com.gexin.rp.sdk.template.TransmissionTemplate;
import com.gexin.rp.sdk.template.style.Style0;
import com.gexin.rp.sdk.base.impl.AppMessage;


public class NewPushApp {


		public static String appId = "--";
	    public static String appKey = "--";
	    public static String masterSecret = "--";

	// 定义常量, appId、appKey、masterSecret 采用本文档 "第二步 获取访问凭证 "中获得的应用配置
	private static String url = "https://api.getui.com/apiex.htm";

	public static void main(String[] args) throws IOException {
		test2();
	}

	/**
	 * 推送上方通知栏消息 返回桌面应用可以接收
	 */
	public static void test1() {
		IGtPush push = new IGtPush(url, appKey, masterSecret);

		// 新建消息类型 单独推送给用户采用SingleMessage
		SingleMessage singleMessage = new SingleMessage();

		// 定义"点击链接打开通知模板",并设置标题、内容、链接
		LinkTemplate template = new LinkTemplate();
		template.setAppId(appId);
		template.setAppkey(appKey);
		template.setTitle("重要通知!!!!");
		template.setText("测试消息");
		template.setUrl("http://getui.com");

		// 设置接收信息的cid集合
		List<String> appIds = new ArrayList<String>();
		appIds.add(appId);

		// 定义"AppMessage"类型消息对象,设置消息内容模板、发送的目标App列表、是否支持离线发送、以及离线消息有效期(单位毫秒)
		AppMessage message = new AppMessage();
		message.setData(template);
		// 设置接收信息的cid
		message.setAppIdList(appIds);
		message.setOffline(true);
		message.setOfflineExpireTime(1000 * 600);
		Target target = new Target();
		target.setAppId(appId);
		 target.setClientId("--");
		// 推送接口
		// pushMessageToSingle==单个用户/ pushMessageToList==一批用户/
		// pushMessageToApp==应用中的全部用户。
		singleMessage.setData(template);
		IPushResult result = push.pushMessageToSingle(singleMessage, target);
		String response = result.getResponse().toString();
		System.out.println("返回值:" + response);
	}

	/**
	 * 用户无法察觉 透传消息
	 */
	public static void test2() {
		IGtPush push = new IGtPush(url, appKey, masterSecret);

		// 新建消息类型 单独推送给用户采用SingleMessage
		SingleMessage singleMessage = new SingleMessage();

		// 新建一个推送模版,已透传模板为例,透传顾名思义到达客户端后不做任何操作,由app选择处理
		// 其他原生模板类型种类很多,支持各种客户端展现效果,包括弹框下载、打开链接等等。模板里也可以设置响铃震动等效果。
		TransmissionTemplate template = new TransmissionTemplate();
		template.setAppId(appId);
		template.setAppkey(appKey);
		template.setTransmissionContent("透传的内容!!!");
		// 收到消息是否立即启动应用: 1为立即启动,2则广播等待客户端自启动
		template.setTransmissionType(2);

		// 模板设置好后塞进message里,同时可以配置这条message是否支持离线,以及过期时间等,单位毫秒
		//若设置离线,个推推送系统会为当前不在线的用户缓存离线消息,个推现在支持为每个用户缓存多条离线消息,离线时间最多三天,三天后会删除该条离线消息
		singleMessage.setData(template);
		singleMessage.setOffline(true);
		singleMessage.setOfflineExpireTime(1800 * 1000);

		// 新建一个推送目标,填入appid和clientId
		// 单推情况下只能设置一个推送目标,toList群推时,可以设置多个目标,目前建议一批设置50个左右。
		Target target = new Target();
		target.setAppId(appId);
		target.setClientId("--");
		// 调用IGtPush实例的toSingle接口,参数就是上面我们配置的message和target
		// 推送接口
		// pushMessageToSingle==单个用户/ pushMessageToList==一批用户/
		// pushMessageToApp==应用中的全部用户。
		IPushResult result = push.pushMessageToSingle(singleMessage, target);
		String response = result.getResponse().toString();
		System.out.println("返回值:" + response);
	}

	/**
	 * 透传传参
	 */
	public static void test3() {
		IGtPush push = new IGtPush(url, appKey, masterSecret);

		// 新建消息类型 单独推送给用户采用SingleMessage
		SingleMessage singleMessage = new SingleMessage();

		TransmissionTemplate template = new TransmissionTemplate();
		template.setAppId(appId);
		template.setAppkey(appKey);
		JSONObject jo = new JSONObject();
		jo.put("AAA", "aaa");
		jo.put("BBB", "bbb");
		jo.put("CCC", "ccc");
		template.setTransmissionContent(jo.toString());
		template.setTransmissionType(2);
		APNPayload payload = new APNPayload();
		// 在已有数字基础上加1显示,设置为-1时,在已有数字上减1显示,设置为数字时,显示指定数字
		payload.setAutoBadge("+1");
		payload.setContentAvailable(1);
		payload.setSound("default");
		payload.setCategory("$由客户端定义");

		// 简单模式APNPayload.SimpleMsg
		payload.setAlertMsg(new APNPayload.SimpleAlertMsg("hello"));

		// 字典模式使用APNPayload.DictionaryAlertMsg
		// payload.setAlertMsg(getDictionaryAlertMsg());

		// 添加多媒体资源
		payload
				.addMultiMedia(new MultiMedia().setResType(
						MultiMedia.MediaType.video).setResUrl(
						"--")
						.setOnlyWifi(true));

		// 需要使用IOS语音推送,请使用VoIPPayload代替APNPayload
		// VoIPPayload payload = new VoIPPayload();
		// JSONObject jo = new JSONObject();
		// jo.put("key1","value1");
		// payload.setVoIPPayload(jo.toString());
		//
		template.setAPNInfo(payload);
		singleMessage.setData(template);
		// 新建一个推送目标,填入appid和clientId
		// 单推情况下只能设置一个推送目标,toList群推时,可以设置多个目标,目前建议一批设置50个左右。
		Target target = new Target();
		target.setAppId(appId);
		target.setClientId("--");

		IPushResult result = push.pushMessageToSingle(singleMessage, target);
		String response = result.getResponse().toString();
		System.out.println("返回值:" + response);
	}

	/**
	 * 有透传内容 有标题 点击打开应用
	 * 
	 * @return
	 */
	public static void test4() {
		IGtPush push = new IGtPush(url, appKey, masterSecret);
		// 新建消息类型 单独推送给用户采用SingleMessage
		SingleMessage singleMessage = new SingleMessage();

		NotificationTemplate template = new NotificationTemplate();
		// 设置APPID与APPKEY
		template.setAppId(appId);
		template.setAppkey(appKey);
		// 透传消息设置,1为强制启动应用,客户端接收到消息后就会立即启动应用;2为等待应用启动
		template.setTransmissionType(1);
		
		JSONObject jo = new JSONObject();
		jo.put("AAA", "aba");
		jo.put("BBB", "bab");
		jo.put("CCC", "ccc");
		//template.setTransmissionContent(jo.toJSONString());
		template.setTransmissionContent(jo.toString());
		// 设置定时展示时间
		// template.setDuration("2015-01-16 11:40:00", "2015-01-16 12:24:00");

		Style0 style = new Style0();
		// 设置通知栏标题与内容
		style.setTitle("展示标题");
		style.setText("展示内容");
		// 配置通知栏图标
		style.setLogo("icon.png");
		// 配置通知栏网络图标
		style.setLogoUrl("");
		// 设置通知是否响铃,震动,或者可清除
		style.setRing(true);
		style.setVibrate(true);
		style.setClearable(true);
		template.setStyle(style);
		singleMessage.setData(template);

		// 新建一个推送目标,填入appid和clientId
		// 单推情况下只能设置一个推送目标,toList群推时,可以设置多个目标,目前建议一批设置50个左右。
		Target target = new Target();
		target.setAppId(appId);
		target.setClientId("--");
		IPushResult result = push.pushMessageToSingle(singleMessage, target);
		String response = result.getResponse().toString();
		System.out.println("返回值:" + response);
	}

}

下面是接收消息,真是巨坑,官方后台封装了格式,取消息的时候必须转来转去才能取到,改一个字母都要重新打包一次才知道效果。这个是安卓端的,苹果应该是少了双引号那一步,忘记了。

// 监听在线消息事件  推送通知的
			plus.push.addEventListener("receive", function(msg) {
				//先将Object对象转换成字符串
				var payload=JSON.stringify(msg.payload);
				//去除字符串中的     \ 
				var p1=payload.replace(/[\\]/g,'');
				//去除开始和结束位置的双引号
				var p2=p1.substring(1,p1.length-1);
				//把处理好的字符串转换成JSON对象
				var jsonPayload=JSON.parse(p2);
				//可以获取到值了
				alert("AAA==="+jsonPayload.AAA);
				alert("BBB==="+jsonPayload.BBB);
				
				var vInfo = plus.push.getClientInfo();
				alert(vInfo);
				var vInfoData = JSON.stringify(vInfo);
				alert(vInfoData);
				if(msg.aps) { // Apple APNS message
					alert("接收到在线APNS消息:");
				} else {
					alert("接收到在线透传消息:");
				}
			}, false);



猜你喜欢

转载自blog.csdn.net/New_Yao/article/details/81003475
今日推荐