原文:https://blog.csdn.net/Athena072213/article/details/83414743

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

友盟官方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中各模式参数结构如下:

图中右侧目录是对应各推送模式下的参数释义,仔细看每个参数,然后和移动端商议好双方传送字段名。
在这里插入图片描述
3、清楚这些之后,可以动手了:

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

3.1 集成后的目录结构如下:

在这里插入图片描述
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!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

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);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

// 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);

}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

// 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);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

// 以上三个示例可在单元测试中运行,查看结果如3.2所示;
5、注意点:

1、UM相关的各参数如appkey、appsercet、deviceToken、alias,存取数据结构和参数名称等,要和移动端约定一致。
2、自定义播使用要注意数据结构,参照官方API的附录所示数据结构,若业务需要也可自定义封装;
3、只有在外网才可与移动端测试是否接收成功,本地会显示白名单错误;(为了测试方便我搭了简单的springboot项目与移动端联调)。
---------------------
作者:Athenalsy
来源:CSDN
原文:https://blog.csdn.net/Athena072213/article/details/83414743
版权声明:本文为博主原创文章,转载请附上博文链接!

java 集成友盟推送的更多相关文章

  1. iOS app 集成友盟推送问题

    之前做app推送主要是集成友盟SDK,在程序获取deviceToken时,老是提示如下错误: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用 ...

  2. iOS集成友盟推送

    之前有写过利用Python自己写一个推送服务器, 今天说下如果集成友盟的推送服务 在这之前我们需要做一些准备动作 #1. 注册一个App ID #2. Enable Push Notification ...

  3. 使用极光/友盟推送,APP进程杀死后为什么收不到推送(转)

    为什么会存在这样的 问题,刚开始的时候我也搞不清楚,之前用极光的时候杀死程序后也会收到推送,但最近重新再去集成时就完全不好使了,这我就纳闷了,虽然Google在高版本上的android上面不建议线程守 ...

  4. AppDelegate减负之常用三方封装 - 友盟推送篇

    之前分享过集成友盟推送的方法, 需要的朋友可以查看一下链接: http://www.cnblogs.com/zhouxihi/p/6533058.html 一般开发中我们比较多使用的三方有友盟推送, ...

  5. 极光推送和友盟推送,ios端和安卓端的后端调试设置

    我是最后端的,这两天搞了一个app项目,前端安卓使用友盟很方便,调试比较顺利,然后ios就遇到各种问题了,证书.发送成功推送不成功,测试时用的TestMode(),ios上架之后就必须用product ...

  6. 友盟推送 .NET (C#) 服务端 SDK rest api 调用库

    友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...

  7. 友盟推送里面的Alias怎么用?可以理解成账号吗?

    友盟推送里面的Alias怎么用?可以理解成账号吗? 我们的App有自己的账号体系的,想在每次用户登陆的时候,给用户发一个欢迎消息. 看了一下友盟推送,里面有一个概念叫做Alias(别名),但是官方文档 ...

  8. 友盟推送SDK集成测试、常见问题以及注意事项总结

    最近为了解决公司APP在一些手机出现的推送问题重新集成了最新版的友盟推送SDK,花费了几天时间终于把集成和测试工作完成,最终在华为,Nexus,三星,小米,HTC,魅族等10多部手机上测试并达到了预想 ...

  9. iOS 友盟推送,应用内推送启动图推送闪动黑屏,插屏推送方法报错

    以前都是用的极光推送,应公司需求要求使用友盟推送,为了以后是有分享都适用,,, 友盟推送文档,下载demo 感觉比极光用着要简单顺手 一切就绪后,开始发送消息测试,,,,,搞了半天没有发过来消息 原来 ...

随机推荐

  1. Vbox共享文件夹不显示了

    博主之前装的虚拟机没啥问题,按部就班,打开“我的电脑”可以看到主机上的共享文件夹,最近重装了一波,各种问题就来了,包括共享文件夹设置好后,看不见了. 介绍比较麻烦的方案,就是打开“我的电脑”,在地址栏 ...

  2. qt之菜单栏的创建

    很久之前学习的Qt菜单栏的消息响应,昨天发现忘记了,今天又拿起来了,记一下笔记: 就像平常我们常用的软件一样,每个程序基本都有菜单栏,在菜单栏中有很多功能性的按钮,点击这些按钮会弹出有对应的菜单功能, ...

  3. sql生成随机不重复字符串 可指定长度

    存储过程: create procedure dbo.GetRandStr () output) AS BEGIN ), ), @ss varchar DECLARE @I INTEGER, @cou ...

  4. 安装python的jupyter notebook工具

    jupyter notebook是一个通过网页运行python的工具 支持分段的python运行,并能直观的查看结果 支持多python环境运行,需要加装(conda) 安装步骤 1.安装python ...

  5. UITableView取消cell选中状态关于deselectRowAtIndexPath

    有没有遇到过,导航+UITableView,在push,back回来之后,当前cell仍然是选中的状态. 当然,解决办法简单,添加一句[tableView deselectRowAtIndexPath ...

  6. python中的find、rfind、index、rindex

    find()从左向右寻找子序列的位置,如存在多个相同子序列只返回第一个查找到的位置,如果子序列不存在返回-1 rfind()从右向左寻找子序列的位置..... index()从左向右寻找子序列的位置, ...

  7. springMVC源码学习之addFlashAttribute源码分析

    本文主要从falshMap初始化,存,取,消毁来进行源码分析,springmvc版本4.3.18.关于使用及验证请参考另一篇jsp取addFlashAttribute值深入理解即springMVC发r ...

  8. 利用STM32CubeMX生成HID双向通讯工程

    使用开发板为正点原子ministm32 现在我们先使用HID descriptor Tool来生成我们需要的hid的 保存使用选择.H // D:\usb资料\HID\MSDEV\Projects\t ...

  9. 排查bug的步骤

    原创文章,欢迎阅读,禁止转载. bug预防C/C++代码发布前的检查:检查有没有低级错误,可用cppcheck (bug预防是指在写程序的时候,bug没出现,积极的进行预防,减少.包括良好的编码风格. ...

  10. delphi 连接DBF

    delphi 连接DBF 使用 DBF 文件时,文件夹表示数据库,单个 DBF 文件表示表 1.BDE,已淘汰 table1.Databasename:=dbdir;//设置库路径table1.Tab ...