1.前提

  • 当前最新插件版本:
    cordova-plugin-jcore@1.4.1
    jpush-phonegap-plugin@3.8.2

  • 插件包对应jpush版本为:4.2.8
    jpush-android-4.2.8.jar

目录结构

Cordova Android 7.0.0 开始改变了项目安卓平台的架构。因此集成的时候需要注意。
安卓平台结构分别为:
在这里插入图片描述
可以看到 Cordova 从 7.0.0 项目结构开始和原生 Android 项目保持一致:

将 AndroidManifest.xml,assets,res,libs 资源目录整合到 src 目录下
将 src 放入一个 app 模块,app 模块由单独的 gradle 文件配置

导致的问题

因为项目结构的改变,很多插件也开始修改集成方式以支持 7.0.0 的使用,并在此基础上进行插件更新操作。
而很多针对低版本开发的项目比如 Cordova-Android 6.x,如果无法直接升级项目版本,只能选择集成老版本的插件,得不到最新支持。

解决办法

我们已经知道了 7.0.0 开始结构的主要变化,而低版本和高版本的插件集成无非就是拷贝文件的路径不同罢了,核心代码使用都是同一套。
所以低版本项目想要集成只支持 7.0.0 的新版插件,只要导入插件后,将插件对应文件还原到低版本对应路径便可。

2.集成

我们要在低版本的项目集成此插件该怎么做:

  1. 老版本插件符合要求,直接集成 v3.4.0 以下的插件版本。
  2. 需要集成最新的功能,集成最新版本,自己手动配置。

第一种就不说了,我们直接进行第二种方式集成:

添加安卓平台

ionic cordova platform add android@6.3.0

安装最新插件(2021-11-30)

  • cordova-plugin-jcore@1.4.1
  • jpush-phonegap-plugin@3.8.2
ionic cordova plugin add cordova-plugin-jcore@1.4.1

ionic cordova plugin add jpush-phonegap-plugin@3.8.2 --variable APP_KEY=应用key(在极光官网创建应用的key)

导入最新插件后我们再看项目结构,多出了两个目录,这就是新插件
在这里插入图片描述

迁移文件到对应的目录

  • android/app/src/main/java 下的 cn.jiguang.* 拷贝到 android/src/ 目录下
  • android/jniLibs 下的所有文件拷贝到 android/libs/ 目录下
  • 删除 android/appandroid/jniLibs 目录
    在这里插入图片描述

自动化sh脚本(可选)

ionic cordova platform rm android
rm -rf ./platforms/android
ionic cordova platform add android@6.3.0

cp -r ./platforms/android/jniLibs/* ./platforms/android/libs
rm -rf ./platforms/android/jniLibs/

3. 代码开发

Ionic

安装 @jiguang-ionic/jpush 包,适配 ionic-native:

npm install --save @jiguang-ionic/jpush@1.0.2

然后在 app.module.ts 中增加

// @jiguang-ionic/jpush@1.0.0+
import { JPush } from '@jiguang-ionic/jpush';
...
  providers: [
    ...
    JPush,
    ...
  ]

然后在 app.component.ts 中进行初始化,初步集成成功

constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, jpush: JPush) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      statusBar.styleDefault();
      splashScreen.hide();

      jpush.init();
      jpush.setDebugMode(true);
    });
  }

消息推送的其他方法和功能,参考插件示例/plugins/jpush-phonegap-plugin/ionic/example/src/home

接着可以在极光官网后台进行消息推送测试。
真机和模拟器都能接收到极光通道的消息推送。

补充

为何文中 JniLibs 文件要拷贝到 libs 下呢?

  • 因为 Cordova Android 7.0.0 以下的版本在根目录 build.gradle 中配置了JniLibs 引用路径为 libs。

[参考]:
https://www.jianshu.com/p/23b117ca27a6

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐