说说极光推送那些事

作者: 24K纯帅豆 | 来源:发表于2016-11-01 15:08 被阅读3421次

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

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

1、极光推送

2、信鸽推送

3、融云推送

4、亚马逊AWS推送

等等

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

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

android开发怎么少的了后端(上)

android开发怎么少的了后端(中)

android开发怎么少的了后端(下)

好了,来看我们今天的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<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;
        }
    }
};

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

客户端的集成,官网讲的很详细,在这里我就不细说了,详情请参考极光推送 Android SDK 概述

这里我们看看服务端的集成:

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<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失败了(之前没有传过,懂的朋友麻烦教教我),所以服务端的我就放到百度云上了

点我下载客户端

点我下载服务端

公众号:Android技术经验分享

相关文章

  • 说说极光推送那些事

    序言:今天看打开腾讯体育的时候,还没完全打开就收到了一条推送,然后对推送这个东西就产生了兴趣,因为之前没有弄过推送...

  • 极光推送集成Module中遇到的坑

    序言:在上次做完极光推送的实验说说极光推送那些事后,已然被推送的魅力所吸引,近期打算做一个仿朋友圈的功能,想要结合...

  • 关于JPush(极光推送)那些事

    iOS不倒,博客不停JPush的文档说明挺不错,非常详细!为什么还要写这篇简书?主要是为了记录自己开发过程,也给一...

  • 极光推送

    极光推送视频地址,非常详细的极光推送视频 极光推送

  • Thinkphp之极光推送

    先说说为啥选用极光推送作为第三方的推送服务。首先我所了解的推送产品有信鸽、个推、极光,之前用到过个推,感觉还不错,...

  • 我和极光那些事 | 推送服务哪家强?

    我和极光那些事 | 推送“服务”哪家强? I.推送服务是个啥? 截止写文章结束时,该词条在*度*科上已经经过...

  • 极光推送

    极光推送 tagprivate void initJpush() {//TODO 极光推送// JPushInte...

  • 极光推送进行远程推送

    借阅:极光推送进行远程推送 怎么使用极光推送进行远程推送 在极光官网注册极光推送创建一个应用在应用配置中导入两个证...

  • ios极光推送

    第一次使用极光推送,在这里把极光推送的步骤说一下,省的以后再次用到极光推送的时候,给忘了,其实,极光推送不难...

  • 【知识总结】(2)远程推送

    推送SDK:极光推送 后台点击推送: iOS 10 以下收到推送点击触发 iOS 10 以上触发: 极光推送中使用...

网友评论

  • c24c596f672c:大神,发送失败(errcode:1011,errmsg:没有满足条件的推送目标)怎么破啊教教我吧
  • c24c596f672c:亲在么?报错这个error":{"code":1011,"message":"cannot find user by this audience"}}怎么解决啊
  • 2ca8523e79f3::smile:
    24K纯帅豆:@瞎看什么 :smiley:
  • 2b63261585ac:一个手机登录两个应用号,推送会错乱,能解决吗
    24K纯帅豆:@简书6958 可以解决的啊!在你下线之后你设置别名为空就好了,登录的时候重新设置别名
    2b63261585ac:@24K纯帅豆 对呀
    24K纯帅豆:@简书6958 你是指一台设备上登录两个不同的帐号吗?
  • 极小光:非常感谢,请问能够把本文转发到极光社区,帮助更多的朋友理解极光推送么?
    24K纯帅豆:@极小光 可以的哦 :blush:

本文标题:说说极光推送那些事

本文链接:https://www.haomeiwen.com/subject/cvtputtx.html