前言

最近在接触阿里百川SDK过程中,发现一些问题觉得有必要通过文档让大家了解下,首先看下阿里百川是什么?
阿里百川开放淘系电商能力,帮助APP开发者在各种场景下快速、低成本搭建无线电商导购业务,开发用户消费需求,实现商业变现。

接入准备

建议阅读下官方文档中的接入指南,有相关介绍这里就不累赘,主要提下重点要注意的。

安全图片 : 务必按要求配置好安全图片,并放入项目中。安全图片其实就是将项目签名,包名等信息存储在图片中,编译启动时进行校验,图片名称必须按照规定。
如果有多个项目,务必选择好对应的项目,否则会导致鉴于不匹配情况。

Snip20190822_1

开始集成SDK

  • 安全图片放入项目中,图片名为yw_1222.jpg

  • 推荐使用Cocoapod方式接入SDK

    1
    2
    终端中执行以下命令,添加百川的源
    pod repo add AliBCSpecs http://repo.baichuan-ios.taobao.com/baichuanSDK/AliBCSpecs.git
1
2
3
Podfile添加(具体版本以百川开发者网站为准)
source 'http://repo.baichuan-ios.taobao.com/ baichuanSDK/AliBCSpecs.git'
pod 'AlibcTradeSDK'

手动方式引入SDK参考文档,这里就不讲了。

  • 配置URL Types

    URL Scheme为tbopen{AppKey},如tbopen123456

    是在阿里百川注册的应用AppKey1566457415236

  • Info.plist配置

    1
    在info.plist中,增加LSApplicationQueriesSchemes字段,并添加tbopen,tmall

    Snip20190822_3

    1
    配置ATS,允许HTTP请求

    Snip20190822_5

  • SDK初始化
    在 AppDelegate 中初始化SDK

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    import <AlibcTradeSDK/AlibcTradeSDK.h>

    - (BOOL)application:(UIApplication *)application {
    // 百川平台基础SDK初始化,加载并初始化各个业务能力插件
    [[AlibcTradeSDK sharedInstance] asyncInitWithSuccess:^{

    } failure:^(NSError *error) {
    NSLog(@"Init failed: %@", error.description);
    }];

    // 开发阶段打开日志开关,方便排查错误信息
    //默认调试模式打开日志,release关闭,可以不调用下面的函数
    [[AlibcTradeSDK sharedInstance] setDebugLogOpen:YES];

    // 配置全局的淘客参数
    //如果没有阿里妈妈的淘客账号,setTaokeParams函数需要调用
    AlibcTradeTaokeParams *taokeParams = [[AlibcTradeTaokeParams alloc] init];
    taokeParams.pid = @"mm_XXXXX"; //mm_XXXXX为你自己申请的阿里妈妈淘客pid
    [[AlibcTradeSDK sharedInstance] setTaokeParams:taokeParams];

    //设置全局的app标识,在电商模块里等同于isv_code
    //没有申请过isv_code的接入方,默认不需要调用该函数
    [[AlibcTradeSDK sharedInstance] setISVCode:@"your_isv_code"];

    // 设置全局配置,是否强制使用h5
    [[AlibcTradeSDK sharedInstance] setIsForceH5:NO];

    return YES;
    }
  • 处理应用跳转

    为了正常使用百川内置的应用跳转处理,需要调用百川SDK的方法。建议优先调用百川处理,如果百川已处理,可以直接返回YES;当然,也可以继续处理,比如记录应用跳转来源日志等。
    以下代码不现实,会导致通过手淘授权登陆,跳回来没反应等问题

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // iOS9以下的实现这个方法,如果需要兼容iOS9以下的话
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    /* 老接口写法 已弃用,建议使用新接口
    if (![[AlibcTradeSDK sharedInstance] handleOpenURL:url]) {
    // 处理其他app跳转到自己的app
    }
    return YES;
    */

    // 新接口写法
    if (![[AlibcTradeSDK sharedInstance] application:application
    openURL:url
    sourceApplication:sourceApplication
    annotation:annotation]) {
    // 处理其他app跳转到自己的app
    }
    return YES;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    // iOS9以上的实现这个方法
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {

    /* 老接口写法 已弃用,建议使用新接口
    if (![[AlibcTradeSDK sharedInstance] handleOpenURL:url]) {
    // 处理其他app跳转到自己的app
    }
    return YES;
    */

    // 新接口写法
    if (![[AlibcTradeSDK sharedInstance] application:application
    openURL:url
    options:options]) {
    //处理其他app跳转到自己的app,如果百川处理过会返回YES
    }
    return YES;}
  • 方法说明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    /**
    * 使用isv自己的webview打开page,可以实现淘宝账号免登以及电商交易支付流程
    *
    * @param parentController webView所在的view controller.
    * @param webView isv自己的webview,请先设置好自己的delegate先调用本接口,否则拦截登陆等逻辑会失效
    * @param page 想要打开的page
    * @param showParams 打开方式的一些自定义参数
    * @param taoKeParams 淘客参数
    * @param trackParam 链路跟踪参数
    * @param tradeProcessSuccessCallback 交易流程中成功回调(加购成功/发生支付)
    * @param tradeProcessFailedCallback 交易流程中退出或者调用发生错误的回调
    *
    * @return 0: 标识跳转到手淘打开了
    1: 标识用h5打开
    -1: 标识出错
    */
    - (NSInteger) show:(UIViewController * __nonnull)parentController
    webView:(nullable UIWebView*)webView
    page:(id<AlibcTradePage> __nonnull)page
    showParams:(nullable AlibcTradeShowParams*)showParams
    taoKeParams:(nullable AlibcTradeTaokeParams *)taoKeParams
    trackParam:(nullable NSDictionary*)trackParam
    tradeProcessSuccessCallback:(nullable void (^)(AlibcTradeResult * __nullable result))onSuccess
    tradeProcessFailedCallback:(nullable void (^)(NSError * __nullable error))onFailure;
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     showParams 参数

    1. 调起手淘
    AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
    showParam.openType = AlibcOpenTypeNative;
    // showParam.backUrl=@"tbopenXXXXX://"; // 官方文档的有问题
    showParam.backUrl=@"tbopenXXXXX"; // 亲测有效
    showParam.isNeedPush=isNeedPush;

    2. 调起天猫
    AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
    showParam.openType = AlibcOpenTypeNative;
    // showParam.backUrl=@"tbopenXXXXX://"; // 官方文档的有问题
    showParam.backUrl=@"tbopenXXXXX"; // 亲测有效
    showParam.isNeedPush=isNeedPush;
    showParam.linkKey = @"tmall_scheme";//拉起天猫
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    page参数 page详情页可以通过自己WebView显示,也可以使用SDK定制的
    其中page参数用于指定需要打开的页面,可以使用的页面类型如下表,由AlibcTradePageFactory生成:

    //打开SDK定制商品详情页
    id<AlibcTradePage> page = [AlibcTradePageFactory itemDetailPage: @”123456”];

    //根据链接打开页面
    id<AlibcTradePage> page = [AlibcTradePageFactory page: @"http://h5.m.taobao.com/cm/snap/index.html?id=527140984722"];

    //打开店铺
    id<AlibcTradePage> page = [AlibcTradePageFactory shopPage: @”12333333”];


    //淘客信息
    AlibcTradeTaokeParams *taoKeParams=[[AlibcTradeTaokeParams alloc] init];
    taoKeParams.pid=nil; //
    //打开方式
    AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
    showParam.openType = AlibcOpenTypeAuto;

    [[AlibcTradeSDK sharedInstance].tradeService show: self.navigationController page:page showParams:showParam taoKeParams: nil trackParam: trackParam tradeProcessSuccessCallback:self.onTradeSuccess tradeProcessFailedCallback:self.onTradeFailure];
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
自定义WebView显示详情页

id<AlibcTradePage> page = [AlibcTradePageFactory itemDetailPage: @”123456”];
//淘客信息
AlibcTradeTaokeParams *taoKeParams=[[AlibcTradeTaokeParams alloc] init];
taoKeParams.pid= nil;
//打开方式
AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
showParam.openType = AlibcOpenTypeAuto;


// YourWebViewController类中,webview的delegate设置不能放在viewdidload里面,必须在init的时候,否则函数调用的时候还是nil
YourTradeWebViewController* myView = [[YourTradeWebViewController alloc] init];


NSInteger ret = [[AlibcTradeSDK sharedInstance].tradeService show: myView webView: myView.webView page:page showParams:showParam taoKeParams: taoKeParams trackParam:nil tradeProcessSuccessCallback:self.onTradeSuccess tradeProcessFailedCallback:self.onTradeFailure];
//返回1,说明h5打开,否则不应该展示页面
if (ret == 1) {
[self.navigationController pushViewController:view animated:YES];
}

注意点:

官网文档基本讲的非常清楚,但在开发中才会遇到一点坑,这边在最后给大家讲讲我在对接过程中遇到的问题,帮大家规避,我遇到的问题也花了不少时间解决,阿里的SDK有个毛病,就是客服太难联系上,而且只留个旺旺群,还得下载个旺信,加群,然后群里也没人回复解答,最近自己只能靠自己。

  • 安全图片,如果不是你接的SDK,或者未对该图片了解和备注,很可能把图片当成废弃的删了,有朋友就遇到这个问题,删了APP上线无法跳转到手淘,就比较坑了,在这里特别提醒大家一下,建议在项目中用个文件夹装着,引入项目中,文件夹后面加上中文备注。
    Snip20190822_6
  • backUrl设置有误,导致跳转到手淘,然后点击返回,回不来App

Snip20190822_7
上面是官方文档的写法,一开始也是对照文档这么配置backUrl,结果就是在手淘点返回一直回不来,期间花了不少时间,重新对文档,查配置情况,一无所获。后来试着改成下面这样,就OK了!
Snip20190822_9

希望这篇文章能给到大家一些帮助,如有疑问欢迎一同来学习交流。QQ群:912759811。