首先,百度android推送,这个时候会出来一堆关于推送的信息:html
一、极光推送java
二、信鸽推送android
三、融云推送git
四、亚马逊AWS推送github
等等数据库
这里我选择了一个程序猿们比较经常使用的极光推送,好,先上效果图:后端
左边是Java后端,集成了JPush,简单写了一个jsp页面,供咱们推送自定义消息,右边是咱们的客户端,用来接收JPush的推送。若是对java后端不知道着手写的同窗请参考个人另外三篇博客:api
好了,来看咱们今天的demo:
一、首先客户端就一个登陆界面和一个首页,登陆以后再给该用户推送
二、服务端也有一个界面,用来发送自定义推送,并且咱们给它设定一个筛选机制,这个筛选机制咱们在下面讲数据库的时候再说
关于客户端极光推送的集成,在这里我说几点:
一、登陆的时候咱们须要设置极光推送的别名alias和标签tag,以便咱们能接收到JPush的推送,alias和tag是极光推送须要的,别名alias,官网上给的解释是为安装了应用程序的用户,取个别名来标识。之后给该用户Push消息时,就能够用此别名来指定。每一个用户只能指定一个别名;标签tag,官网上给的解释是为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发Push消息。可为每一个用户打多个标签。
btnLogin.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
//一、登陆——>请求服务器
//二、登陆成功以后,设置极光推送
setJPush();
}
});
private void setJPush(){
String alias;
String tags;
Set<String> 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<String> tagSet) {
switch (code) {
case 0:
Log.i("TAG", "设置别名成功");
break;
default:
Log.i("TAG", "设置别名失败");
break;
}
}
};
复制代码
二、由于别名要求惟一性,因此别名通常是你手机的UID,若是你不想在你下线以后还能收到推送,那么再你下线的时候将别名设置为空 关于别名的,详情请参考极光推送别名与标签API
客户端的集成,官网讲的很详细,在这里我就不细说了,详情请参考极光推送 Android SDK 概述
####这里咱们看看服务端的集成: 一、数据库表的建立:
在这里咱们有6个字段,咱们来看后面三个字段的含义,因为咱们模拟的是商场会员积分推送的场景,因此count表示用户的积分,咱们前面的演示也是根据积分来发推送通知的;而后alias和tag是极光推送须要的,上文咱们已经解释过alias和tag的含义了。
而后咱们来看推送的服务端,首先新建一个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_SECRET和APP_KEY是在极光推送后台你建立应用的时候会生成的,咱们这里是根据别名来推送的,你还能够根据标签来推送。
而后咱们来看**buildByAlias()**这个方法:
/**
* 构建推送的对象:全部对象
*
* @param alias 推送目标:别名为alias
* @param title 推送标题
* @param msg 推送内容
* @return
*/
public static PushPayload buildByAlias(String alias, String title, String msg) {
Map<String, String> 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失败了(以前没有传过,懂的朋友麻烦教教我),因此服务端的我就放到百度云上了