阿里百川电商 SDK iOS 接入教程 (Swift + XCode 12.4)

注解

网上有很多 iOS 接入阿里百川 的文档 & 资料(官方也有接入流程的文档 0 ), 但是他们大多数使用的是 Object-C 语言, 针对的 XCode 版本也比较老。 本教程使用 Swift 语言, XCode 最新版(12.4)。

申请 百川电商 SDK 权限

前往 阿里百川 开发者控制台 1 申请 百川电商 SDK 的权限。

提示

如果您还没有应用,可以创建应用之后再申请相应的权限。

获取安全图

前往 阿里百川 开发者控制台 1 获取 v5 版本的安全图。

注解

当前 阿里百川 在改版,尚未测试 v6 版本的安全图是否可以正常初始化。

集成 阿里百川 SDK

推荐使用 CocoaPod 方式接入[免去自己需要下载依赖的麻烦].

修改 Podfile 配置

注解

如果没有 Podfile 可以手工创建。 如果您没有使用过 CocoaPods 可以查阅 CocoaPods 官方 3 的使用文档。

修改 Podfile 文件:

# 版本最低为 13.0
platform :ios, '13.7'

source 'https://github.com/CocoaPods/Specs'

# target 更改为您自己的 target
target 'tbk' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # 阿里百川 Pods
  source 'http://repo.baichuan-ios.taobao.com/baichuanSDK/AliBCSpecs.git'
  pod 'AlibcTradeSDK', '4.0.1.6'
  pod 'AliAuthSDK', '1.1.0.41-bc'
  pod 'mtopSDK', '3.0.0.3-BC'
  pod 'securityGuard', '5.4.191'
  pod 'AliLinkPartnerSDK', '4.0.0.24'
  pod 'BCUserTrack', '5.2.0.18-appkeys'
  pod 'UTDID', '1.5.0.91'
  pod 'WindVane', '8.5.0.46-bc11'

  # 其他的依赖

end

更新 Pod 依赖

编辑 & 保存 Podfile 之后,使用 pod update 下载 & 配置依赖。

使用 XCode 加载 xcworkspace 工程

如果原先 XCode 打开的是 xcodeproj 工程, 则需要重启 XCode 加载 xcworkspace 工程。

放置 安全图

把下载的安全图(yw_1222_baichuan.jpg) 放到 xcodeproj 项目的根目录。

警告

这儿下载的安全图必须是 iOS 版本的安全图。

安全图可以从 阿里百川 开发者控制台 1 下载。

如果安全图名称不一致,请手动修改图片名称(安全图名称必须为: yw_1222_baichuan.jpg)。

配置 URLScheme

如图所示:

https://cdn.jsdelivr.net/gh/QiYuTechDev/static@main/blog/202102/ali_bc_ios/修改URLScheme.png

警告

tbopen 后面的数值应该是您在淘宝开放平台上的 APPKey。 这儿的数值不是固定值。

配置 LSApplicationQueriesSchemes

如图所示:

https://cdn.jsdelivr.net/gh/QiYuTechDev/static@main/blog/202102/ali_bc_ios/LSApplicationQueriesSchemes.png

其他配置

  • 配置ATS, 允许HTTP请求.

  • 在 Targets -> Build Settings 中设置 Bitcode 为 No

引入头文件

在项目的 Bridging-Header 中 引入依赖的 百川SDK 头文件:

#import <AlibcTradeSDK/AlibcTradeSDK.h>
#import <AlibabaAuthEntrance/ALBBSDK.h>
#import <AlibabaAuthEntrance/ALBBCompatibleSession.h>
#import <AlipaySDK/AlipaySDK.h>

AppDelegate 初始化 百川 SDK

AppDelegate 类中的 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool 函数中, 添加初始化函数:

let bc = AlibcTradeSDK.sharedInstance()
bc?.asyncInit(success: {
    // 成功
}, failure: { (error) in
    // 失败
})

添加如下函数(如果 AppDelegate 中不存在):

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    logger.info("ali bc call back is hit url: \(url)")
    if let alibc = AlibcTradeSDK.sharedInstance() {
        if (alibc.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)) {
            return true
        }
    }

    return true
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
    logger.info("url: \(url), options: \(options)");

    if let alibc = AlibcTradeSDK.sharedInstance() {
        logger.error("run to here");
        if (alibc.application(app, open: url, options: nil) == true) {
            return true
        }
    }

    return true
}

SceneDelegate 初始化 百川 SDK

SceneDelegate 类中添加:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    let instance = AlibcTradeSDK.sharedInstance()!
    URLContexts.forEach { context in
        if (instance.application(nil, open: context.url, options: nil) == true) {
            return
        }
    }
}

完整的实现可以参考奇遇淘客 iOS 版 2 .

参考资料

0

百川SDK-iOS接入文档

1(1,2,3)

阿里百川 开发者控制台

2

奇遇淘客 iOS

3

CocoaPods 官方网站