基于SpringBoot搭建极光推送 Android 和 IOS 消息的简单Demo - Go语言中文社区

基于SpringBoot搭建极光推送 Android 和 IOS 消息的简单Demo


简要介绍

    极光推送(JPush)是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上,让开发者积极地保持与用户的连接,从而提高用户活跃度、提高应用的留存率。

概念1:消息 和 通知

  1. 通知:发送后会在系统通知栏收到展现,同时响铃或振动提醒用户。 
  2. 消息:以透传的形式传递给客户端,无显示,发送后不会在系统通知栏展现,第三方应用后需要开发者写代码才能看到。

概念2:alias 和 tag

  1. alias:别名,用于单发消息,点对点方式
  2. tag:标签,相当于群发

搭建场景

1,注册极光账号,官网https://www.jiguang.cn/accounts/register登录后进到极光推送功能

2,创建一个应用

 3,创建应用后,获取到AppKey和Master Secret,后面会用到这两个

后台代码推送其实也就是推送给极光的消息推送服务器,再由服务器推送给设备,这就是需要key和密钥的原因了

 

4,设置极光推送设置,这里这配置android,ios好像还需要配置证书什么的

5,配置Android推送:这里需要注意,需要下载的是apk包,下载zip包的话需要自己打成apk包

6,手机安装上面的官方apk包

7,运行上面那个软件,大概长这样,点击第一个按钮,初始化一下

备注:停止恢复推送功能: 当点击停止推送 "stopPush" 按钮时, 推送手机端就不会再接收推送内容, 当点击恢复推送时, 会将期间积攒的所有推送内容一次性推送到手机中

至此,已经搭建好场景了

 

集成到springboot

1,springboot项目pom引入依赖

        <!-- 极光推送 begin -->
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jpush-client</artifactId>
            <version>3.3.10</version>
        </dependency>
        <dependency>
            <groupId>cn.jpush.api</groupId>
            <artifactId>jiguang-common</artifactId>
            <version>1.1.4</version>
        </dependency>
        <!-- 极光推送 end -->

2,创建JPushUtil类,该类中给出了使用与Android和ios的方法,以及两者都适用的方法。

根据实际需要自行封装一些方法方便调用,将创建的AppKey和Master Secret替换一下,或者写到yml里

官方:https://github.com/jpush/jpush-api-java-client

/**
 * 极光推送工具类
 * Created by DUYU on 2019/1/17.
 */
public class JPushUtil {
 
    // 设置好账号的app_key和masterSecret是必须的
    private static String APP_KEY = "fcc67*************ba80d76";
    private static String MASTER_SECRET = "a4c45*************cc0";
 
 
    // 极光推送>>Android
    //Map<String, String> parm是我自己传过来的参数,可以自定义参数
    public static void jpushAndroid(Map<String, String> parm) {
 
        // 创建JPushClient(极光推送的实例)
        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
        // 推送的关键,构造一个payload
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(Platform.android()) // 指定android平台的用户
                .setAudience(Audience.all()) // 你项目中的所有用户
//                .setAudience(Audience.alias(parm.get("alias"))) // 设置别名发送,单发,点对点方式
                //.setAudience(Audience.tag("tag1")) // 设置按标签发送,相当于群发
//                .setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用户
 
                .setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) // 发送内容
                .setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())
                // apnProduction指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式) 不用设置也没关系
                // TimeToLive 两个小时的缓存时间  
                .setMessage(Message.content(parm.get("msg"))) // 自定义信息
                .build();
 
        try {
            PushResult pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
 
    // 极光推送>>ios
    // Map<String, String> parm是我自己传过来的参数,可以自定义参数
    public static  void jpushIOS(Map<String, String> parm) {
 
        // 创建JPushClient
        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(Platform.ios()) // ios平台的用户
                .setAudience(Audience.all()) // 所有用户
                //.setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用户
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder()
                                .setAlert(parm.get("msg"))
                                .setBadge(+1)
                                .setSound("happy") // 这里是设置提示音(更多可以去官网看看)
                                .addExtras(parm)
                                .build())
                        .build())
                .setOptions(Options.newBuilder().setApnsProduction(false).build())
                .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build()) // 自定义信息
                .build();
 
        try {
            PushResult pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
 
 
 
    // 极光推送>>All所有平台
    public static void jpushAll(Map<String, String> parm) {
  
        // 创建JPushClient
        JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
        // 创建option
        PushPayload payload = PushPayload.newBuilder()
                .setPlatform(Platform.all())  // 所有平台的用户
                .setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用户
                .setNotification(Notification.newBuilder()
                        .addPlatformNotification(IosNotification.newBuilder() // 发送ios
                                .setAlert(parm.get("msg")) // 消息体
                                .setBadge(+1)
                                .setSound("happy") // ios提示音
                                .addExtras(parm) // 附加参数
                                .build())
                        .addPlatformNotification(AndroidNotification.newBuilder() // 发送android
                                .addExtras(parm) // 附加参数
                                .setAlert(parm.get("msg")) // 消息体
                                .build())
                        .build())
                .setOptions(Options.newBuilder().setApnsProduction(true).build()) // 指定开发环境 true为生产模式 false 为测试模式 (android不区分模式,ios区分模式)
                .setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build()) // 自定义信息
                .build();
        try {
            PushResult pu = jpushClient.sendPush(payload);
            System.out.println(pu.toString());
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
}

3,测试

public class Test {
    public static void main(String[] args) {
        // 设置推送参数
        // 这里可以自定义推送参数了
        Map<String, String> parm = new HashMap<String, String>();
        // 设置提示信息,内容是文章标题
        parm.put("msg","你知道对我最重要的东西是什么吗?是这句话的第一个字");
        parm.put("title","某电商类APP");
        parm.put("alias","alias");
        JPushUtil.jpushAndroid(parm);
    }
}

4,查看极光平台

5,手机端 

 

简析

    当采用的是标签或者别名进行推送,需要在在手机APP端(后端也行)进行标签和别名设置,一般是在用户登录之后就设置好,这样只要用户登录,它的绑定别名或者标签就可以保存到极光服务器,而我们推送时,指定这个别名或者标签,就能将信息推送到对应用户的手机上。

  其实我们发起推送请求,只是将信息发送到了极光服务器之上,这个信息有一个保存时限,默认一天,只要用户使用手机APP登录系统,极光服务器就会将信息自动推送到对应别名或者标签的手机上,由此可见,信息并非由我们后台直接推送到手机,而是通过极光服务器这个中转站,而这正式极光的工作。

注意:这里告知一个技巧:

  1. 在别名设置的时候:其实直接将用户ID设置为别名即可,既方便,又安全,不用再去想办法生成一个唯一的串来进行标识,甚至需要在后台数据库中用户表中新增字段。
  2. 在标签设置的时候:一般是将一类用户设置为一个标签,然后实现给某类用户群发

 

官方文档

极光官方文档:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#platform

极光 JPush Java SDK:https://github.com/jpush/jpush-api-java-client

 


参考来源于:

https://blog.csdn.net/vbirdbest/article/details/88971977#commentBox

https://blog.csdn.net/duyusean/article/details/86581475

https://blog.csdn.net/jay_1989/article/details/82771886

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_41888813/article/details/101534866
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-05-30 11:04:50
  • 阅读 ( 1195 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢