极光推送 前端react native 后端springboot 集成Java SDK

我之所以能去花费那么长时间去解决极光推送问题,就是因为这是必须克服的困难。

我项目要用,我项目未来是为了产生经济效益的,所以我抱着必须克服的精神去挑战,所以我一定会赢,只是需要的时间长一些或短一些 

使用极光推送的目的

就是为了让用户第一时间收到交互的消息,增加用户交流的畅快性,而产生用户粘合度

最理想的解决方案

  1. 通知栏显示通知消息(来通知时,最好响一声)

  2. 在进入app内部,提示音响一下,在消息的按钮右上角显示消息数量

=》这两项让用户体验达到非常好的效果

一、快速开始:下载 demo ,测试消息推送

具体步骤,在极光推送文档有,我不赘述,只留下值得注意的问题。

注意:小米手机由于有 MIUI保护,所以测试极光推送时,看不到消息,需要关闭MIUI

具体步骤:设置--》更多设置--》开发者选项--》关闭MIUI优化(在开发者选项里面菜单的最后面)

1. 创建推送消息

2. 在手机接收到极光推送的消息

二、 react native作为前端,Java作为服务端 完成推送服务

解决这个问题的逻辑思路:
1. 首先需要在登陆极光的官网,进入企业应用运营平台,创建App(切记保存一下你填写的包名)

2. 之后react native项目先集成极光的jpush-react-native插件,

3. 先通过企业应用运营平台创建推送,等到react native 项目可以接受到推送的消息

4. 再创建springboot项目 集成极光的java SDK,进行消息推送。

1.  在企业应用运营平台创建App

2. 在react native项目集成极光插件jpush-react-native

官方文档上有Android 和 IOS,而我使用的是react native,官网没有,不过极光有React Native版本插件 jpush-react-native,具体配置看github上面的文档。下面代码重点步骤

(1)android/app/build.gradle 文件

android {
      defaultConfig {
          //在此替换你的应用包名(就是上面在运营平台创建应用时,第二步骤让你填写的应用包名)
          applicationId "yourApplicationId"      
          ...
          manifestPlaceholders = [
                  JPUSH_APPKEY: "yourAppKey",     //在此替换你的APPKey
                  JPUSH_CHANNEL: "yourChannel"    //在此替换你的channel
          ]
      }
  }

(2)android/app/src/main/AndroidManifest.xml 文件

<meta-data
	android:name="JPUSH_CHANNEL"
	android:value="${JPUSH_CHANNEL}" />
<meta-data
	android:name="JPUSH_APPKEY"
	android:value="${JPUSH_APPKEY}" />    

3. 企业应用运营平台创建推送,测试跑通

(1)前端react native 可以这样简单的写成如下这样

componentDidMount() {
    //初始化
    JPush.init({ appKey: '你自己的', channel: 'default', production: 1});

    //设置别名
    JPush.setAlias({sequence: new Date().getTime(), alias: "teng"});

    //连接状态
    this.connectListener = result => {
        console.log("连接状态:" + JSON.stringify(result))
    };
    JPush.addConnectEventListener(this.connectListener);

    //通知开关是否开启
    JPush.isNotificationEnabled((result) => {
      console.log('当前应用的通知开关是否开启', result);
    });

    //通知回调(有消息,就会被推送到这个回调函数里面)
    this.notificationListener = result => {
        console.log("notificationListener:" + JSON.stringify(result))
    };
    JPush.addNotificationListener(this.notificationListener);
 }

(2)企业应用运营平台创建,一个别名为teng 的消息推送

(3)成功推送的显示

企业应用运营平台会显示推送成功

 react native 接收到了消息

4. 在springboot项目里面集成极光Java SDK 

在极光推送文档 -> REST API -> 服务端SDK里面 进入文档

我集成的方式,是自己导入相关依赖,自己写极光推送服务,好处就是,不用引入过多的依赖包

解决这个问题的逻辑思路

1. 导入相关依赖

2. 写JPushUtil工具类

3. 前端发起请求,服务端调用推送服务,前端接收到消息

(1)导入相关依赖

跟官网上的有些不同 --- 我的 springboot version 是2.7.0  和 jdk 1.8

1. 我没用任何log4或slf4j的包,因为容易导致 Class path contains multiple SLF4J bindings错误

2. jpush-client 是根据需要加的

3. gson我用的版本较高,因为用官网上的2.3版本会报错Error creating bean with name 'gsonBuilder' defined in class path resource

<dependency>
			<groupId>cn.jpush.api</groupId>
			<artifactId>jpush-client</artifactId>
			<version>3.6.1</version>
			<exclusions>
				<exclusion>
					<groupId>org.slf4j</groupId>
					<artifactId>slf4j-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

		<dependency>
			<groupId>cn.jpush.api</groupId>
			<artifactId>jiguang-common</artifactId>
			<version>1.1.11</version>
		</dependency>
		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty-all</artifactId>
			<version>4.1.6.Final</version>
			<scope>compile</scope>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>2.9.0</version>
</dependency>

(2)JPshUtil工具类

public class JPushUtil {
    public static JPushClient jPushClient;
    private static String master_secret="c4bfec35e99577b42e234221";
    private static String app_key="b711ec6bda065fd6dabe0b20";

    @PostConstruct
    private void init(){
        log.info("极光推送服务进行初始化");
        jPushClient = new JPushClient(master_secret, app_key);
    }


    //构建推送对象:所有平台,推送目标是别名为 "1"
    public static void notificationWithAlias() {
        try {
            HashMap<String,String> map = new HashMap();
            map.put("name","滕禹鑫");
            String noticeUserId = "1";
            PushResult pushResult = jPushClient.sendAndroidNotificationWithAlias("标题", "输入内容", map, noticeUserId);
            log.info(String.valueOf(pushResult));
        } catch (APIConnectionException e) {
            e.printStackTrace();
        } catch (APIRequestException e) {
            e.printStackTrace();
        }
    }
}

(3)前端发起请求,获得推送的数据

三、实际开发中遇到的问题

1. 应用任何时候都可以接收到推送的消息

当关闭进程时,是无法进行消息推送的,直到你再次使用App,才会接受到推送消息,如何克服这个困难,最简单的方法就是,引导用户将APP添加到自启动。这样就跟微信一样了,即使杀死进程,它也能接收到消息。

2. 如何在通知栏上显示推送的消息

极光推送自定义的消息,是不支持直接在通知栏展示的,我使用 sendAndroidNotificationWithAlias方法,可以直接在通知栏显示。但我用红米Note11真机调试时,发现启动MIUI优化后,即使我将app加入自启动,都无法在通知栏显示

=》我认为可能,需要通过厂商通道,来发消息推送,才可能解决这个问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tengyuxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值