目录

  • 介绍
  • 入手
  • 问题:报错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 包一样, 直接引入就行。

  1. 在上文所述的模块中的 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')
}
  1. 然后在插件中初始化和调用一键登录,在插件 onAttachedToEngine 中初始化认证包,也可以通过MethodCall 在Flutter中手动调用。
  @Override@CallSuperpublic void onAttachedToEngine() {Log.i(TAG, "onAttachedToEngine");UMConfigure.init(flutterPluginBinding.getApplicationContext(), "你的APP KEY","Umeng",UMConfigure.DEVICE_TYPE_PHONE,null);}
  1. 在自动创建的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);}}
  1. 返回消息到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());}});}
  1. 配置签名
    切换到 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应用, 创建方案。

  1. 要保证应用包名, 签名, Appkey, 密钥 四个数据都要对应,否则会报错。
  2. 注意SDK的错误码(坑),以及预取号成功返回的是运营商字符串而不是JSON字符串

【Flutter】友盟智能认证Android Flutter插件集成相关推荐

  1. android umeng,GitHub - umeng/umeng_community_android: 友盟微社区Android SDK开源项目

    友盟微社区 Android SDK 该项目是友盟微社区的开源部分代码,根目录下的工程为集成友盟微社区SDK的demo,umeng_comm_android_ui为友盟微社区开源UI代码,里面包含了友盟 ...

  2. flutter友盟分享_flutter中友盟插件开发使用

    CSDN-专业IT技术社区-登录​blog.csdn.net 开发插件要具备的知识:Flutter 与 原生 Android iOS 双向通信 Flutter通过MethodChannel实现Flut ...

  3. flutter友盟分享_Flutter中使用友盟统计

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 可以用来加载 Html 页面,以实现 Android 中 WebView 或者 是 iOS 中的 UIWeb ...

  4. flutter友盟分享_集成推送那点事-友盟/Mob-Flutter/FCM

    第 97 次推文 LZ-Says 我们都曾羡慕别人,却忘了,我们也曾是别人羡慕的我们. 推荐直接拉到底阅读原文- 前言 最近的任务呐,真是让人蛋碎一地,各种被锤. 不过比较 nice 的是,推送凑齐了 ...

  5. flutter友盟分享_flutter友盟统计之界面统计

    2020.10.20日更新: 最近发现了一种更好的方法,就是使用RouteAware监听路由,下面是实现代码 初始化: RouteObserver需要申明为全局属性并作为参数传入MaterialApp ...

  6. flutter友盟分享_Flutter 集成友盟 深坑

    对于友盟在Flutter上的集成,官方虽然给出了sdk(https://developer.umeng.com/sdk/flutter),但是不好使,是真的不好使,不信的可以去试试,安卓费劲调好以后, ...

  7. 友盟统计集成_友盟+智能超链U-Link,助力开发者拥有更极致的分享体验_互联网_科技快报...

    各个App原本就像大海中的一座座岛屿,虽然都生活在移动的海洋中(Android系统或iOS)但彼此并无再多往来.随着用户需求的不断调整,及技术的不断成熟,如何打破App孤岛,实现用户在多App间的跳转 ...

  8. 使用友盟SNS_SDK为Android应用加入SNS分享、同步功能

    很多朋友在开发Android应用的过程中,都想加入社会化的分享功能,如将自己的应用使用状态或心得同步到新浪微博.人人网或腾讯微博等.这些社交网络或微博都已经发布了针对开发者的开放平台(关于开放平台的相 ...

  9. 友盟统计封装android,react native 友盟统计 Android 端集成

    ios 端 可参考:https://www.jianshu.com/p/879d28ee74e6 趁热打铁吧,把刚才已经完成的友盟统计集成记录下 Android端集成: 分下面几部: 步骤 sdk的集 ...

最新文章

  1. 天梯赛 L1-023 输出GPLT (20 分)
  2. 打开服务器文件提示内存不够,打开服务器文件提示内存不够
  3. ALLyeSNO 优化版浩方 第二版 Ver 2007 06 15 清除广告 自动挤房间
  4. 第六篇: 分布式配置中心(Spring Cloud Config)(Finchley版本)V2.0_dev
  5. Java 数组中new Object[5]语句是否创建了5个对象?
  6. 卷积神经网络多输入和多输出
  7. SVN MKACTIVITY
  8. 迎建国七十周年,Linux厂商巡礼之一铭软件
  9. CF984A Game
  10. 【案例分析】PCB行业产业服务平台开发案例分析
  11. 【车联网原型系统|三】树莓派设计+模拟基站程序
  12. 计算机版学猫叫歌,抖音学猫叫是什么歌
  13. 设计模式---单例模式Singleton
  14. Lesson09_类和对象
  15. leetcode 825. Friends Of Appropriate Ages
  16. 三十一、Fluent空化模型
  17. Git常用操作速查,没有人比我更简单!!
  18. c语言正方形和三角形面积,【c语言】计算长方形,三角形和圆形的面积,根据用户的选择求不同形状的面积。...
  19. macbookpro怎么恢复出厂设置
  20. 基于类语言模型和令牌传递解码器的端到端上下文语音识别(论文翻译)

热门文章

  1. Dynamic Region-Aware Convolution
  2. 如何制作中药房药柜上的标签
  3. 我要带海大冲进世界总决赛!
  4. 课程注册管理系统(用例图及用例描述)
  5. UPC(混合1)问题 D: 迷宫
  6. 穿越火线(CF) AI 自瞄 代码 权重 数据集 亲测可用(结尾有资源)
  7. 初阶指针---从入门到入坟
  8. 你爱不爱我?(爆笑)
  9. android 停止服务方法,android-如何自行停止服务?
  10. 2013年10月微软MVP申请开始了