前言

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

接入准备

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

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

https://img01.jituwang.com/171030/256786-1G030214S965.jpg

开始集成SDK

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

  • 推荐使用Cocoapod方式接入SDK

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

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

  • 配置URL Types

    URL Scheme为tbopen{AppKey},如tbopen123456

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

    https://img01.jituwang.com/171030/256786-1G030214S965.jpg
  • Info.plist配置

    在info.plist中,增加LSApplicationQueriesSchemes字段,并添加tbopen,tmall
    
    https://img01.jituwang.com/171030/256786-1G030214S965.jpg
配置ATS,允许HTTP请求
  • SDK初始化 在 AppDelegate 中初始化SDK

    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;当然,也可以继续处理,比如记录应用跳转来源日志等。 以下代码不现实,会导致通过手淘授权登陆,跳回来没反应等问题

    // 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;
    
        // 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;} 
    
  • 方法说明

    /**
     * 使用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;
    
    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";//拉起天猫
```
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];
```

```
自定义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上线无法跳转到手淘,就比较坑了,在这里特别提醒大家一下,建议在项目中用个文件夹装着,引入项目中,文件夹后面加上中文备注。
https://img01.jituwang.com/171030/256786-1G030214S965.jpg
  • backUrl设置有误,导致跳转到手淘,然后点击返回,回不来App
https://img01.jituwang.com/171030/256786-1G030214S965.jpg
上面是官方文档的写法,一开始也是对照文档这么配置backUrl,结果就是在手淘点返回一直回不来,期间花了不少时间,重新对文档,查配置情况,一无所获。后来试着改成下面这样,就OK了!
https://img01.jituwang.com/171030/256786-1G030214S965.jpg

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