flutter集成极光推送google play版本

首先是正常极光推送的使用
1.在pubspec.yaml中引入库:jpush_flutter: ^2.4.2
2.创建极光推送工具类

class JPushUtil{
  static initJPush(){
    JPush().addEventHandler(
      onReceiveNotification: (Map message) async{
        //推送通知栏新消息
        print('new message:$message');
      },
      onOpenNotification: (Map message) async{
      //点击通知
        print('onOpenNotification:$message');
        setBadge(0);
      },
      onNotifyMessageUnShow: (Map message) async{
      //不显示消息时回调
        setBadge(0);
      },
    );

    JPush().applyPushAuthority(
        NotificationSettingsIOS(sound: true,alert: true,badge: true)
    );

    JPush().setup(
      appKey: 'jpush appkey',
      channel: 'developer-default',
      production: false,
      debug: true
    );
  }

  //设置tags
  static setTags(List<String> tags){
    JPush().setTags(tags);
  }

  //设置别名
  static setAlias(String alias){
    JPush().setAlias(alias);
  }

  //删除别名
  static deleteAlias(){
    JPush().deleteAlias();
  }

  //清空tags
  static cleanTags(){
    JPush().cleanTags();
  }

  //设置角标
  static setBadge(int badge){
    JPush().setBadge(badge);
  }
}

3.配置app下的build.gradle
在build.gradle的android>defaultConfig中增加配置 manifestPlaceholders

android {
    compileSdkVersion 33

    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }

    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }

    lintOptions {
        disable 'InvalidPackage'
    }

    defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId ""
        minSdkVersion 20
        targetSdkVersion 31
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        multiDexEnabled true
        ndk{
            //选择要添加的对应 cpu 类型的 .so 库。

            //armeabiv-v7a: 第7代及以上的 ARM 处理器。2011年15月以后的生产的大部分Android设三=三很少设备,三星 Galaxy S6是其中之一。
            // arm64-v8a: 第8代、64位ARM处理器
            // armeabi: 第5代、第6代的ARM处理器早期的手机用的比较多。
            // x86: 平板、模拟器用得比较多。
            // x86 64: 64位的平板。
            //mips:MIPS32r1 及更高版本(使用硬浮点,并且假设 CPU:FPU 时钟比率为 2:1 以获取最大兼容性。 不提供 micromips 或 MIPS16。)
            //mips64:MIPS64r6

            //设置支持的S0库架构“armeabi","armeabi-v7a","arm64-v8a","x86""x86
            //abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a'
            abiFilters 'armeabi-v7a','arm64-v8a'
        }
      /*  addManifestPlaceholders([
                TENCENT_APP_ID: "1109119450"
        ])*/

        manifestPlaceholders = [
                TENCENT_APP_ID: "",

                JPUSH_PKGNAME : "在极光推送配置的包名",
                JPUSH_APPKEY : "", // NOTE: JPush 上注册的包名对应的 Appkey.
                JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.

                XIAOMI_APPID : "MI-appid",
                XIAOMI_APPKEY : "MI-appkey",
//                XIAOMI_APPSECRET : "MI-appsecert",
                OPPO_APPID : "OP-appid",
                OPPO_APPKEY : "OP-appkey",
                OPPO_APPSECRET : "OP-appsecert",
                VIVO_APPID : "",
                VIVO_APPKEY : "",
//                VIVO_APPSECRET : "",
//                HUAWEI_APPID : "",
//                HUAWEI_APPKEY : "",
//                HUAWEI_APPSECRET : "",

        ]
    }

    signingConfigs {
        release {
            storeFile file("ati.jks")
            storePassword ""
            keyAlias "ati"
            keyPassword ""
        }

        debug {
            storeFile file("ati.jks")
            storePassword ""
            keyAlias "ati"
            keyPassword ""
        }
    }

    buildTypes {
        release {
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.release
            // 关闭代码混淆
            minifyEnabled true
            shrinkResources true
            ndk {
                abiFilters "armeabi-v7a"
                abiFilters "armeabi"
                abiFilters "arm64-v8a"
            }
        }

        debug {
            signingConfig signingConfigs.debug
        }
    }
	//当在tools:node="remove"无法删除权限时使用,编译构建流程中,把这些权限删除
    project.afterEvaluate {
        project.android.applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.processResources.doFirst { pm ->
                    String manifestPath = output.processResources.manifestFile
                    def manifestContent = file(manifestPath).getText()
                    manifestContent = manifestContent.replace('<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>', '')
                    println("manifestContent:" + manifestContent)
                    file(manifestPath).write(manifestContent)
                }
            }
        }
    }
}

4.使用:在需要初始化推送的页面调用JPushUtil.initJPush();

接下来是google play版极光推送
1.google上架普通版jpush会被拒,收到的邮件提示被拒的原因出在jpush sdk上,而我们在极光管方文档并不能找到相关的解决办法
在这里插入图片描述

2.找到极光sdk下载位置,当中有 Google Play 版本下载选项
在这里插入图片描述
3.下载Google Play 版本sdk前查看jpush_flutter: ^2.4.2库中sdk的版本,下载的sdk版本需要与flutter中引入的库中的sdk版本一致,因为极光sdk中的jpush、jcore有版本对应关系,经过测试不对应的版本无法接收到推送。(flutter库中的sdk版本可以在本地缓存文件中查看,圈中的是改动前,jpush_flutter: ^2.4.2库中的sdk版本)
在这里插入图片描述
4.将下载的sdk解压,复制libs中的jar包
在这里插入图片描述
将jar包放入 flutter plugin包 jpush_flutter-2.4.2的 android》libs文件夹下(没有libs文件夹就新建一个,新建后在没刷新出该文件,可以从电脑中jpush_flutter-2.4.2库的本地目录中找到)

在这里插入图片描述
在jpush_flutter-2.4.2的 android 》build.gradle文件中修改配置

dependencies {
    implementation 'cn.jiguang.sdk:jpush:4.9.0'
    //    implementation 'cn.jiguang.sdk:jcore:4.1.0'
     compile files('libs/jcore-android-4.1.0-google_play.jar')
}

在这里插入图片描述
由于将jpush和jcore包都改为Google版本国内IP无法接收到推送(测试中接收不到推送)所以只更改了jcore包的配置,如果只使用google play版可以两个包一起改。
https://community.jiguang.cn/article/372890
修改后测试能够接收到推送(极光推送5.0会自动加载jcore jar包,所以为尝试这个版本怎么兼容)
5.打包送审,Google play通过。
jpush-android-4.9.0-google-play

6.对极光推送5.0以上的包,例如5.4.0版本的补充:引入implementation 'cn.jiguang.sdk:jpush:5.4.0'时,在这个包内部引入了cn.jiguang.sdk:jcore:4.7.0,所以再引入compile files('libs/jcore-android-4.7.0-google_play.jar')时将会出现引用重复项的报错。

//例如====报错信息(它提示重复的jcore)
* What went wrong:
Execution failed for task ':app:checkDebugDuplicateClasses'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckDuplicatesRunnable
> Duplicate class cn.jiguang.a.a found in modules jetified-jcore-4.7.0-runtime (cn.jiguang.sdk:jcore:4.7.0) and jetified-jcore-android-4.7.0-google_play (jcore-android-4.7.0-google_play.jar)

解决方法:
在以上方法的基础上,引入5.0以上的包时使用排除jar包的代码。

在极光推送jar包的build.gradle文件中修改

//引入cn.jiguang.sdk:jpush:5.4.0,排除其中的jcore
    implementation('cn.jiguang.sdk:jpush:5.4.0') {
        exclude module: 'jcore'
    }
   compile files('libs/jcore-android-4.7.0-google_play.jar')

在这里插入图片描述
该方法在极光推送的开发文档中有
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值