公司要求做一个服务器端的推送功能,客户端主要是以移动端为主,混合式的app前端,在友盟官网看了下demo,有后台服务器端,前端主要是原生安卓,IOS还有windos.所以根据自身实际能力,按照demo先弄了个原生安卓的前端和java的后台,调试成功。主要测试2个功能:单点推送客户端,推送所有客户端。 本次实践也遇到了很多坑。大致步骤就是先在友盟官网申请账号,然后注册包名,之后会生成一个appkey,message secret,master secret.这3个参数必须和安卓的mainfast当中注册的值是一样的。友盟官网注册的包名必须和客户端生成的包名一致。

1.第一步:新建包名

image.png

2.第二步:包名新建完后记录下appkey,message secret,master secret

image.png

3.第三步:在安卓的mainfast的配置文件中的key以及message_secret必须和网页中生成的一致

image.png

4.第四步:进入消息管理后台,添加测试设备

image.png

image.png

image.png

5.第五步:设置推送消息

image.png

image.png

Response Code : 400 {"ret":"FAIL","data":{"error_code":"2027"}} Failed to send the notification! 2027是签名失败,我以为需要在安卓app打包的时候需要用 于是我进行签名打包,但是依然无作用

image.png

image.png

然后继续找问题,后来发现是master secret和message secret写反了,改过来之后OK了

image.png

6.由于是开发服务器端调用友盟推送,所以必须设置服务器的ip地址,下图告诉你如何查看本机的外网ip地址

image.png

以上都是些设置,介绍一下消息推送所使用的一些场景 后台开启一个定时任务,比如每天晚上10点像全体用户发送推送消息。单点发送可以根据唯一的devicetoken发送消息给用户,因此可以把这个token和数据库中用户名进行绑定,根据用户名查询出token给指定用户发送即可。

其他代码可以通过下面的友盟推送java服务端代码以及友盟推送安卓客户端代码查看,这里主要对其进行了封装,各位可以看下有什么更好的方法封装,可以指出。

YoumengAndroidMain是主调用类

package youmeng;import java.util.HashMap;
import java.util.Map;import pushandroid.YoumengAndroidPush;public class YoumengAndroidMain {public static void main(String[] args) {//1.广播,通过友盟推送给所有人发送信息
//      try {
//          YoumengAndroidMain yoMain = new YoumengAndroidMain();//这个在框架里可以直接用注入
//          Map mapAndroidAll = new HashMap<String, String>();
//          mapAndroidAll.put("appkey", "59e76d978f4a9d6888000113");
//          mapAndroidAll.put("mastersecret", "6darv0eftbwqgzfprg40muvyzfpjrhpe");
//          mapAndroidAll.put("ticker", "2017年10月19日ticker");
//          mapAndroidAll.put("title", "2017年10月19日title");
//          mapAndroidAll.put("text", "2017年10月19日text");
//          Map map = new HashMap<String, String>();
//          map.put("extrafieldkey", "key");
//          map.put("extrafieldvalue", "value");
//          mapAndroidAll.put("extrafield", map);
//          yoMain.sendYoumengAndroidAll(mapAndroidAll);
//      } catch (Exception e) {
//          System.out.println("发送失败");
//      }//2.通过友盟给指定用户推送try {YoumengAndroidMain yoMain = new YoumengAndroidMain();//这个在框架里可以直接用注入Map mapAndroidAll = new HashMap<String, String>();mapAndroidAll.put("appkey", "59e76d978f4a9d6888000113");  mapAndroidAll.put("mastersecret", "6darv0eftbwqgzfprg40muvyzfpjrhpe");   mapAndroidAll.put("devicetoken", "Am5T2vzQBapWZ1bBfdNKKk6-PTBcV2gZPPX8i5V4r9dO");mapAndroidAll.put("ticker", "2017年10月19日ticker");mapAndroidAll.put("title", "2017年10月19日title");mapAndroidAll.put("text", "2017年10月19日text");Map map = new HashMap<String, String>();map.put("extrafieldkey", "key");map.put("extrafieldvalue", "value");mapAndroidAll.put("extrafield", map);yoMain.sendYoumengAndroidUnicast(mapAndroidAll);} catch (Exception e) {System.out.println("发送失败");}}/*** 广播,通过友盟给所有人发送信息,在定时任务中定时执行全员发送* appkey,mastersecret是必传字段,ticker,title,text,extrafieldkey,extrafieldvalue是选填字段*/public void sendYoumengAndroidAll(Map model) throws Exception{YoumengAndroidPush youMain = new YoumengAndroidPush();//到框架里的时候用@Component放到工厂里,用Autoriwed注入youMain.sendAndroidBroadcast(model);}/*** 通过友盟发送给指定用户,这个根据devicetoken给指定的app发送消息,这个devicetoken在给用户注册的时候可以记录下来,存到数据库* 这个token可以跟用户名进行绑定,根据用户名去查找token,这样就可以给指定用户发送消息了*/public void sendYoumengAndroidUnicast(Map model) throws Exception{YoumengAndroidPush youmengPush = new YoumengAndroidPush();youmengPush.sendAndroidUnicast(model);}}

YoumengAndroidPush.java主要通过httpclient将参数封装传到友盟进行推送。

package pushandroid;import java.util.Map;import pushandroid.android.AndroidBroadcast;
import pushandroid.android.AndroidUnicast;public class YoumengAndroidPush {private String timestamp = null;private PushClient client = new PushClient();/*** 像所有的用户推送消息* appkey和mastersecret为必填项,ticker,title,text,extrafield为选填* 群发*/public void sendAndroidBroadcast(Map model) throws Exception {if(null == model)return;if(null == model.get("appkey") || null == model.get("mastersecret"))return;String appkey = (String) model.get("appkey");String masterSecret = (String) model.get("mastersecret");AndroidBroadcast broadcast = new AndroidBroadcast(appkey,masterSecret);String ticker = (String) (model.get("ticker") == null?"测试":model.get("ticker"));String title = (String) (model.get("title")==null?"测试":model.get("title"));String text = (String) (model.get("text")==null?"测试,您好":model.get("text"));broadcast.setTicker(ticker);broadcast.setTitle(title);broadcast.setText(text);broadcast.goAppAfterOpen();broadcast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);broadcast.setProductionMode();if(null != model.get("extrafield")){Map map = (Map) model.get("extrafield");String extrafieldkey = (String) (map.get("extrafieldkey")==null?"":map.get("extrafieldkey"));String extrafieldvalue = (String) (map.get("extrafieldvalue")==null?"":map.get("extrafieldvalue"));broadcast.setExtraField(extrafieldkey, extrafieldvalue);}client.send(broadcast);}/*** 单点发送,通过友盟推送给指定用户,这个token可以跟用户名进行绑定,根据用户名去查找token,这样就可以给指定用户发送消息了* appkey,mastersecret,devicetoken是必传字段,ticker,title,text,extrafieldkey,extrafieldvalue是选填字段*/public void sendAndroidUnicast(Map model) throws Exception {if(null == model)return;if(null == model.get("appkey") || null == model.get("mastersecret") || null==model.get("devicetoken"))return;String appkey = (String) model.get("appkey");String masterSecret = (String) model.get("mastersecret");AndroidUnicast unicast = new AndroidUnicast(appkey,masterSecret);String ticker = (String) (model.get("ticker") == null?"测试":model.get("ticker"));String title = (String) (model.get("title")==null?"测试":model.get("title"));String text = (String) (model.get("text")==null?"测试,您好":model.get("text"));String devicetoken = (String) model.get("devicetoken");//上面已经判断过空的情况unicast.setDeviceToken( devicetoken);unicast.setTicker(ticker);unicast.setTitle(title);unicast.setText(text);unicast.goAppAfterOpen();unicast.setDisplayType(AndroidNotification.DisplayType.NOTIFICATION);unicast.setProductionMode();if(null != model.get("extrafield")){Map map = (Map) model.get("extrafield");String extrafieldkey = (String) (map.get("extrafieldkey")==null?"test":map.get("extrafieldkey"));String extrafieldvalue = (String) (map.get("extrafieldvalue")==null?"helloworld":map.get("extrafieldvalue"));unicast.setExtraField(extrafieldkey, extrafieldvalue);}client.send(unicast);}public static void main(String[] args) {}}

友盟推送java服务端代码

友盟推送安卓客户端代码

作者:听风_与你
链接:http://www.jianshu.com/p/453f2ead8d04
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://www.cnblogs.com/wangting888/p/9701970.html

快速上手友盟推送前后端相关推荐

  1. Android之集成友盟推送功能

    友盟是中国最大的移动开发者服务平台,为移动开发者提供免费的应用统计分析.社交分享.消息推送.自动更新.在线参数.移动推广效果分析.微社区等app开发和运营解决方案. 如何快速集成友盟推送功能: 1. ...

  2. Android集成友盟推送功能

    友盟是中国最大的移动开发者服务平台,为移动开发者提供免费的应用统计分析.社交分享.消息推送.自动更新.在线参数.移动推广效果分析.微社区等app开发和运营解决方案. 如何快速集成友盟推送功能: 1. ...

  3. Android 友盟统计 友盟推送 友盟分享快速集成

    一.友盟统计 1.首先需要到友盟官网 http://mobile.umeng.com/apps注册并且添加新应用,获得Appkey 2.导入SDK,新版SDK支持Android 6.0,http:// ...

  4. 友盟小米收不到推送消息_一个轻量级、可插拔的Android消息推送框架。一键集成推送(极光推送、友盟推送、华为、小米推送等)...

    XPush 一个轻量级.可插拔的Android消息推送框架.一键集成推送(极光推送.友盟推送.华为.小米推送等),提供有效的保活机制,支持推送的拓展,充分解耦推送和业务逻辑,解放你的双手! 在提iss ...

  5. java服务器端集成友盟,Android友盟推送集成

    第一次认真集成推送,碰到了一些问题,记录一下. 首先讲一下实现原理,我们用的是友盟.Android比iOS要麻烦很多. 友盟集成是需要后端配合的,具体就是后端调用友盟的接口,向友盟推送一条消息,然后友 ...

  6. Android 集成友盟推送方案(1)

    我自己继承过FCM(国外app)百度云推送,阿里云推送,小米推送,华为推送,友盟推送,目前这几类推送方式.本文主讲友盟推送方式的集成步骤: 大家可以根据官网网址进行集成:官网如下: https://d ...

  7. 友盟推送集成的常见问题

    友盟消息推送注意事项 SDK集成:http://dev.umeng.com/push/android/integration 常见问题:http://bbs.umeng.com/thread-5911 ...

  8. 友盟推送和阿里云移动推送使用注意事项、不同点比较

    友盟推送和阿里云移动推送,都属于阿里系的产品,在使用上很大一部分还是很相似的,阿里云将移动推送.移动热修复.移动测试.移动数据分析和移动用户反馈集成到了一块,所有的远程依赖也都是集成在一起了,然而友盟 ...

  9. Android集成友盟推送

    这几天一直在做Android 消息推送接入前的准备工作 特此在这里将自己在加载第三方推送时出现的问题以及详细的接入步骤进行记录,已免后者踩坑 目录 为什么选择友盟推送? 接入前的准备: 打开官方示例 ...

最新文章

  1. 原野小年总共拍了多少_开一家羽毛球馆大概需要投资多少钱
  2. 华为诺亚开源贝叶斯优化库:超参数调优河伯、组合优化器CompBO
  3. 新手学MVC----MVC3.0错误 HTTP 404
  4. win10如何关闭Windows Defender安全保护程序
  5. vue标签旋转_vue.js编写移动端页面,检测旋转屏幕,横竖屏。
  6. 嵌入式操作系统内核原理和开发(系统中断仿真)
  7. 页面三个txt加载联动省市县的代码,类似淘宝的收货地址的布局
  8. 【数据挖掘】基于密度的聚类方法 - OPTICS 方法 ( 算法流程 | 算法示例 )
  9. Excel 中VBA脚本的简单应用
  10. 硬核讲习,10名“悟道”核心成员,剖析大模型
  11. 几个城市的公交站查询
  12. 【有利可图网】PS教程:设计制作一颗超逼真的精致透明玻璃球!
  13. OneNote 英文默认字体修改方法(2020.10)
  14. 关于win 右键菜单“新建” 项消失
  15. 当IM和同学录走到一起
  16. ios: Undefined symbols
  17. 智能无障碍轮椅——DX-BT04 2.0蓝牙模块
  18. ROS智能车实现darknet_ros检测物体
  19. 函数 fprintf() 使用说明
  20. 云呐:2022学校固定资产盘点,学校RFID固定资产盘点计划方案

热门文章

  1. web前端网页设计作业_如何学习网页前端设计培训?
  2. 不同服务器数据库之间的数据操作
  3. python 怎么样去txt中提取xml_如何使用python将.txt文件转换成xml文件?
  4. js延时函数_JS 函数的执行时机
  5. br php 配置,无法载入 mcrypt 扩展,br /请检查 PHP 配置终极解决方案
  6. assembly 输出ab中所有数_罗克韦尔(AB)PLC控制器选型(2)-CompactLogix 5370
  7. mysql innodb缓冲池_InnoDB 缓冲池
  8. 循环链表(线性表的链式存储)---C语言版
  9. 上海大学c语言程序设计,上海大学2009-2010年度C语言程序设计秋季学期试卷.doc
  10. Hive 求top N