【flutter】Flutter项目集成第三方sdk总结

实现方式

  1. 在Android层启动sdk
  2. 在flutter代码中 通过原生通信执行sdk集成的方法

一、在Android层集成SDK(kotlin)

说明:一般sdk集成会要求设置集成模式后启动sdk,因此使用attachBaseContextonCreate来实现SDK集成。

   override fun attachBaseContext(base: Context) {super.attachBaseContext(base)Log.i(TAG, "----------设置SDK的使用模式--------")SDK.setMode();}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)Log.i(TAG, "----------开始启动隧道--------")SDK.start(application ) { response ->Log.i("TgentSDK", response.toString())//80:隧道启动成功//81:隧道启动失败if (response.code == 80) {Log.i(TAG, "----------隧道启动成功--------")//隧道启动成功,进入App逻辑}else{Log.i(TAG, "----------隧道启动失败--------")}//其他错误码见文档}// 你的初始化代码...}

注意:application 在attachBaseContext方法中可能为null,因此如果初始化或者sdk.start需要使用application ,在kotlin中需要在onCreate方法中实现 。

二、在flutter代码层调用sdk实现sdk启动

说明:在flutter仅是通过原生通信执行.kt或.java的l实现方法来实现sdk集成

  1. 首先需要写好调用第三方sdk的tool工具类
//tool工具类部分代码
class SFSDKPlugin_c : AppCompatActivity() , FlutterPlugin,  MethodChannel.MethodCallHandler,EventChannel.StreamHandler{
//定义通信var METHOD_CHANNEL = "sdp_method_channel"var EVENT_CHANNEL = "sdp_event_channel"private val TAG = "SFApplication-Plugin"private lateinit var channel: MethodChannelprivate lateinit var eventChannel: EventChannelprivate var sink: EventChannel.EventSink? = nullprivate val handler: Handler = Handler(Looper.getMainLooper())
//注册方法companion object {private val TAG = "SFApplication-Plugin"fun registerWith(registrar: FlutterEngine) {try {registrar.plugins.add(SFSDKPlugin_c())} catch (e: Exception) {Log.e(TAG, "Error registering plugin SFSDKPlugin_c", e)}}}//设置通信监听及sdk初始化方法override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {channel = MethodChannel(binding.binaryMessenger, METHOD_CHANNEL)channel.setMethodCallHandler(this)eventChannel = EventChannel(binding.binaryMessenger, EVENT_CHANNEL)eventChannel.setStreamHandler(this)this.sContext = binding.applicationContext/*** sdk初始化方法*/Log.i(TAG, "----------设置认证回调--------")//SDK...}//通信override fun onDetachedFromEngine(p0: FlutterPluginBinding) {channel.setMethodCallHandler(null)eventChannel.setStreamHandler(null)}//消息发送private fun sendEvent(event: MyResultData) {val resultMap = mapOf("result" to event.result,"accessToken" to event.accessToken,"cookieSessionId" to event.cookieSessionId)handler.post {sink?.success(resultMap)}}//定义通信事件override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: MethodChannel.Result) {when (call.method) {"startAuth" -> {Log.i(TAG, "----------开始认证:$userName---服务器地址:$serverUrl--------//SDK方法实现result.success(null)}"startAutoTicket" -> {startAutoTicket()}else -> result.notImplemented()}}
}
  1. 将tool工具类注册到MainActivity中
class MainActivity: FlutterActivity() {override fun attachBaseContext(base: Context) {super.attachBaseContext(base)sContext = base/*** 初始化sdk,*/Log.i(TAG, "----------开始初始化SOK--------")//初始化sdkinitSdk(base)/*** 注销事件监听回调,推荐在Application里面监听, 避免出现认证开始了还未监听的问题*/Log.i(TAG, "----------注销事件监听回调--------")SDKLogoutListener { type, message ->SFLogN.info(TAG,"onLogout, message: $message")}}//注册插件override fun configureFlutterEngine(flutterEngine: FlutterEngine) {super.configureFlutterEngine(flutterEngine)SFSDKPlugin_c.registerWith(flutterEngine)}
}
  1. 在flutter代码中通过通信调用tool里方法
//dart里原生通信部分代码
abstract class SFSDKTools {static const MethodChannel _methodChannel = const MethodChannel("sdp_method_channel");static const EventChannel _eventChannel = const EventChannel("sdp_event_channel");//调用原生里写的方法static Future<void> startAuth(userName,password) async {//一些参数获取await _methodChannel.invokeMethod('startAuth');}//监听 native event 数据流static void onListenStreamData(onEvent, onError) {_eventChannel.receiveBroadcastStream().listen(onEvent, onError: onError);}//事件流处理static void onReceiveEvent(context) {_context = context;onListenStreamData((data) {switch (data['result']) {case "Auth_SUCCESS":onSuccessLogin();break;case "Auth_Failed":{onAuthFailed();}break;case "Auth_Progress":{print("二次认证");Fluttertoast.showToast(msg: "请进行二次认证",textColor: Colors.white,backgroundColor: Colors.red,gravity: ToastGravity.CENTER);}break;case "Auth_SUCCESS_NOPWD"://免密认证成功 app自主登录{onSuccessLogin();}break;case "Auth_NOPWD_Failed"://免密认证失败 app认证登录{onAuthNOPWDFailedLogin();}break;}}, (error) {print("event channel error : $error");});}
}

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

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

相关文章

最新道客巴巴怎么免费下载文档方法

一、利用浏览器插件 插件自动识别下载&#xff1a;对于经常需要下载道客巴巴文档的人来说&#xff0c;安装浏览器插件是不错的选择。如Chrome浏览器上的一些插件&#xff08;如PDF在线转换器等&#xff09;&#xff0c;安装后&#xff0c;在浏览器中打开道客巴巴文档&#xff…

多系统萎缩锻炼如何好起来?

多系统萎缩&#xff08;Multiple System Atrophy, MSA&#xff09;是一种复杂的神经系统退行性疾病&#xff0c;影响着患者的自主神经系统、运动系统和平衡功能等多个方面。面对这一挑战&#xff0c;科学、合理的锻炼对于缓解症状、提高生活质量至关重要。本文将详细介绍多系统…

实现RAGFlow-0.14.1的输入框多行输入和消息框的多行显示

一、Chat页面输入框的修改 1. macOS配置 我使用MacBook Pro&#xff0c;chip 是 Apple M3 Pro&#xff0c;Memory是18GB&#xff0c;macOS是 Sonoma 14.6.1。 2. 修改chat输入框代码 目前RAGFlow前端的chat功能&#xff0c;输入的内容是单行的&#xff0c;不能主动使用Shift…

11.17【大数据】Hadoop【DEBUG】

列出hdfs文件系统所有的目录和文件 主节点上 子结点 是一样的 *为什么能登进 slave 02 的主机,但是 master 当中依然显示 slave 02 为 DeadNode?* hadoop坏死节点的重启_hadoop3 子节点重启-CSDN博客 注意hadoop-daemon.sh 实际上位于 Hadoop 的 sbin 目录中&#xff0c;而不…

阿里云盘permission denied

问题是执行 ./aliyunpan 时遇到了 Permission denied 的错误。这通常是因为文件没有执行权限。以下是解决问题的步骤&#xff1a; 检查文件权限 运行以下命令检查文件的权限&#xff1a; ls -l aliyunpan输出中会看到类似以下内容&#xff1a; -rw-r--r-- 1 user group 123…

网络测速工具

1. SPEEDTEST https://www.speedtest.net/ 2. 测速网 测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测,Wi-Fi 7,Wi-Fi 6,FTTR,全屋Wi-Fi - SpeedTest.cn 3. 字节比特换算 bps&#xff08;bits per second&#xff09; 字节和比特的换算…

快速构建NLP理论知识体系

NLP理论知识体系 一句话解释NLPNLP模型及原理简述1、Rag 一句话解释NLP 如果我们要实现机器翻译、情感分析、问答系统、文本摘要、聊天机器人、构造智能化的辅助文件填写模板&#xff0c;NLP可以通过现成的模型对输入的语音、文字、图片进行处理&#xff08;分词、标词性、去停…

【HF设计模式】02-观察者模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第2章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍观察者模式&#xff0c;包括遇到的问题、应用的 OO 原则、达到的效果。 …

AI - RAG中的状态化管理聊天记录

AI - RAG中的状态化管理聊天记录 大家好&#xff0c;今天我们来聊聊LangChain和LLM中一个重要的话题——状态化管理聊天记录。在使用大语言模型(LLM)的时候&#xff0c;聊天记录&#xff08;History&#xff09;和状态&#xff08;State&#xff09;管理是非常关键的。那我们先…

【AI学习】Mamba学习(二十):Mamba是一种线性注意力

论文《Demystify Mamba in Vision: A Linear Attention Perspective 》从线性注意力的视角&#xff0c;对Mamba 进行了阐释。 论文名称&#xff1a;Demystify Mamba in Vision: A Linear Attention Perspective (Arxiv 2024.05) 论文地址&#xff1a;https://arxiv.org/pdf/24…

李宏毅深度学习-Pytorch Tutorial2

什么是张量&#xff1f; 张量&#xff08;Tensor&#xff09;是深度学习和机器学习中一个非常基础且重要的概念。在数学上&#xff0c;张量可以被看作是向量和矩阵的泛化。简单来说&#xff0c;张量是一种多维数组&#xff0c;它可以表示标量&#xff08;0维&#xff09;、向量…

POI遍历行所有单元格的两种方式,getPhysicalNumberOfCells方式有问题,勿用

今天看POI源码的时候&#xff0c;发现HSSFWorkbook类型的工作簿&#xff0c;行数据是用TreeMap<Integer, HSSFRow>存储的&#xff0c;列数据是用HSSFCell[]数组来存的&#xff1b;XSSFWorkbook类型的工作簿&#xff0c;行数据是用SortedMap<Integer, XSSFRow>存储的…

DataSophon集成CMAK KafkaManager

本次集成基于DDP1.2.1 集成CMAK-3.0.0.6 设计的json和tar包我放网盘了. 通过网盘分享的文件&#xff1a;DDP集成CMAK 链接: https://pan.baidu.com/s/1BR70Ajj9FxvjBlsOX4Ivhw?pwdcpmc 提取码: cpmc CMAK github上提供了zip压缩包.将压缩包解压之后 在根目录下加入启动脚本…

ArrayList常见操作源码逐句剖析

目录 前言 正文 1.需要了解的一些字段属性 1.存储 ArrayList 元素的数组缓冲区。 2.集合的大小 3.默认集合容量大小 2.ArrayList对象创建 1.无参构造 2.有参构造1 3.有参构造2 3.添加元素add(E e)以及扩容机制 ​编辑 后言 前言 源码的剖析有助于理解设计模式&…

重磅更新:CnosDB 2.3.5.4 版本上线, 性能提升,问题修复一网打尽

&#x1f4e2; 重磅更新&#xff1a;CnosDB 2.3.5.4 版本上线, 性能提升&#xff0c;问题修复一网打尽 &#x1f4e2; 我们很高兴地向大家介绍最新版本的更新&#xff0c;以下是本次更新的主要内容&#xff1a; &#x1f539; 版本号&#xff1a;2.3.5.4 &#x1f539; 发布…

SD-WAN 2.0 在金融行业的典型应用场景

目录 全扁平化组网 场景需求 应用方案 SD-WAN 2.0 在金融行业的创新实践 SD-WAN5G提高金融行业网络接入可靠性 全扁平化组网 随着金融机构数字化转型的推进&#xff0c;机构业务的多样性、复杂性、 个性化等要求&#xff0c;对现有的金融机构网络架构与网管人员运维模式提出…

如何延长相机电池续航时间

如果你曾在拍摄过程中突然发现相机电池电量不足&#xff0c;就会知道那有多让人紧张和沮丧了。无论你是在拍摄小朋友的生日派对、家庭聚会&#xff0c;还是作为一名专业摄影师在工作&#xff0c;保持电池有电都是至关重要的。否则&#xff0c;你就有可能错过精彩瞬间&#xff0…

C#开发-集合使用和技巧(十)Union用法-并集

在 C# 中&#xff0c;IEnumerable 的 Union 方法用于返回两个序列的并集。Union 方法会去除重复的元素&#xff0c;确保结果集中每个元素都是唯一的。以下是 Union 方法的基本用法&#xff1a; 基本语法 public static IEnumerable<TSource> Union<TSource>(this…

轻量化特征融合 | YOLOv11 引入一种基于增强层间特征相关性的轻量级特征融合网络 | 北理工新作

本改进已同步到Magic框架 摘要—无人机图像中的小目标检测由于分辨率低和背景融合等因素具有挑战性,导致特征信息有限。多尺度特征融合可以通过捕获不同尺度的信息来增强检测,但传统策略效果不佳。简单的连接或加法操作无法充分利用多尺度融合的优势,导致特征之间的相关性不…

ABAP 系统变量SY-INDEX与SY-TABIX的区别

ABAP系统变量SY-INDEX与SY-TABIX都是在循环中使用&#xff1a; SY-INDEX在Do...EndDo和While...EndWhile中起作用&#xff1b; SY-TABIX在Loop...EndLoop中有效。 详见如下实例&#xff1a; REPORT ztest_index_tabix.DATA:lit_vbak TYPE STANDARD TABLE OF vbak,lwa_vbak …