Flutter插件之阿里百川

2023-09-14 16:11:35

上一篇:Flutter插件的制作和发布,我们已经了解了如何制作一个通用的双端插件,本篇就带领大家将阿里百川双端sdk制作成一个flutter插件供项目调用!

打开阿里百川网站: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 *)application
            openURL:(NSURL *)url
            options:(NSDictionary<NSString *,id> *)options {
     
    if (@available(iOS 9.0, *)) {
        __unused BOOL isHandledByALBBSDK=[[AlibcTradeSDK sharedInstance]
                                          application:application
                                          openURL:url
                                          options:options];
    } else {
        // Fallback on earlier versions
    }//处理其他app跳转到自己的app,如果百川处理过会返回YES
     
    return 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:nil
                                               openURL:obj.URL
                                               options: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() {
                @Override
                public void onSuccess() {
                    result.success(getResult(0));
                }

                @Override
                public void onFailure(int code, String msg) {
                    result.success(getResult(-1, code + " " + msg));
                }
            });
        }

gitee地址:alikit4

更多推荐

万里牛与金蝶云星空对接集成查询调拨单连通调拨单新增(万里牛调拨单-金蝶【直接调拨单】)

万里牛与金蝶云星空对接集成查询调拨单连通调拨单新增(万里牛调拨单-金蝶【直接调拨单】)源系统:万里牛万里牛是杭州湖畔网络技术有限公司旗下SaaS软件品牌,主要针对电商、外贸、实体门店等业务群体,帮助企业快速布局新零售,提升订单处理效率,实现数据化业务管理,为企业降本增效。对接目标系统:金蝶云星空金蝶K/3Cloud结合

blog--4美化主题

配置/美化bug把你的网站名/themes/hugo-theme-stack/exampleSite/目录下的config.yaml复制到网站根目录(也就是你的网站名这个目录)删除网站根目录的config.tomlstack主题不需要这个配置文件打开网站根目录下的config.yaml进行填空博主头像放在/themes

Twitter账号优化:吸引更多关注与互动

创建Twitter账号并进行优化优化你的Twitter个人数据有助于提高企业的可视性并促进与用户的互动。通过与其他社交媒体页面的相互协调,你还可以建立一个专业且一致的品牌形象。创建一个标准的Twitter个人数据非常简单,但为了优化它适应您的业务需求,需要一些专业知识。前提是您是刚刚加入Twitter,还是已经在这个平

基于Python+Flask实现一个简易网页验证码登录系统案例

在当今的互联网世界中,为了防止恶意访问,许多网站在登录和注册表单中都采用了验证码技术。验证码可以防止机器人自动提交表单,确保提交行为背后有一个真实的人类用户。本文将向您展示如何使用Python的Flask框架来创建一个简单的验证码登录系统。1.开始之前首先,确保你已经安装了以下所需的库:pipinstallflaskP

2023年浙工商MBA新生奖学金名单公布,如何看待?

&nbsp;&nbsp;&nbsp;&nbsp;浙工商MBA项目官方最新公布了2023年的非全日制新生奖学金名单,按照政策约定,共分为特等奖学金1名,一等奖学金10名,二等奖学金15名,三等奖学金30名,额度对应3万、1万、0.8万、0.5万不等,主要名单信息如下:2023浙工商MBA奖学金名单2023浙工商MBA奖学

vue+element-ui el-descriptions 详情渲染组件二次封装(Vue项目)

目录1、需求2.想要的效果就是由图一变成图二​编辑3.组件集成了以下功能4.参数配置示例代码参数说明5,组件6.页面使用1、需求一般后台管理系统,通常页面都有增删改查;而查不外乎就是渲染新增/修改的数据(由输入框变成输入框禁用),因为输入框禁用后颜色透明度会降低,显的颜色偏暗;为解决这个需求于是封装了详情组件2.想要的

【C++】C++11——列表初始化及decltype

统一的列表初始化{}的初始化initializer_list容器autotypeid(变量名).name()decltype统一的列表初始化注意这里的列表初始化和初始化列表是两个性质哦{}的初始化在C++98的时候,我们的大括号只准许到了对数组或者结构体元素进行统一的列表初始化。例如//结构体structPoint{i

搜索技术领域的“奥林匹克”,飞桨支持“第二届百度搜索创新大赛”正式启动!...

秋季,是丰收的季节,以“新搜索·新奇点”为主题、由百度搜索携手英伟达联合发起,飞桨AIStudio星河社区支持的第二届百度搜索创新大赛,开赛啦!超过60万丰厚奖金,十余套赛事优质课程,优质的竞赛交流社区,等你来战!五大赛道:聚焦百度一线核心业务场景+大模型产品创新本次大赛设立五大赛题,题目涉及搜索核心业务场景,如语义检

利用面向对象方法,处理数据文件【Python】

题目背景:处理两份数据文件(文本数据和JSON数据),用面向对象的方法,效果图用柱状图呈现。本题思路:1.首先,创建一个【基础数据类】,名为Record,它将包含成员属性和成员方法。这个类将作为数据处理的基础结构。2.接着,创建一个【处理数据父类】,名为FileReader,它将包含成员方法,这个成员方法将被子类继承和

【SDXL_LORA模型训练详细教程(含云端教程)】

个人网站:https://tianfeng.space一、前言之前写过一篇SD1.5LORA模型的炼制方法,有的人想要我详细点说说秋叶启动器的lora训练器,SDXL建议使用秋叶的训练器,SD1.5赛博丹炉,个人习惯仅供参考!这次基于sdxl_lora模型的训练,顺便给大家详细的讲讲训练过程。SD1.5_lora训练文

【文件上传-配置文件】crossdomain.xml跨域策略配置文件上传

目录一、0x00前言二、基础知识1、Flash2、crossdomain.xml文件3、crossdomain.xml格式4、crossdomain.xml相关参数三、漏洞利用1、方法:2、上传漏洞配置文件一、0x00前言在很多地方都会见查是否跨域比如某些特定的步骤、CSRF、flash跨域劫持等链接二、基础知识1、F

热文推荐