【Flutter】友盟智能认证Android Flutter插件集成
目录
- 介绍
- 入手
- 问题:报错600017, 提示Appkey 密钥不对。
介绍
友盟官方的文档不齐全, 且文档和Demo均未与SDK版本同步。
目前SDK版本已经出到 umeng-common-9.1.3 (2020年9月8日), 而文档和Demo还停留在2.x版本。
另外, 友盟基础库9.x版本需要使用 umeng-crash-armeabi 库, 而该库使用了 .so 文件, 在某些版本或者平台上直接使用会报错。
本文基于官方Demo, 友盟基础库2.x版本, 集成为Flutter插件。
入手
- IDE: Android Studio 4.0.
首先创建Flutter插件项目, 在Flutter项目中 Open for Editing in Android Studio, 等待项目构建完毕, 先运行一次。
然后选择目录结构为 Project files, 可以看到好几个Android 模块, 选择非example目录下的模块。
在src同级目录创建libs, 将 fastjson-1.2.60.jar, umeng-common-2.2.1.jar, umeng-uverify-1.3.1.aar 复制进来。
umeng-uverify 的包是 arr 格式的, 看到其他教程引入arr都说的很复杂, 实际上跟 jar 包一样, 直接引入就行。
- 在上文所述的模块中的 build gradle文件下添加以下包就行。
dependencies {implementation "com.android.support:appcompat-v7:28.0.0"implementation files('libs/fastjson-1.2.60.jar')implementation files('libs/umeng-uverify-1.3.1.aar')implementation files('libs/umeng-common-2.2.1.jar')
}
- 然后在插件中初始化和调用一键登录,在插件 onAttachedToEngine 中初始化认证包,也可以通过MethodCall 在Flutter中手动调用。
@Override@CallSuperpublic void onAttachedToEngine() {Log.i(TAG, "onAttachedToEngine");UMConfigure.init(flutterPluginBinding.getApplicationContext(), "你的APP KEY","Umeng",UMConfigure.DEVICE_TYPE_PHONE,null);}
- 在自动创建的Plugin文件中, 正常调用一键登录就行。
调用需要 Context 对象, Flutter官方插件 SDK 说接口 ActivityAware 可以拿到Activity, 但实际上目前的Flutter版本, 插件入口实现的 FlutterPlugin 对象中, onAttachedToEngine 方法传入的 flutterPluginBinding 就可以拿到 Context 上下文对象。
@Overridepublic void onAttachedToEngine(@NonNull FlutterPluginBinding flutterPluginBinding) {Log.i(TAG, "onAttachedToEngine");/*** 获取UMVerifyHelper实例, 设置秘钥信息*/mTokenListener = new UMTokenResultListener() {...};umVerifyHelper = UMVerifyHelper.getInstance(flutterPluginBinding.getApplicationContext(), mTokenListener);umVerifyHelper.setAuthSDKInfo("你的密钥");umVerifyHelper.setAuthListener(mTokenListener);//如果支持, 发起一键登录。if (umVerifyHelper.checkEnvAvailable()){umVerifyHelper.getLoginToken(flutterPluginBinding.getApplicationContext(), 5000);}}
- 返回消息到Flutter
因为调用友盟返回数据的形式是回调方法的原因,设计通过EventChannel返回数据到Flutter,但也因为这个原因,实际上回调并不在UI线程中执行,直接EventSink返回会报错。
解决方法:
- 使用广播机制传递消息到UI线程
// 暂无实现
- 使用Activity对象调用线程发送
// 该ACtivity通过实现ActivityAware接口拿到
activity.runOnUiThread(new Runnable() {@Overridepublic void run() {umVerifyHelper.hideLoginLoading();umVerifyHelper.quitLoginPage();UMRet umRet = null;try {umRet = JSON.parseObject(ret, UMRet.class);} catch (Exception e) {e.printStackTrace();return;}if (umRet == null){eventSink.success(FlutterResult.create(PluginConstant.FLUTTER.CODE_GET_TOKEN_ERROR, "获取Token失败,未知错误").toJsonStr());return;}eventSink.success(FlutterResult.create(PluginConstant.FLUTTER.CODE_GET_TOKEN_ERROR, msg.toString()).toJsonStr());}});}
- 配置签名
切换到 example 下的 app 模块, 在 android 中配置:
在测试时 flutter 插件本身是有自己的报名的,在正式环境中集成为 flutter 插件给 flutter 应用使用, 应使用 flutter 应用的签名。
android {signingConfigs {debug{keyAlias 'xxx'keyPassword 'xxx'storeFile file('xxx.jks')storePassword ''v1SigningEnabled truev2SigningEnabled true}release {keyAlias 'xxx'keyPassword 'xxx'storeFile file('xxx.jks')storePassword ''v1SigningEnabled truev2SigningEnabled true}}buildTypes {release {debuggable falseminifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'zipAlignEnabled falsemultiDexEnabled truesigningConfig signingConfigs.release}debug{minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'zipAlignEnabled falsemultiDexEnabled true}}
}
问题:报错600017, 提示Appkey 密钥不对。
首先排除填写错误, 在填写正确的情况下, 友盟是需要验证包名和签名的正确性和一致性的.
根据项目包名, 也就是安装app后应用的唯一标识,在Flutter插件中,, 通过 Android Studio 进行签名,默认使用app module的就行,包名也在该module下(签名过程不再详述), 签名后, 使用 keytool 获取签名的Md5。
keytool -v -list -keystore 你的签名文件
输入命令后会要求输入密码, 输入签名的密码, 可以查看到签名和MD5(以下已打码)。
> keytool -v -list -keystore .\xxx.jks
输入密钥库口令:
密钥库类型: jks
密钥库提供方: SUN您的密钥库包含 1 个条目别名: xxx
创建日期: 2020-9-7
条目类型: PrivateKeyEntry
证书链长度: 1
证书[1]:
所有者: CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xxx
发布者: CN=xxx, OU=xxx, O=xxx, L=xxx, ST=xxx, C=xxx
序列号: 1d7f10da
有效期为 Mon Sep 07 18:00:02 CST 2020 至 Fri Sep 01 18:00:02 CST 2045
证书指纹:MD5: xx:xx:FE:AB:6E:36:EA:xx:xx:xx:xx:xx:xx:64:5D:05SHA1: xx:xx:A0:6F:63:53:BC:B0:72:75:12:5E:63:27:3C:75:10:C0:DD:A8SHA256: xx:xx:xx:xx:xx:A0:1A:0D:4D:EA:EC:01:F4:2C:1B:88:6B:A1:5A:AF:87:97:96:7E:B3:60:D8:A8:C0:49:F7:E7
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 84 60 68 FB 16 xx xx xx 34 53 BB 02 C4 4C 12 BF .`h..+.64S...L..
0010: 1B 1C 16 16 ....
]
]*******************************************
*******************************************
使用获取到的MD5去友盟工作台, 智能认证, 创建Android应用, 创建方案。
- 要保证应用包名, 签名, Appkey, 密钥 四个数据都要对应,否则会报错。
- 注意SDK的错误码(坑),以及预取号成功返回的是运营商字符串而不是JSON字符串
【Flutter】友盟智能认证Android Flutter插件集成相关推荐
- android umeng,GitHub - umeng/umeng_community_android: 友盟微社区Android SDK开源项目
友盟微社区 Android SDK 该项目是友盟微社区的开源部分代码,根目录下的工程为集成友盟微社区SDK的demo,umeng_comm_android_ui为友盟微社区开源UI代码,里面包含了友盟 ...
- flutter友盟分享_flutter中友盟插件开发使用
CSDN-专业IT技术社区-登录blog.csdn.net 开发插件要具备的知识:Flutter 与 原生 Android iOS 双向通信 Flutter通过MethodChannel实现Flut ...
- flutter友盟分享_Flutter中使用友盟统计
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 可以用来加载 Html 页面,以实现 Android 中 WebView 或者 是 iOS 中的 UIWeb ...
- flutter友盟分享_集成推送那点事-友盟/Mob-Flutter/FCM
第 97 次推文 LZ-Says 我们都曾羡慕别人,却忘了,我们也曾是别人羡慕的我们. 推荐直接拉到底阅读原文- 前言 最近的任务呐,真是让人蛋碎一地,各种被锤. 不过比较 nice 的是,推送凑齐了 ...
- flutter友盟分享_flutter友盟统计之界面统计
2020.10.20日更新: 最近发现了一种更好的方法,就是使用RouteAware监听路由,下面是实现代码 初始化: RouteObserver需要申明为全局属性并作为参数传入MaterialApp ...
- flutter友盟分享_Flutter 集成友盟 深坑
对于友盟在Flutter上的集成,官方虽然给出了sdk(https://developer.umeng.com/sdk/flutter),但是不好使,是真的不好使,不信的可以去试试,安卓费劲调好以后, ...
- 友盟统计集成_友盟+智能超链U-Link,助力开发者拥有更极致的分享体验_互联网_科技快报...
各个App原本就像大海中的一座座岛屿,虽然都生活在移动的海洋中(Android系统或iOS)但彼此并无再多往来.随着用户需求的不断调整,及技术的不断成熟,如何打破App孤岛,实现用户在多App间的跳转 ...
- 使用友盟SNS_SDK为Android应用加入SNS分享、同步功能
很多朋友在开发Android应用的过程中,都想加入社会化的分享功能,如将自己的应用使用状态或心得同步到新浪微博.人人网或腾讯微博等.这些社交网络或微博都已经发布了针对开发者的开放平台(关于开放平台的相 ...
- 友盟统计封装android,react native 友盟统计 Android 端集成
ios 端 可参考:https://www.jianshu.com/p/879d28ee74e6 趁热打铁吧,把刚才已经完成的友盟统计集成记录下 Android端集成: 分下面几部: 步骤 sdk的集 ...
最新文章
- 天梯赛 L1-023 输出GPLT (20 分)
- 打开服务器文件提示内存不够,打开服务器文件提示内存不够
- ALLyeSNO 优化版浩方 第二版 Ver 2007 06 15 清除广告 自动挤房间
- 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev
- Java 数组中new Object[5]语句是否创建了5个对象?
- 卷积神经网络多输入和多输出
- SVN MKACTIVITY
- 迎建国七十周年,Linux厂商巡礼之一铭软件
- CF984A Game
- 【案例分析】PCB行业产业服务平台开发案例分析
- 【车联网原型系统|三】树莓派设计+模拟基站程序
- 计算机版学猫叫歌,抖音学猫叫是什么歌
- 设计模式---单例模式Singleton
- Lesson09_类和对象
- leetcode 825. Friends Of Appropriate Ages
- 三十一、Fluent空化模型
- Git常用操作速查,没有人比我更简单!!
- c语言正方形和三角形面积,【c语言】计算长方形,三角形和圆形的面积,根据用户的选择求不同形状的面积。...
- macbookpro怎么恢复出厂设置
- 基于类语言模型和令牌传递解码器的端到端上下文语音识别(论文翻译)