Flutter集成Umeng步骤及若干问题总结

news2024/11/15 21:48:37

由于Flutter项目中用到umeng统计及手机号一键登录功能,但实际集成使用中遇到各种坑,文档及demo却都没有提及,因此写下这篇文章,有遇到同样问题的同学可以参考下。

集成之前,最好先查看一下文档:https://developer.umeng.com/docs/143070/detail/425282

集成步骤:

1.下载智能认证SDK:https://devs.umeng.com/

2.将下载的sdk.解压,删除其中的example:

在这里插入图片描述

然后将整个项目放进自己Flutter项目的跟目录(文档正好相反,是将flutter项目放在了sdk的根目录,这样非常不好,所以建议是将sdk放进Flutter项目的根目录,类似于安卓项目引入一个Module)

在这里插入图片描述

最后,修改flutter_verify中android下的gradle版本为你自己的gradle版本:

在这里插入图片描述

同样,build.gradle中修改com.android.tools.build:gradle为你自己的版本,以及远程仓库:

在这里插入图片描述

3.在pubspec.yaml中添加:

  #umeng
  umeng_common_sdk: 1.2.4
  umeng_verify_sdk:
    path: ../自己的项目根目录/flutter_verify

然后pub get一下,把sdk下载下来。

4.安卓端需要在Application中预初始化:

如果你的android目录中没有Application,需要自己创建一个,然后在onCreate中预初始化:

com.umeng.commonsdk.UMConfigure.preInit(this, "appkey", "channel");

preInit不会收集任何隐私信息,真正的初始化是在Flutter中,用户同意你自己的服务协议及隐私政策后,开始调用。

注意,如果没有调用preInit,umeng的功能实测将不可用!

5.在Flutter中初始化:

  initUmeng() {
    UmengCommonSdk.setPageCollectionModeManual();
    UmengCommonSdk.initCommon(umengAppKey, umengAppKey, 'channel');
    UmengVerifySdk.register_android();//安卓平台必须调用
    UmengVerifySdk.setVerifySDKInfo(umengVerifySecret, umengVerifySecret);
  }

setVerifySDKInfo可以通过then打印是否调用成功,如返回true,则表示成功!

6.一键登录:

umeng提供了两种方式,一种是弹框,一种是进入一个新的ui页面,我自己使用的是第二种,并封装了一个方法(由于目前只考虑安卓平台,所以以下方法属于安卓,ios的可以参考demo):

    UMCustomModel uiConfig = UMCustomModel();
    uiConfig.isAutorotate = false;
    uiConfig.navIsHidden = true;
    uiConfig.prefersStatusBarHidden = false;
    uiConfig.backgroundImage = "page_background_color";
    uiConfig.logoIsHidden = true;
    uiConfig.sloganIsHidden = true;
    uiConfig.numberColor = Colors.black.value;
    uiConfig.numberFont = 20;
    uiConfig.numberFrame = [10, 200, -1, -1];
    uiConfig.loginBtnText = ["手机号一键登录", Colors.white.value, 20];
    uiConfig.loginBtnBgImg_android = "login_btn_bg";
    uiConfig.autoHideLoginLoading = false;
    uiConfig.loginBtnFrame = [10, -1, -1, -1, -1];
    uiConfig.checkBoxImages = ["unchecked", "checked"];
    uiConfig.checkBoxIsChecked = false;
    uiConfig.checkBoxIsHidden = false;
    uiConfig.checkBoxWH = 15;
    uiConfig.privacyOne = ["《服务协议》", agreementUrl];
    uiConfig.privacyTwo = ["《隐私政策》", privacyUrl];
    uiConfig.privacyConectTexts = ["& ", "、"];
    uiConfig.privacyColors = [Colors.red.value, Colors.blue.value];
    uiConfig.privacyAlignment = UMTextAlignment.Center;
    uiConfig.privacyPreText = "";
    uiConfig.privacySufText = "";
    uiConfig.privacyOperatorPreText = "《";
    uiConfig.privacyOperatorSufText = "》";
    uiConfig.privacyOperatorIndex = 1;
    uiConfig.privacyFont = 12;
    uiConfig.privacyFrame = [10, -1, 10, -1];
    uiConfig.changeBtnTitle = ["账号密码登录", Colors.blue.value, 14];
    uiConfig.changeBtnIsHidden = false;
    uiConfig.changeBtnFrame = [-1, 320, -1, -1];
    uiConfig.protocolAction_android = "com.aliqin.mytel.protocolWeb";
    uiConfig.privacyNavColor = Colors.red.value;
    uiConfig.privacyNavTitleFont = 16;
    uiConfig.privacyNavTitleColor = Colors.blue.value;
    uiConfig.privacyNavBackImage = "icon_back";

    UMCustomWidget customButton = UMCustomWidget("button1", UMCustomWidgetType.button);
    customButton.title = "";
    customButton.left = 0;
    customButton.top = 0;
    customButton.width = 0;
    customButton.height = 0;
    customButton.backgroundColor = Colors.red.value;
    customButton.titleColor = Colors.black.value;
    customButton.isClickEnable = false;
    customButton.btnBackgroundResource_android = "btn_selector";
    customButton.rootViewId = UMRootViewId.body;

    UMCustomWidget customTextView = UMCustomWidget("textView", UMCustomWidgetType.textView);
    customTextView.left = 0;
    customTextView.top = 0;
    customTextView.width = 0;
    customTextView.height = 0;
    customTextView.title = "";
    customTextView.rootViewId = UMRootViewId.number;
    uiConfig.customWidget = [customButton.toJsonMap(), customTextView.toJsonMap()];

    UmengVerifySdk.getLoginTokenWithTimeout(3, uiConfig);

效果图:

在这里插入图片描述

UmengVerifySdk.checkEnvAvailable()方法,可检测当前是否支持一键登录!

协议的点击事件,可以通过设置回调监听:

    UmengVerifySdk.setUIClickCallback_android((result) {
      showLog("setUIClickCallback_android: ${jsonDecode(result["jsonString"])["url"]}");
    });

需要注意的是,这里不能直接跳转到flutter的web页面,因为umeng的这个一键登录页面在整个应用的顶层,会覆盖你的flutter页面,这个只能编写原生WebActivity跳转。

一键登录按钮的点击事件:

    UmengVerifySdk.setTokenResultCallback_android((result) {
      showLog("setTokenResultCallback_android: $result");
      if (result["code"] == "600000") {
        UmengVerifySdk.quitLoginPage_android();
        if (result["token"] != null) {
          oneKeyLogin(result["token"]);
        }
      }
    });

安卓端集成若干问题总结:

1.获取不到VerifyId?

首次按文档集成时,umeng_common_sdk版本是1.2.3,怎么都获取不到,最后升级到了1.2.4竟好了,所以这个问题,不清楚是版本问题,还是其它什么问题?如果获取不到,可以尝试清除一下缓存,卸载app再重装,升级版本等等。

2.打正式包报错:“Theme.AppCompat.Light.NoActionBar not found”

这个问题应该是sdk使用了appcompat的主题,但文档却没有任何提及,简直是坑。

解决方法,在flutter_verify下的build.gradle中添加依赖:

 api 'androidx.appcompat:appcompat:1.4.1'

3.打正式包安装后报错:“SDK初始化失败,请检查是否集成umeng-asms-1.2x.aar库”

\由于Flutter打正式包默认开启混淆,这个原因是因为flutter把umeng的sdk给混淆了,所以自己在flutter_verify下创建一个proguard-rules.pro文件,并在build.gradle中配置:

-keep class com.umeng.** {*;}

在这里插入图片描述

这个问题,官方文档一样没有提及…

IOS端集成若干问题总结:

待续…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/657938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LangChain for LLM Application Development 基于LangChain开发大语言应用模型(上)

以下内容均整理来自deeplearning.ai的同名课程 Location 课程访问地址 DLAI - Learning Platform Beta (deeplearning.ai) 一、什么是LangChain 1、LangChain介绍 LangChain是一个框架,用于开发由大语言模型驱动的应用程序。开发者相信,最强大的、差异…

Ubuntu+Pycharm+QtDesigner,并配置Pyqt5

1. 安装PyQt5 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5 2. 安装ubuntu环境下所需要的依赖包 sudo apt install pyqt5* 3. 安装QtDesigner sudo apt install qttools5-dev-tools 4. 设置Pycharm 步骤: File–>setting–>Tools–&…

ESP32设备驱动-VCNL4040趋近传感器

VCNL4040趋近传感器 文章目录 VCNL4040趋近传感器1、VNCL4040介绍2、硬件准备3、软件准备4、驱动实现1、VNCL4040介绍 VCNL4040 将趋近传感器 (PS)、环境光传感器 (ALS) 和高功率 IRED 集成到一个小型封装中。它通过CMOS工艺将光电二极管、放大器和模数转换电路集成到一个芯片…

Linux->线程库接口

目录 前言: 1 进程和线程 2 线程库接口 2.1 线程库基础理解 2.2 创建线程 2.2 线程资源回收 2.3 线程分离 前言: 本篇主要是对Linux原装线程库的函数接口进行学习,还有一部分的线程概念补充。 1 进程和线程 博主在上一篇文章当中有讲过…

中北大学 - 信息对抗大三下学习课程设计(爬取招标网站,进行招标分析,数据保存execl中)

文章目录 1. 题目描述2. 项目细节分析定时爬取任务思路避免多次爬取数据重复问题网站结构根据爬取信息确认招标地区 3. 项目代码4. 运行截图 1. 题目描述 中北大学信息安全技术爬虫课程设计 题目 5:招投标信息分析系统 (20050441 2005031113&#xff09…

Floyd算法图解,C++实现Floyd算法

Floyd算法简介 Floyd算法是一种多源最短路径算法,是利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特弗洛伊德命名。 时间复杂度&am…

Python模块multiprocessing 实现多进程并发

简介 multiprocessing模块是Python标准库中提供的一个用于实现多进程编程的模块。它基于进程而不是线程,可以利用多核CPU的优势,提高程序的执行效率,同时也可以实现进程间通信和数据共享。 目录 1. 参数说明 1.1. Process(控制进…

推荐系统初谈

文章目录 简介推荐系统与搜索引擎发展历史所属领域 推荐系统分类概览基于内容的推荐基于协同过滤的推荐基于内存的协同过滤基于模型的协同过滤基于矩阵分解的推荐 推荐系统的评价指标推荐系统存在的问题参考文献 简介 21年笔记迁移,主要介绍了推荐系统的定义、发展…

【IC设计】ICC1 workshop lab guide 学习笔记

文章目录 Lab1 Data Setup&Basic Flow1.1 Create a Milkyway library1.2 Load the Netlist,TLU,Constraints and Controls1.3 Basic Flow:Design Planning1.4 Bsic Flow:Placement1.5 Basic Flow:CTS1.6 Basic Flow:Routing Design Planning2.1 Load the Design2.2 Initial…

算法刷题-字符串-反转字符串II

简单的反转还不够,我要花式反转 541. 反转字符串II 力扣题目链接 给定一个字符串 s 和一个整数 k,从字符串开头算起, 每计数至 2k 个字符,就反转这 2k 个字符中的前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 …

C++笔记之初始化线程的所有方法

code review! C笔记之初始化线程的所有方法 文章目录 C笔记之初始化线程的所有方法一.非类中初始化线程1.使用函数指针初始化线程2.lambda表达式初始化线程3.使用成员函数初始化线程4.使用函数对象(Functor)初始化线程5.使用std::bind绑定函数及其参数初始化线程 二.类中初始化…

滤波电容计算举例

例:输入电压220VAC,功率4W;要求输出电压波动不超过5%,试计算滤波电容容量。 解:(1)电容的储能公式为:Wc1/2CU^2 当电容充电到峰值电压(即220x1.414310V)时&am…

数仓的分层理论

一、简介 2021-4-25 11:04:16 数据仓库分层是数据仓库设计中非常重要的一个环节,一个好的分层设计可以极大地简化数据仓库的操作,提升使用体验。然需要注意的是,分层理论并不绝对,只是提供一种普适的指导思想和原则,…

[Spring Cloud]:Study Notes·壹

文章目录 摘要1 认识微服务1.1 单体架构与分布式架构1.2 分布式架构与微服务1.3 微服务架构 2 nacos2.1 什么是nacos2.2 nacos使用2.2.1 nacos使用逻辑2.2.2 启动下载好的nacos2.2.3 引入依赖2.2.4 各注册服务中配置nacos相关信息2.2.5 测试nacos注册成功 3 Ribbon负载均衡3.1 …

改进YOLO系列 | YOLOv5/v7 引入谷歌 Lion 优化器

论文地址:https://arxiv.org/pdf/2302.06675.pdf 代码地址:https://github.com/google/automl/tree/master/lion 我们提出了一种将算法发现作为程序搜索的方法,并将其应用于发现用于深度神经网络训练的优化算法。我们利用高效的搜索技术来探索一个无限且稀疏的程序空间。为了…

计算机视觉-语义分割: FCN DeepLab Unet

文章目录 1. 概要1.1 什么是语义分割1.2 语义分割作用1.3 全卷积网络1.4 反卷积1.5 上采样三种方式1.6 跳层结构 Skip Layer 2. FCN架构3. DeepLab-v13.1 改进点3.2 空洞卷积(Atrous/Dilated convolution) 4. U-Net参考 1. 概要 1.1 什么是语义分割 从像素水平上理解、识别图…

微信小程序——Echarts使用(保姆式教程)

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

从入门到精通!MATLAB基础教程及常用工具箱介绍

文章目录 基础介绍MATLAB窗口介绍MATLAB基本语法变量和数组控制流语句函数的定义和调用绘图MATLAB常用工具箱统计工具箱(Statistics Toolbox)控制系统工具箱(Control System Toolbox)信号处理工具箱(Signal Processing Toolbox&am…

搭建TiDB负载均衡环境-HAproxy+KeepAlived实践

作者: 我是咖啡哥 原文来源: https://tidb.net/blog/8e8cca1d 前言 HAProxy 提供 TCP 协议下的负载均衡能力,TiDB 客户端通过连接 HAProxy 提供的浮动 IP 即可对数据进行操作,实现 TiDB Server 层的负载均衡。同时&#xff0c…

SOFA Weekly|SOFARPC 5.10.1 版本发布、Layotto 社区会议回顾与预告、社区本周贡献

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…