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

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

使用极光推送的目的

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

最理想的解决方案

通知栏显示通知消息(来通知时,最好响一声) 在进入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 文件

android:name="JPUSH_CHANNEL"

android:value="${JPUSH_CHANNEL}" />

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

cn.jpush.api

jpush-client

3.6.1

org.slf4j

slf4j-api

cn.jpush.api

jiguang-common

1.1.11

io.netty

netty-all

4.1.6.Final

compile

com.google.code.gson

gson

2.9.0

(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 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加入自启动,都无法在通知栏显示

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

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: