flutter 创建插件

资料:

flutter与原生通信的方式简介 - 简书

完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎

https://www.cnblogs.com/webabcd/p/flutter_lib_plugin_plugin_ios.html

步骤1、创建插件

我创建的插件名字是konnect_im_sdk 选择的语言是 java和swift创建。

直接把插件放在项目中 plugins/konnect_im_sdk  如下

然后再项目的pubspec.yaml 引入本地项目插件

konnect_im_sdk:

        path: plugins/konnect_im_sdk

然后再插件的ios项目目录下 创建 Products 将 完整流程 Flutter 集成 Golang 多语言跨端开发基础案例 - 知乎

生成的object-c的ios第三方sdk放进去

然后在  .podspec 文件配置 第三方sdk的路径

s.vendored_frameworks = 'Products/*.framework'

s.static_framework = true

Classes 下的文件中 导入 第三方库 如这样的

现在就可以调用object-c中的方法了

object-c 中声明文件

FOUNDATION_EXPORT BOOL Konnect_im_sdkInitSDK(id<Konnect_im_sdk_callbackOnConnListener> _Nullable listener, NSString* _Nullable operationID, NSString* _Nullable config);
@protocol Konnect_im_sdk_callbackOnConnListener;
@class Konnect_im_sdk_callbackOnConnListener;@protocol Konnect_im_sdk_callbackOnBatchMsgListener <NSObject>
- (void)onRecvNewMessages:(NSString* _Nullable)messageList;
@end@protocol Konnect_im_sdk_callbackOnConnListener <NSObject>
- (void)onConnectFailed:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onConnectSuccess;
- (void)onConnecting;
- (void)onKickedOffline;
- (void)onUserTokenExpired;
@end@interface Konnect_im_sdk_callbackOnConnListener : NSObject <goSeqRefInterface, Konnect_im_sdk_callbackOnConnListener> {
}
@property(strong, readonly) _Nonnull id _ref;- (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onConnectFailed:(int32_t)errCode errMsg:(NSString* _Nullable)errMsg;
- (void)onConnectSuccess;
- (void)onConnecting;
- (void)onKickedOffline;
- (void)onUserTokenExpired;
@end

调用

Konnect_im_sdkInitSDK 第一个参数是这样写的

 class MyConnectionListener:  Konnect_im_sdk_callbackOnConnListener {override func onConnectFailed(_ errCode: Int32, errMsg: String?) {print("连接失败,错误码:\(errCode),错误信息:\(errMsg ?? "")")}override func onConnectSuccess() {print("连接成功")}override func onConnecting() {print("正在连接...")}override func onKickedOffline() {print("您已被踢下线")}override func onUserTokenExpired() {print("用户令牌已过期")}
}

运行可以运行 但是报错了 报错同  go_seq_go_to_refnum on objective-c objects is not permitted

https://github.com/golang/go/issues/20254

记 IOS Swift 实现 gomobile interface 抛出异常 go_seq_go_to_refnum on objective-c objects is not permitted

swift 中是不存在多继承的 下面的写法 又报多继承 

 class MyConnectionListener: NSObject, Konnect_im_sdk_callbackOnConnListener {func onConnectFailed(_ errCode: Int32, errMsg: String?) {print("连接失败,错误码:\(errCode),错误信息:\(errMsg ?? "")")}func onConnectSuccess() {print("连接成功")}func onConnecting() {print("正在连接...")}func onKickedOffline() {print("您已被踢下线")}func onUserTokenExpired() {print("用户令牌已过期")}
}

那么 Konnect_im_sdk_callbackOnConnListener是一个类 不是协议 说明声明文件中Konnect_im_sdk_callbackOnConnListener定义有问题 

找到第三方sdk定义的地方 注释掉

Konnect_im_sdk_callbackOnConnListener 不是既是协议 又同时定义为类

注释掉问题解决

总结 

go_seq_go_to_refnum on objective-c objects is not permitted

是 传参类型不对导致的 

安卓项目

修改 build.gradle 配置文件

dependencies {

// libs 是 第三方包的路径

implementation fileTree(dir: 'libs', include: ['*.jar'])

// imsdk 

implementation(name: 'konnect_im_sdk', ext: 'aar')

}

文件中导入第三方包

package chat.konnect.konnect_im_sdk;

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

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

相关文章

uni-app:引用文件的方法

绝对定位 ①import common from "/utils/common.js" ②import common from "utils/common.js" <template><view></view> </template> <script>import common from "/utils/common.js"export default {data() {ret…

如何实现LIN多通道测试

引言 在汽车的世界里&#xff0c;各个控制模块之间的通信就如同人体的神经系统一样&#xff0c;任何一个环节的失误都可能导致整个系统的崩溃。因此&#xff0c;通信的稳定性和可靠性验证就成为了我们必须要面对的重要问题。LIN&#xff08;Local Interconnect Network&#x…

智慧燃气巡检管理系统

我们知道燃气设施的巡检、巡查是运维工作中一项重要的基础工作&#xff0c;而巡检人员主要靠手动记录&#xff0c;回到公司后还得再进行录入归档、导入照片&#xff0c;然后打印装订等&#xff0c;涉及工作量也是不小的&#xff1b;还有人员更替&#xff0c;易造成人员对燃气设…

这5种炫酷的动态图,都是用Python实现的!

数据可以帮助我们描述这个世界、阐释自己的想法和展示自己的成果&#xff0c;但如果只有单调乏味的文本和数字&#xff0c;我们却往往能难抓住观众的眼球。而很多时候&#xff0c;一张漂亮的可视化图表就足以胜过千言万语。本文将介绍 5 种基于 Plotly 的可视化方法&#xff0c…

C++二分算法的应用:寻找峰值原理、源码及测试用例

说明 此文是课程https://edu.csdn.net/course/detail/38771 的讲义。 源码下载&#xff1a;https://download.csdn.net/download/he_zhidan/88458478 题目 长度为n的数组nums&#xff0c;请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>…

Windows Server 2019 搭建FTP站点

目录 1.添加IIS及FTP服务角色 2.创建FTP账户&#xff08;用户名和密码&#xff09;和组 3.设置共享文件夹的权限 4.添加及设置FTP站点 5.配置FTP防火墙支持 6.配置安全组策略 7.客户端测试 踩过的坑说明&#xff1a; 1.添加IIS及FTP服务角色 a.选择【开始】→【服务器…

搭建react项目

一、环境准备 1、安装node 官网下载安装&#xff1a;https://nodejs.org/en 注&#xff1a; npm5.2以后&#xff0c;安装node会自动安装npm和npx 2、安装webpack npm install -g webpack3、安装create-react-app npm install -g create-react-app二、创建react项目 1、初…

SpringBoot使用@Value获取不到yaml中配置的值

在最近的开发中遇到一个问题,使用Value获取yml文件中配置的属性时始终获取不到值,一开始我以为是没有注入的问题,或者没有写setter方法的问题,后来我发现这些都都写了然后开始百度发现获取不到属性值有这么几个原因 获取不到值的原因 1.没有使用Component注解,也就是没有注入…

Java进阶篇--Condition与等待通知机制

Condition简介 Condition是Java并发包中的一种机制&#xff0c;用于线程之间的协作和通信。它与锁&#xff08;Lock&#xff09;紧密配合使用&#xff0c;并提供了更高级别的等待/通知功能。 下面是Condition的一些特性和区别&#xff1a; 1. 精确唤醒&#xff1a;Condition…

php 数组基础/练习

数组 练习在最后 数组概述 概述与定义 数组中存储键值对 数组实际上是一个有序映射 key-value&#xff0c;可将其当成真正的数组、列表&#xff08;向量&#xff09;、散列表、字典、集合、栈、队列等 数组中的元素可以是任意类型的数据对象&#xff08;可以嵌套数组&#…

2023年中国汽车差速器需求量、竞争现状及行业市场规模分析[图]

差速器是汽车驱动系统的主要部件&#xff0c;它的作用就是在向两边半轴传递动力的同时&#xff0c;允许两边半轴以不同的转速旋转&#xff0c;满足两边车轮尽可能以纯滚动的形式作不等距行驶&#xff0c;减少轮胎与地面的摩擦。汽车差速器是驱动车轮差速转弯或复杂路面强力通过…

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…