友盟推送_java后台集成和使用

友盟推送_java后台集成和使用

最近应公司业务需求需要完善友盟推送,认真看了官方文档后其实很简单,只需要细心些,然后找个靠谱的移动端配合你接收很快就能推送成功。

友盟官方API地址:https://developer.umeng.com/docs/66632/detail/68343

1、了解常用推送模式和关键字选择对应业务的推送模式:

  • Appkey:应用唯一标识。友盟消息推送服务提供的appkey和友盟统计分析平台使用的同一套appkey。
  • App Master Secret:服务器秘钥,用于服务器端调用API请求时对发送内容做签名验证。
    Device Token:友盟消息推送服务对设备的唯一标识。Android的device_token是44位字符串,iOS的device_token是64位。
  • Alias:开发者自有账号,开发者可以在SDK中调用setAlias(alias, alias_type)接口将alias+alias_type与device_token做绑定,之后开发者就可以根据自有业务逻辑筛选出alias进行消息推送。
  • 单播(unicast):向指定的设备发送消息。
  • 列播(listcast):向指定的一批设备发送消息。
  • 广播(broadcast):向安装该App的所有设备发送消息。
  • 组播(groupcast)::向满足特定条件的设备集合发送消息,例如: “特定版本”、”特定地域”等。
  • 文件播(filecast):开发者将批量的device_token或者alias存放到文件,通过文件ID进行消息发送。
  • 自定义播(customizedcast):开发者通过自有的alias进行推送,可以针对单个或者一批alias进行推送,也可以将alias存放到文件进行发送。-

2、根据本次业务需求我选择了单播和自定义播两种模式,在官方API中各模式参数结构如下:

图中右侧目录是对应各推送模式下的参数释义,仔细看每个参数,然后和移动端商议好双方传送字段名。
友盟推送_java后台集成和使用_第1张图片

3、清楚这些之后,可以动手了:

  • 1、集成官方sdk到后台(官方API底部下载,同上链接;或我的百度云盘: https://pan.baidu.com/s/1yBIJiOBGWXCioPrnogTOUA 提取码: g9yw)
  • 2、用sdk中的示例Demo运行测试集成结果
  • 3、开发对应业务模块
3.1 集成后的目录结构如下:

友盟推送_java后台集成和使用_第2张图片

3.2 集成后运行Demo测试是否集成成功:
{
	"payload": {
		"aps": {
		"badge": 0,
		"alert": "测试标题",
		"sound": "default"
		},
		"message": "{"result":{"arr0":[{"messageTitle":"测试标题","pushContent":"测试内容, ios推送"}]}}"
		},
		"appkey": "5843b2d398f4a9d2804001cf40",
		"type": "unicast",
		"production_mode": "false",
		"device_tokens": "1842d612874fd0f8a15cfaf76ecf4b876c43482cfcd66a96f7cc68f93d3084",
		"policy": {
		"start_time": "2018-10-28 12:23:23"
	}
}
	
//  运行Demo.java 打印出发送内容如上:
//  这里需要注意appkey和appsecret是Android和IOS在UM官方注册提供的。
//  在外网环境移动端才可接收到推送。本地环境会提示IP不在服务器白名单,如下:

{"ret":"FAIL","data":{"error_msg":"IP不在白名单中, 请到网站后台添加您的服务器IP或关闭IP白名单功能","error_code":"2054"}} Failed to send the notification!

4、以单播和自定义播为例附上我的代码:

// IOS单播
// IOS单播---需要用户deviceToken
/**
	* 使用的是sdk的IOSUnicast对象
	* deviceToken可使用测试机的token,移动端获取存入服务器数据库
	* object里面存放是IOS实际取的内容,其它参数是UM原定的可看业务而定,也可以和移动端自定义格式
	* 使用customizedcast.getPostBody()打印推送内容
	* /
public void ios() throws Exception{
	String appkey = "585b2d398f45354a9d2804001cf0";
	String appMasterSecret = "qjhlck6p4brfmn70adjof5434sxmr4ie0lie";	
	//IOS单播
	IOSUnicast unicast = new IOSUnicast(appkey, appMasterSecret);
	JSONObject result = new JSONObject();
	JSONObject custom = new JSONObject();
	JSONObject object = new JSONObject();
	JSONArray array = new JSONArray();
	//object.put("sound", "default");
	object.put("messageTitle", "IOS推送标题"); //IOS推送标题
	object.put("pushContent","推送的内容, ios推送");//推送内容
	array.put(object);
	result.put("arr0", array);
	custom.put("result", result);
	unicast.setDeviceToken("1842d612874fd0f8a1ecf76c2ddea82cfcd66a96f7cc68f93d3084");
	unicast.setAlert("IOS推送标题");
	unicast.setBadge(0);
	unicast.setStartTime("2018-10-28 12:23:23");
	unicast.setSound("default");
	unicast.setTestMode();
	unicast.setCustomizedField("message", custom.toString());
	System.out.println("==iosDeviceToken:"+unicast.getPostBody());
	client.send(unicast);
}
// android自定义播
//android自定义播
/**
	* 使用的是sdk的AndroidCustomizedcast对象
	* object里面存放是android实际取的内容,其它参数是UM原定的可看业务而定
	* setCustomField里面是android实际读取的,也可和移动端自定义数据结构
	* 使用customizedcast.getPostBody()打印推送的内容
	* 此处Alias = persionId || userId
	* /
public void android() throws Exception{
	String key = "585b2bd74543734be459bd001442";
	String secret = "yoknur0n2iuqw543qjjoegyikbkj4aksej2";
	//android自定义播
	AndroidCustomizedcast customizedcast = new AndroidCustomizedcast(key, secret);
	JSONObject result = new JSONObject();
	JSONObject custom = new JSONObject();
	JSONObject object = new JSONObject();
	JSONArray array = new JSONArray();
	object.put("sound", "todayTask");
	object.put("messageTitle", "测试推送标题"); //推送标题
	object.put("pushContent","测试推送的内容, android推送"); //推送内容
	array.put(object);
	result.put("arr0", array);
	custom.put("result", result);
	customizedcast.setCustomField(custom);
	customizedcast.setAlias("1815", "SINA_WEIBO"); // 此处Alias = persionId || userId
	customizedcast.setTicker("测试推送标题");
	customizedcast.setTitle("测试推送标题");
	customizedcast.setText("测试推送的内容, android推送");
	customizedcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);
	customizedcast.setProductionMode();
	System.out.println("发送内容:"+customizedcast.getPostBody());
	client.send(customizedcast);

}
// IOS自定义播
//IOS自定义播---同上Andriod自定义播
public void iosAlias() throws Exception{
	String appkey = "585b2d398f1ddd2804001cf0";
	String appMasterSecret = "qjhlck6p4br89jhn70adjofsxmr4ie0lie";	
	IOSCustomizedcast customizedcast = new IOSCustomizedcast(appkey, appMasterSecret);
	JSONObject result = new JSONObject();
	JSONObject custom = new JSONObject();
	JSONObject object = new JSONObject();
	JSONArray array = new JSONArray();
	//object.put("sound", "default");
	object.put("messageTitle", "测试推送标题"); //推送的标题
	object.put("pushContent","测试推送的内容, ios推送"); //推送的内容
	array.put(object);
	result.put("arr0", array);
	custom.put("result", result);
	customizedcast.setAlias("1815", "IOSAPP"); //此处Alias = persionId || userId
	customizedcast.setAlert("测试推送标题");
	customizedcast.setDescription("customizedcast");
	customizedcast.setBadge(0);
	customizedcast.setStartTime("2018-10-28 12:23:23");
	customizedcast.setSound("default");
	customizedcast.setCustomizedField("message", custom.toString());
	customizedcast.setTestMode();
	System.out.println("==iosAlias:"+customizedcast.getPostBody());
	client.send(customizedcast);
}
// 以上三个示例可在单元测试中运行,查看结果如3.2所示;

5、注意点:

  • 1、UM相关的各参数如appkey、appsercet、deviceToken、alias,存取数据结构和参数名称等,要和移动端约定一致。
  • 2、自定义播使用要注意数据结构,参照官方API的附录所示数据结构,若业务需要也可自定义封装;
  • 3、只有在外网才可与移动端测试是否接收成功,本地会显示白名单错误;(为了测试方便我搭了简单的springboot项目与移动端联调)。

全篇原创纯手码,如有疑问,欢迎指导!

你可能感兴趣的:(第三方sdk集成和使用)