博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说极光推送那些事
阅读量:5876 次
发布时间:2019-06-19

本文共 3728 字,大约阅读时间需要 12 分钟。

序言:今天看打开腾讯体育的时候,还没完全打开就收到了一条推送,然后对推送这个东西就产生了兴趣,因为之前没有弄过推送,所以就想着写一篇博客来记录一下学习推送的过程。

首先,百度android推送,这个时候会出来一堆关于推送的信息:

1、

2、

3、

4、

等等

这里我选择了一个程序猿们比较常用的极光推送,好,先上效果图:

左边是Java后端,集成了JPush,简单写了一个jsp页面,供我们推送自定义消息,右边是我们的客户端,用来接收JPush的推送。如果对java后端不知道着手写的同学请参考我的另外三篇博客:

好了,来看我们今天的demo:

1、首先客户端就一个登录界面和一个首页,登录之后再给该用户推送

2、服务端也有一个界面,用来发送自定义推送,而且我们给它设定一个筛选机制,这个筛选机制我们在下面讲数据库的时候再说

关于客户端极光推送的集成,在这里我说几点:

1、登录的时候我们需要设置极光推送的别名alias和标签tag,以便我们能接收到JPush的推送,aliastag是极光推送需要的,别名alias,官网上给的解释是为安装了应用程序的用户,取个别名来标识。以后给该用户Push消息时,就可以用此别名来指定。每个用户只能指定一个别名;标签tag,官网上给的解释是为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发Push消息。可为每个用户打多个标签。

btnLogin.setOnClickListener(new View.OnClickListener(){	@Override   public void onClick(View v) {   	//1、登录——>请求服务器   	//2、登录成功之后,设置极光推送   	setJPush();   }});private void setJPush(){	String alias;	String tags;	Set
tagSet=new HashSet<>(Arrays.asList(tags)); //给极光推送设置标签和别名 JPushInterface.setAliasAndTags(this, alias, tagSet, tagAliasCallback);}复制代码

然后就是一个极光推送设置别名和标签的回调:

//极光服务器设置别名是否成功的回调private final TagAliasCallback tagAliasCallback = new TagAliasCallback() {    @Override    public void gotResult(int code, String alias, Set
tagSet) { switch (code) { case 0: Log.i("TAG", "设置别名成功"); break; default: Log.i("TAG", "设置别名失败"); break; } }};复制代码

2、因为别名要求唯一性,所以别名一般是你手机的UID,如果你不想在你下线之后还能收到推送,那么再你下线的时候将别名设置为空 关于别名的,详情请参考

客户端的集成,官网讲的很详细,在这里我就不细说了,详情请参考

####这里我们看看服务端的集成: 1、数据库表的创建:

在这里我们有6个字段,我们来看后面三个字段的含义,由于我们模拟的是商场会员积分推送的场景,所以count表示用户的积分,我们前面的演示也是根据积分来发推送通知的;然后aliastag是极光推送需要的,上文我们已经解释过aliastag的含义了。

然后我们来看推送的服务端,首先新建一个Servlet,供我们推送用:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	response.setHeader("Content-Type", "text/html;charset=UTF-8");	request.setCharacterEncoding("UTF-8");	int count = Integer.valueOf(request.getParameter("count"));	String message = request.getParameter("message");	MyDBTools myDBTools = new MyDBTools();	ResultSet rs = null;	if (count > -1 && !message.isEmpty()) {		// 从数据库中获取所有的积分大于count的用户,从而进行推送消息		myDBTools.openConnect();		rs = myDBTools.getUserCountInfo(count);		try {			while (rs.next()) {				// 获取这个用户的别名				String alias = rs.getString("alias");				// 告诉极光服务器,这个用户需要推送				PushUtils.sendPushMessage(alias, "自定义JPush通知", message);			}		} catch (SQLException e) {			e.printStackTrace();		}	}	myDBTools.closeConnect();}复制代码

然后是我写的一个PushUtil的一个辅助类,我们先来看**sendPushMessage()**这个方法:

/** * 发送推送 * @param alias 别名 * @param title 推送标题 * @param msg 推送消息 * @return */public static PushResult sendPushMessage(String alias, String title, String msg) {	JPushClient jClient = new JPushClient(MASTER_SECRET, APP_KEY);	// 构建推送的对象	PushPayload pushPayload = buildByAlias(alias, title, msg);	try {		PushResult pr = jClient.sendPush(pushPayload);		System.out.println("PushResult===" + pr);		return pr;	} catch (APIConnectionException | APIRequestException e) {		e.printStackTrace();	}	return null;}复制代码

注:上述的MASTER_SECRETAPP_KEY是在极光推送后台你创建应用的时候会生成的,我们这里是根据别名来推送的,你还可以根据标签来推送。

然后我们来看**buildByAlias()**这个方法:

/** * 构建推送的对象:所有对象 *  * @param alias 推送目标:别名为alias * @param title 推送标题 * @param msg 推送内容 * @return */public static PushPayload buildByAlias(String alias, String title, String msg) {	Map
map = new HashMap<>(); map.put("url", "http://www.baidu.com"); return PushPayload.newBuilder().setPlatform(Platform.all()).setAudience(Audience.alias(alias)) .setNotification(Notification.android(title, msg, map)).build();}复制代码

注:上述中的map集合是你推送时候的附属消息,像我这上面的附属消息就是传递一个url,等你获取通知的时候可以获取到这个url,然后打开通知之后可以打开这个url

好了,推送的客户端和服务端就讲到这里了,详细的代码我已经传到GitHub上了,由于Eclipse上传GitHub失败了(之前没有传过,懂的朋友麻烦教教我),所以服务端的我就放到百度云上了

转载地址:http://qdkix.baihongyu.com/

你可能感兴趣的文章
CENTOS流水账0002.1[MySQL安装]
查看>>
为什么Eclipse中 按 F3 无效
查看>>
Nginx+tomcat(window)配置
查看>>
spring mybatis 框架集成之applicationContext.xml配置方法
查看>>
rhel 6.0 yum 安装装7zip压缩解压缩软件
查看>>
LNMP——php-fpm
查看>>
sth about initial project with heroku(simple)
查看>>
添加第三方的APK的俩种方法
查看>>
DataTable.Select方法(String,String)
查看>>
C++代码问题(segment fault)
查看>>
TCP的连接和释放
查看>>
垃圾收集算法(jvm之三)
查看>>
读、写其他应用的SharedPreferences
查看>>
Android官方提供的支持不同屏幕大小的全部方法
查看>>
Android 编程下的代码混淆
查看>>
分布式任务队列-celery
查看>>
执行shell的时候开启调试模式
查看>>
[ASP.NET Debugging BuggyBits读书笔记] Lab05 Crash
查看>>
安装科学计算库anaconda并配置远程访问jupyter-notebook
查看>>
基于Thrift的java和PHP互相调用范例
查看>>