Flutter对接极光认证的注意事项

签名

​ 极光的后台只能配置一个应用签名,如果应用的debug签名和release签名不同,那么就只能选择其中一个填写到极光的后台,这种情况会导致要么debug(开发调试)无法使用一键登录,要么release无法使用。

​ 我目前采用的做法是将debug和release共用一个签名,可以规避上述问题,但是由此会产生什么问题,目前尚未可知。

​ 修改android/app/bulid.gradleandroid节点,仅保留signingConfigs的一个子节点,让buildTypesreleasedebug共用signingCOnfigs.config

​ 其中buildTypes.release还有一些额外的配置,例如minifyEnableduseProguard等是开启混淆所需要的配置,混淆是必须使用的配置,将在下文说明。

android {
		...

		signingConfigs {
        config {
              keyAlias 'androiddebugkey'
              keyPassword 'android'
              storePassword 'android'
              storeFile file('debug.keystore')
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.config
            shrinkResources false

            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            signingConfig signingConfigs.config
        }
    }
    
    ...
}

混淆

​ 集成完极光的认证后,iOS可以正常使用,但是安卓只能在开发调试时有效,build release打完生产包后,认证会出现6001的错误信息,经过与极光工作人员的沟通之后,找到了解决方法。

​ 方法很简单,那就是开启混淆,并且根据极光安卓的配置文档配置混淆内容。

配置混淆

创建 /android/app/proguard-rules.pro 文件,并添加以下规则:

#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

-dontoptimize
-dontpreverify

-dontwarn cn.jpush.**
-keep class cn.jpush.** { *; }
-dontwarn cn.jiguang.**
-keep class cn.jiguang.** { *; }

-dontwarn cn.com.chinatelecom.**
-keep class cn.com.chinatelecom.** { *; }
-dontwarn com.ct.**
-keep class com.ct.** { *; }
-dontwarn a.a.**
-keep class a.a.** { *; }
-dontwarn com.cmic.**
-keep class com.cmic.** { *; }
-dontwarn com.unicom.**
-keep class com.unicom.** { *; }
-dontwarn com.sdk.**
-keep class com.sdk.** { *; }

-dontwarn com.sdk.**
-keep class com.sdk.** { *; }

切记上述内容需要全部添加。

开启混淆

打开 /android/app/build.gradle 文件,定位到 buildTypes 块。

release 配置中将 minifyEnableduseProguard 设为 true,再将混淆文件指向上一步创建的文件。

android {

    ...

    buildTypes {

        release {
            signingConfig signingConfigs.config

            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        }
    }
    
    ...
}

proguard-android.txt文件由系统自动创建,不需要手动创建。

获取log

​ 向极光工作人员反馈问题时,最好带上出现问题时的log文件。

​ 开发调试时很容易获取,直接在Android Studio的log处就能拿到,但是打完生产包后如何获取日志?这个问题困扰了我许久,最后在极光的社区中找到了答案。

​ 详情可以看这篇文章:https://community.jiguang.cn/article/98251,这里只简单讲下安卓release后获取日志的方法。

​ 首先需要在代码中开启debug模式:

jverify.setDebugMode(true);

​ 打包后在手机上进行安装,然后执行如下步骤:

1. 电脑通过USB连接手机
2. 进入终端(windows可以使用cmd),执行`adb logcat -f /sdcard/logjverify.txt`
3. 如果 adb 命令没用,说明你的环境变量里面没有配置 Android 环境变量
4. 在手机上打开app
5. `ctrl+c`退出adb,进入磁盘目录 `cd ~/Demo/logs`,如果没有的话,自己创建一个目录并进入
6. 执行`adb pull /sdcard/logjverify.txt`,将日志文件拉取到磁盘目录中

​ 这时候就可以在~/Demo/logs目录中看到logjverify.txt文件。


本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!

Docker安装ELK 上一篇
Flutter 极光推送对接指南 下一篇