Flutter插件之阿里百川
上一篇:Flutter插件的制作和发布,我们已经了解了如何制作一个通用的双端插件,本篇就带领大家将阿里百川双端sdk制作成一个flutter插件供项目调用!
目录
- 登录并打开控制台,创建应用:
- 填写应用相关信息
- 开通百川电商SDK
- 申请安全图片
- 下载SDK
- 创建插件项目
- 将ios端sdk下的framework和bundle文件夹复制到插件工程的ios目录下
- 编辑podspec
- 编辑主工程Podfile
- 使用Android Studio编译运行
- XCode打开IOS工程
- 根据开发文档其它相关配置
- 引入百川SDK头文件,进行功能编写:
- Flutter端编写通信方法后运行
- AndroidStudio打开android工程
- 引入百川SDK相关类,进行功能编写:
打开阿里百川网站:https://baichuan.taobao.com/
登录并打开控制台,创建应用:
填写应用相关信息
注意,这里需要填写项目双端包名,最后生成安全图片时,安卓端会要求上传apk空包,验证包名和签名,ios端会要求提交Bundle ID。
SDK版本,本篇以标准版4.x为例,所以我们选择标准版,app下载地址可以随意填写一个!
开通百川电商SDK
申请安全图片
申请地址:https://suite.baichuan.taobao.com/
安卓端提交apk,ios端提交bundleId!
注意一定要选择v6,两端的安全图片下载成功后改名为:yw_1222_baichuan.jpg(新版sdk要求),并保存以待后面使用!
下载SDK
下载地址:阿里百川SDK
下载4.x的标准版本!5.x的旗舰版和4.x的标准版在功能上的区别在于5.x提供了二次登录授权(可以传入任意appkey以申请accessToken):
本篇以4.x标准版为例接入!
创建插件项目
插件名即alikit4,按上一篇Flutter插件的制作过程,确认项目编译运行成功后,开始按阿里百川ios4.x接入文档,接入sdk:
将ios端sdk下的framework和bundle文件夹复制到插件工程的ios目录下
编辑podspec
打开alikit4.podspec,添加Framework和资源依赖路径,以及其它系统Framework和library:
s.vendored_frameworks = "framework/**/*.framework"s.resources = ['bundle/*.bundle']s.frameworks = 'JavaScriptCore','CoreMotion','CoreTelephony's.libraries = 'resolv','c++','icucore','sqlite3'
fs.vendored_frameworks = ramework/**/.framework 即ios插件目录下framework文件夹下的所有二级文件夹下的所有Framework;
s.resources = ['bundle/.bundle’] 插件引用的资源路径;
s.frameworks = ‘JavaScriptCore’,‘CoreMotion’,‘CoreTelephony’ 插件所需要的系统库;
s.libraries = ‘resolv’,‘c++’,‘icucore’,‘sqlite3’ 插件所需要的系统library;
另,如果插件需要通过pods安装远程库,则写法为:
s.dependency 'Masonry','1.1.0'
s.dependency 'FMDB','2.7.5'
这里仅是举例,4.x标准版SDK不需要!
编辑主工程Podfile
在target ‘Runner’ do下添加:use_modular_headers!,否则有可能报错!
使用Android Studio编译运行
此过程,会自动进行pod install,及ios端的环境配置,当然有可能会运行失败,无论成功失败,此时便可使用XCode打开ios工程,依据开发文档进行相关配置;
XCode打开IOS工程
将ios端的安全图片,拖入到主工程Runner下,另有一个名为mtopsdk_configuration.plist的文件一并拖入(可下载阿里百川demo复制过来即可):
注意你的bundleId一定要与你的安全图片一致:
根据开发文档其它相关配置
1.添加系统库,我们在podspec中已经配置:
2.添加编译参数,按照文档添加方法在other linker flag中添加即可:
3.配置URL Types,按照文档添加方式添加(注意是自己的appkey)即可:
URL Scheme为tbopen{AppKey},如tbopen123456
4.配置info.plist:
1)在info.plist中,增加LSApplicationQueriesSchemes字段,并添加tbopen,tmall;
2)配置ATS, 允许HTTP请求;
如果plist中没有以上项目,可以点击+号手动添加,也可以直接使用代码添加:
URL Scheme:
<key>CFBundleURLTypes</key><array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>alibaichuan</string><key>CFBundleURLSchemes</key><array><string>tbopen123456</string></array></dict></array>
LSApplicationQueriesSchemes:
<key>LSApplicationQueriesSchemes</key><array><string>tmall</string><string>tbopen</string></array>
ATS:
<key>NSAppTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>
然后执行编译看是否成功,一般的都没什么问题,如果有问题,就具体问题具体对待。
注意:以上所有配置,均是在主工程Runner下配置!
引入百川SDK头文件,进行功能编写:
编译通过后,所引用的Framework会全部显示在这里。
打开Alikit4Plugin.m,导入阿里头文件:
#import "AlibcTradeSDK/AlibcTradeSDK.h"
如未报错,并可以进入到该头文件内部,则表示sdk已经引入成功,接下来就可以愉快的进行功能开发了:
这里仅拿初始化方法举例:
if ([@"init" isEqualToString:call.method]) {// 百川平台基础SDK初始化,加载并初始化各个业务能力插件[[AlibcTradeSDK sharedInstance] setDebugLogOpen:YES];[[AlibcTradeSDK sharedInstance] asyncInitWithSuccess:^{NSLog(@"百川SDK初始化成功");result(@{ @"code":@0});} failure:^(NSError *error) {NSLog(@"百川SDK初始化失败");result(@{ @"code":@-1,@"msg":error.description});}];}
另外需要注意的是,ios端需要在AppDelegate中进行一些配置:
//IOS9.0 系统新的处理openURL 的API
- (BOOL)application:(UIApplication *)applicationopenURL:(NSURL *)urloptions:(NSDictionary<NSString *,id> *)options {if (@available(iOS 9.0, *)) {__unused BOOL isHandledByALBBSDK=[[AlibcTradeSDK sharedInstance]application:applicationopenURL:urloptions:options];} else {// Fallback on earlier versions}//处理其他app跳转到自己的app,如果百川处理过会返回YESreturn YES;
}- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts API_AVAILABLE(ios(13.0)){[URLContexts enumerateObjectsUsingBlock:^(UIOpenURLContext * _Nonnull obj,BOOL * _Nonnull stop) {if([[AlibcTradeSDK sharedInstance] application:nilopenURL:obj.URLoptions:nil]){*stop = YES;}}];
}
swift写法:
1)桥接文件中引入百川头文件:#import “AlibcTradeSDK/AlibcTradeSDK.h”
2)AppDelegate中添加:
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {AlibcTradeSDK.sharedInstance().application(app, open: url, options: [:])return super.application(app, open: url, options: options)}
Flutter端编写通信方法后运行
返回{“code”:0}即代表初始化成功!由于模拟器未安装淘宝,所以打开的是网页版!
AndroidStudio打开android工程
将安卓端sdk放入安卓插件工程的libs文件夹下,并修改插件工程下的build.gradle,添加:
dependencies {implementation fileTree(include: ['*.jar'], dir: 'libs')compileOnly fileTree(include: ['*.aar'], dir: 'libs')implementation 'com.alibaba:fastjson:1.2.69'
}
同时,将sdk中的所有aar文件,往主工程的libs文件夹下复制一份:
修改主工程下的build.gradle:
dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation fileTree(dir: 'libs', include: ['*.aar'])
}
注意看区别,插件工程对aar使用的是compileOnly,主工程是implementation!
另外,在主工程的build.gradle配置上你的签名信息:
这一步骤,应在你申请安全图片之前就以配置好,可以保证安全图片与你的包名以及签名一致,否则会导致百川sdk初始化失败!
添加安全图片到主工程res/drawable下:
执行Sync,编译:
编译通过后,即可在Alikit4Plugin中编写功能代码了:
引入百川SDK相关类,进行功能编写:
import com.alibaba.baichuan.android.trade.AlibcTrade;
import com.alibaba.baichuan.android.trade.AlibcTradeSDK;
import com.alibaba.baichuan.android.trade.callback.AlibcTradeInitCallback;
if (call.method.equals("init")) {AlibcTradeSDK.asyncInit((Application) context, new AlibcTradeInitCallback() {@Overridepublic void onSuccess() {result.success(getResult(0));}@Overridepublic void onFailure(int code, String msg) {result.success(getResult(-1, code + " " + msg));}});}
gitee地址:alikit4
相关文章:
Flutter插件之阿里百川
上一篇:Flutter插件的制作和发布,我们已经了解了如何制作一个通用的双端插件,本篇就带领大家将阿里百川双端sdk制作成一个flutter插件供项目调用! 目录 登录并打开控制台,创建应用:填写应用相关信息开通百川…...
✔ ★ 算法基础笔记(Acwing)(三)—— 搜索与图论(17道题)【java版本】
搜索与图论 1. DFS1. 排列数字(3分钟)2. n-皇后问题 2. BFS(队列)1. 走迷宫二刷总结(队列存储一个节点pair<int,int>)三刷总结 走过的点标记上距离(既可以记录距离,也可以判断是否走过) ★ ★ 例题2. 八数码二刷…...
初试占比70%,计算机招生近200人,安徽理工大学考情分析
安徽理工大学 考研难度(☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文980字,预计阅读:3分钟 2023考情概况 安徽理工大…...
LeetCode题解:1720. 解码异或后的数组,异或,JavaScript,详细注释
原题链接: https://leetcode.cn/problems/decode-xored-array/ 解题思路: 异或有如下性质: a ^ a 0a ^ 0 aa ^ b b ^ a 根据题意,已知encoded[i - 1] arr[i - 1] ^ arr[i],可以做如下转换: encoded[i…...
【C刷题】day2
一、选择题 1、以下程序段的输出结果是( ) #include<stdio.h> int main() { char s[] "\\123456\123456\t"; printf("%d\n", strlen(s)); return 0; } A: 12 B: 13 C: 16 D: 以上都不对【答案】: A 【解析】…...
Apollo源码安装的问题及解决方法
问题一 在进行git clone时,会报错Failed to connect to github.com port 443: Timed out,经过实践后推荐以下两种方法。 方法一:在原地址前加https://ghproxy.com 原地址:git clone https://github.com/ApolloAuto/apollo.git …...
Flutter 挖孔屏的状态栏占用问题怎么解决,横屏后去掉了状态栏,还是会有一块黑色的竖条
使用下方代码后依旧有一条黑色的区域 overridevoid initState() {// TODO: implement initStatesuper.initState();///关闭状态栏,与底部虚拟操作按钮SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: []);//隐藏状态栏,底部按钮栏S…...
Layui快速入门之第九节 表格事件的使用
目录 一:事件 二:头部工具栏事件 三:排序切换事件 四:列拖拽宽度后的事件 五:列筛选(显示或隐藏)后的事件 六:行单击和双击事件 七:行右键菜单事件 八:…...
[2023.09.14]: Rust的条件编译
关于条件编译,我的记忆是10多年前,写C#的时代了,最近10年写Python和Javascript代码,虽然Javascript中也可以通过插件实现条件编译的效果,但是用起来太憋足了。当我在Yew的SSR开发模式中看到条件编译的配置时࿰…...
数据清洗:数据挖掘的前期准备工作
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...
基于FPGA的图像sobel锐化实现,包括tb测试文件和MATLAB辅助验证
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 将FPGA的仿真结果导入到matlab显示图像效果 2.算法运行软件版本 MATLAB2022a,vivado2019.2 3.部分核心程序 .................................…...
HDMI 直通 ILA 调试实验
FPGA教程学习 第十四章 HDMI 直通 ILA 调试实验 文章目录 FPGA教程学习前言实验原理程序设计实验过程实验尝试总结TODO 前言 HDMI 输入直通到 HDMI 输出的显示,完成一个简单的 HDMI 输入输出检测。 实验原理 开发板 HDMI 输出接口芯片使用 ADV7511,HD…...
基于Qt4开发曲线绘制交互软件Plotter
目前市面上有很多曲线绘制软件,但其交互功能较差。比如,想要实现数据的交互,同步联动等,都需要大量繁琐的人工操作。所以讲想开发一款轻量级的曲线绘制交互软件。下面就以此为案例,记录一下基于Qt4的开发过程。 目录 1 需求 2 技术路线 3 开发流程 1 框架搭建 2 菜单…...
数据分享|R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病...
全文链接:http://tecdat.cn/?p23061 这个数据集(查看文末了解数据免费获取方式)可以追溯到1988年,由四个数据库组成。克利夫兰、匈牙利、瑞士和长滩。"目标 "字段是指病人是否有心脏病。它的数值为整数,0无…...
【深度学习】 Python 和 NumPy 系列教程(十五):Matplotlib详解:2、3d绘图类型(1):线框图(Wireframe Plot)
目录 一、前言 二、实验环境 三、Matplotlib详解 1、2d绘图类型 2、3d绘图类型 0. 设置中文字体 1. 线框图(Wireframe Plot) 一、前言 Python是一种高级编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法而闻名࿰…...
阿里云CDN缓存配置及优化-oss绑定CDN缓存自动刷新功能
参考阿里云官网文档:https://help.aliyun.com/practice_detail/603170 1.缓存时间配置 在缓存管理中,可以方便地指定目录和文件后缀名在CDN节点上的缓存时间,缓存时长配置的长短,取决于源站对该文件的变更频率。我们需要分析下业务…...
气象站有什么用?有哪些类型
气象站是一种用于收集、分析和处理气象数据的设备,能够为人们提供及时、准确的气象数据和决策支持。 一、气象站的作用 预测天气变化 气象站最重要的作用之一是进行预测天气变化。通过气象站的连续监测和数据分析,可以预测未来的天气情况,…...
【深度学习】卷积神经网络(LeNet)
卷积神经网络 LeNet 前言LeNet 模型代码实现MINST代码分块解析1 构建 LeNet 网络结构2 加载数据集3 初始化模型和优化器4 训练模型5 训练完成 完整代码 Fashion-MINST代码分块解析1 构建 LeNet 网络结构2 初始化模型参数3 加载数据集4 定义损失函数和优化器5 训练模型 完整代码…...
什么是数据仓库,解释数据仓库的结构和ETL过程
1、什么是数据仓库,解释数据仓库的结构和ETL过程。 数据仓库是一种用于存储和管理数据的系统,它提供了一种统一的方式,将不同来源、不同格式和不同时间的数据集成在一起。数据仓库的结构如下: 主题域(Domain…...
无线通信网络
一、无线局域网 WLAN概念 WLAN(Wireless Local Area Network)无线局域网,目前大部分无线产品都是根据IEEE802.11标准开发。 IEEE802.11标准 名称发布时间工作频段调制技术数据速率802.111997年2.4GHz ISM频段DB/SK、DQPSK1Mbps、2Mbps802.11b1998年2.4GHz ISM频段CCK5.5Mbps…...
使用ElementPlus实现内嵌表格和内嵌分页
前言 有时遇到这样的需求,就是在表格里面嵌入一个表格,以及要求带有分页,这样在ElementPlus中很好实现。以下使用Vue2语法实现一个简单例子,毕竟Vue3兼容Vue2语法,若想要Vue3版本例子,简单改改就OK了。 一…...
flex弹性盒模型与阿里图标的使用
华子目录 flex布局flex布局原理flex使用三要素 阿里图标(字体) flex布局 相关学习网站:http://c.biancheng.net/css3/flex.html 1.flex是当前最主流的布局方式:用它布局起来更方便,取代了浮动的作用。 2.浮动布局有缺…...
linux 应用中offsetof ()是个啥?
#include <stdio.h> #include <stddef.h> // 需要包含 <stddef.h> 否则会有以下错误, 是因为找不到offsetof()而引起 // printf("age offset:%d\n",offsetof(Persion,age)); //main.cpp|11 col 43| error: expected primary-expression before …...
ununtu中vim的使用
插入命令 i:表示输入 退出命令 :w - 保存文件,不退出 vim :w file -将修改另外保存到 file 中,不退出 vim :w! -强制保存,不退出 vim :wq -保存文件,退出 vim :wq! -强制保存文件,退出 vim …...
SqlServer在尝试加载程序集 ID 65917 时 Microsoft .NET Framework 出错。服务器可能资源不足,或者不信任该程序集
问题:在尝试加载程序集 ID 65917 时 Microsoft .NET Framework 出错。服务器可能资源不足,或者不信任该程序集,因为它的 PERMISSION_SET 设置为 EXTERNAL_ACCESS 或 UNSAFE。 检查数据库属性:检查服务器是否信任该程序集 解决方法…...
Discourse 如何下载备份并恢复本地数据库
进入网站的备份界面,会看到当前所有的备份情况。 单击下载按钮。 需要注意的是,当你下载后,系统将会发送一个链接到你的邮箱地址中。 你可以使用邮箱地址中收到的链接进行数据下载。 下载链接 单击邮件中收到的下载链接地址进行下载。 下载…...
激光焊接汽车PP塑料配件透光率测试仪
随着汽车主机厂对车辆轻量化的需求越来越强烈,汽车零部件轻量化设计、制造也成为汽车零部件生产厂商的重要技术指标。零部件企业要实现产品的轻量化,在材料指定的情况下,要通过产品设计优化、产品壁厚减小和装配方式的优化来解决。使用PP材料…...
Android面试题汇总(二)
一、Java集合 1、谈谈 Java 中 List、Set 以及 Map 的区别? List:有序的,数据可以重复。。 Set:无序的,数据不能重复。 Map:键值对存储。键是唯一的,值不是唯一的。 2、谈谈 ArrayList 和 Link…...
最新模块化设计小程序系统源码完整版:开源可二开,支持DIY
随着互联网的快速发展,小程序已成为各行各业开展业务的重要工具。而模块化设计小程序系统源码完整版则是一种高效、灵活、易维护的解决方案。 分享一个最新的模块化设计小程序系统源码完整版,源码开源可二开,支持自由DIY设计,含完…...
edge扩展下载出现Download interrupted
一、Edge扩展下载失败无法下载网络问题完美解决方案 1.首先我们找到我的电脑双击我的电脑,找到C盘并打开C盘,并找到windows选项 双击打开windows并找到system32 2.双击打开system32并找到drivers 4.双击打开drivers找到etc选项 5.双击打开etc选项找到hos…...
大连手机网站建设/自助优化排名工具
http://sujitpal.blogspot.com/2007/04/lucene-search-within-search-with.htmlhttp://blog.csdn.net/lansine2005/article/details/6787472Lucene聚类分组统计功能(grouping)分类: Lucene2011-09-18 16:56 229人阅读 评论(1) 收藏 举报在搜索…...
怎么做网站写手/免费开店的电商平台
夜光序言: 我涉旷野丛林而来,你撑船渡我,入灿灿花海。 正文: data 必须是一个函数 嗯唔~~ button-counter 组件中的 data 不是一个对象,而是一个函数: data: function () { return { count: 0 }…...
java做直播网站有哪些/企业网站优化报告
ArchiMate关系摘要 结构关系名称表示定义*组成表示一个元素由一个或多个其他概念组成。聚合表示一个元素由一个或多个其他概念组成。分配表达责任分配,行为表现或执行。实现 表明实体在创造,成就,维持或操作更抽象的实体中发挥关键作用。Arch…...
广州设计公司排行榜/互联网优化
点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏 原创 | Java 2020 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库…...
iphone8多少钱/关键词优化的技巧
实验前知识准备:微软的socket开发文档,包含api的用法及解释:https://docs.microsoft.com/zh-cn/windows/win32/api/_winsock/1.什么是socket:我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层&…...
哪些网站做推广/网站建设网站设计
JS交互与webView的工作原理浅析webView是什么WebView是android中一个非常实用的组件,它和safai、chrome一样都是基于webkit网页渲染引擎,可以通过加载html数据的方式便捷地展现软件的界面。在WebView的设计中,不是什么任务都由WebView类完成的…...