我之所以能去花费那么长时间去解决极光推送问题,就是因为这是必须克服的困难。
我项目要用,我项目未来是为了产生经济效益的,所以我抱着必须克服的精神去挑战,所以我一定会赢,只是需要的时间长一些或短一些
使用极光推送的目的
就是为了让用户第一时间收到交互的消息,增加用户交流的畅快性,而产生用户粘合度
最理想的解决方案
通知栏显示通知消息(来通知时,最好响一声) 在进入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 (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.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加入自启动,都无法在通知栏显示 =》我认为可能,需要通过厂商通道,来发消息推送,才可能解决这个问题。 精彩内容
发表评论