美文网首页iOS学习笔记专注iOS开发
ios 接入阿里百川电商sdk的经验和坑(一把眼泪一把鼻涕的完成

ios 接入阿里百川电商sdk的经验和坑(一把眼泪一把鼻涕的完成

作者: SnailLi | 来源:发表于2017-08-03 19:53 被阅读6921次

    最近在接入阿里百川电商sdk,简直是可以用一把眼泪一把鼻涕来形容这个过程,文档很坑。所以,今天我把我接入阿里百川电商sdk的经验和坑写出来,希望对你们有所帮助。

    一、注册阿里巴巴无线平台http://baichuan.taobao.com/?spm=a3c0d.7662649.0.0.4Fp7OJ
    1、注册完成以后,点击电商sdk

    65703B28-6A67-4A0D-A06D-D559640C2D60.png

    2、点击立即使用

    6DB1B343-F8BF-4E1D-8265-AABC85E86C2C.png

    3、创建应用

    4B9747F0-D25E-4BA8-9524-787D1B6C2D2D.png

    4、做好准备工作,可以参考这里:http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.8115090.0.0&treeId=129&articleId=105645&docType=1

    二、前期的准备工作做完了,现在才是重点(ios 端的接入)
    1、下载最新的sdk:http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.LM0ydN&treeId=129&articleId=106383&docType=1

    2、iOS百川组件说明(根据自己的项目需求可以自定义的接入,注:必选的就一定要接入)

    打包体积说明
    目前我们给的压缩包,是包含全部功能的.使用方可以根据需要裁剪.
    必选组件+ 人机识别,打包后实际增加的体积在2m左右. 安全相关的三个包体积占比较大,一半左右.体积上暂时没有改善的空间.

    基础安全组件(必选)
    安全黑匣子(无线保镖),加密&解密,安全签名,风控相关内容;
    SGMain.framework (752K)
    SecurityGuardSDK.framework (80K)

    ut(必选)
    组件可用性统计
    UTMini.framework (352K)
    UTDID.framework (65K)

    登陆授权(必选)
    AlibabaAuthExt.framework (25K)
    AlibabaAuthSDK.framework (247K)
    AlibabaAuthSDK.bundle

    基础电商组件(必选)
    包含打开detail,淘客分润,jsbridge注入等功能.
    AlibcTradeSDK.framework (342K)
    NBResource.bundle

    mtop(必选)
    Mtop,网关(稳定的高性能无线RPC网关,网关本身包含了一套安全体系,包括加密传输、防攻击、防刷、防篡改、过载保护等安全策略,同时针对无线网络的特点,在连通性、网络加速、流量方面进行了针对性优化
    OpenMtopExt.framework (76K)
    OpenMtopSDK.framework (92K)

    登陆绑定(可选)
    账号绑定免登功能扩展包,仅限于优酷、微博等合作方;使用前请先和@御道确认是否开通账号绑定免登功能
    AlibabaAuthBind.framework

    alipay:(可选)
    支付宝SDK,手机支付宝支付接口开发包主要用来向第三方应用程序提供便捷、安全以及可靠的支付服务。需要使用支付宝极简支付的isv需要该组件,否则会降级到h5支付,功能不会有影响,但是用户体验会降低
    AlipaySDK.bundle
    AlipaySDK.framework (163K)

    applink(可选)
    applink,打通“手机淘宝”与三方app的桥梁,实现手机淘宝与三方app之间的往返跳转,包括登陆时跳手淘授权,用手淘打开商品页,店铺等
    不包含该组件,上述功能会降级到h5使用.功能无影响,但是用户体验会降低.
    该包体检较小,非必要情况不要裁剪.
    TBAppLinkSDK.framework (40K)

    人机识别–安全(可选)
    安全人机功能,用于红包,优惠券站外发放防刷、链路安全。接入优惠券/红包的业务方需要选择该组件。
    (红包目前还没专门的组件,会通过h5方式给出发放通道.h5通道依赖人机识别)
    SGSecurityBody.framework (161K)

    优惠券(可选)
    在第三方内容平台内,用户对透出的淘宝/天猫优惠券可通过一键点击将其加入淘宝/天猫卡券。
    AlibcTradeContainer.framework (31K)
    AlibcCouponComponent.framework (11K)

    一键加购(可选)
    在第三方内容平台内,用户对透出的淘宝/天猫商品可通过一键点击将其加入淘宝/天猫购物车。
    AlibcTradeContainer.framework (31K)
    AlibcAddCartComponent.framework (9K)
    AliBCWant.bundle
    AliBCWant.framework (58K)

    3、把sdk导入工程

    CAE01DB9-37DE-47C1-B4D6-02E0CFA920B9.png

    4、把下载的yw_1222.png图片文件添加到工程中,缺少该文件会导致AlibcTradeSDK初始化失败(注意:图片不要改名字;注意:图片不要改名字;注意:图片不要改名字;)

    B1103BAE-8330-40E6-BD42-916E5090746C.png

    5、添加依赖库(缺一不可)
    还要添加:CoreMotion.framework

    LB1EMx2KFXXXXczXpXXXXXXXXXX-2.png

    6、添加 -lstdc++ -ObjC (一定要添加,不添加初始化会失败,一定要注意大小写)

    CDC743F4-0A31-4042-91E1-4602E9D10358.png

    7、配置URL Types
    URL Scheme为tbopen{AppKey},如tbopen123456
    是AppKey, 不是AppID哟!

    423E4521-14EC-4B40-9409-804D150F4B87.png

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

    3C0C88C2-EE80-4E2D-9151-9855C5DAEB61.png

    9、配置ATS, 允许HTTP请求

    TB1jeddNXXXXXbpXXXXXXXXXXXX-607-412.png

    三、初始化SDK

    在 AppDelegate 中初始化SDK

        // 百川平台基础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:YES];
    

    }

    在- (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;
    }

    在- (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;
    

    }

    设置接口说明
    初始化SDK相关接口

    初始化百川电商相关组件,该方法异步执行,使用百川电商相关功能前,必须调用初始化。
    /**

    • 百川电商SDK初始化【异步】
      */
    • (void)asyncInitWithSuccess:(void (^)())onSuccess failure:(void (^)(NSError *error))onFailure;

    设置SDK API调用默认方式
    /**

    • 是否走强制H5的逻辑。NO:按照默认规则策略打开页面;YES:全部页面均为H5打开;
    • 注意:初始化完成后调用才能生效
    • @param isforceH5 (默认为NO)
      */
    • (void) setIsForceH5(BOOL isforceH5)

    设置SDK 淘客打点策略
    /**

    • 设置是否使用同步淘客打点。YES:使用淘客同步打点;NO:关闭同步打点,使用异步打点;
    • 注意:初始化完成后调用才能生效;一般不需要特别设置,保持默认值即可
    • @param isSyncForTaoke(默认为YES)
      */
    • (void)setSyncForTaoke(BOOL isSyncForTaoke)

    设置淘客全局参数

    /**

    • 设置全局淘客参数,方便开发者用同一个淘客参数,不需要在show接口重复传入
    • 注意:初始化完成后调用才能生效
    • @param taokeParams 淘客参数
      */
    • (void)setTaokeParams(AliTradeTaokeParams taokeParams)

    设置渠道信息
    /**

    • 设置渠道信息(如果有渠道专享价,需要设置)
    • 注意:初始化完成后调用才能生效
    • @param typeName : 渠道类型(默认为:0)
    • @param channelName : 渠道名称(默认为:null)
      */
    • (void)setChannel(NSString* typeName, NSString* channelName)

    设置isv 版本
    /**

    • 设置isv的版本 ,通常为三方app版本,可以不进行设置;默认1.0.0
    • 注意:初始化完成后调用才能生效
    • @param isvVersion
      */
    • (void)setISVVersion(NSString* isvVersion)

    调用说明
    SDK从3.0.0版本以后,使用百川电商组件提供的AlibcTradeService可以方便的打开交易环节中的各种页面。使用百川SDK的webview打开page,可以实现淘宝账号免登以及电商交易支付流程
    show接口
    /**

    • 使用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 * __nullableresult))onSuccess tradeProcessFailedCallback:(nullable
      void(^)(NSError * __nullable error))onFailure;

    showParams 参数
    拉起手淘
    AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
    showParam.openType = AlibcOpenTypeNative;
    showParam.backUrl=@"tbopenXXXXX://";
    showParam.isNeedPush=isNeedPush;

    拉起天猫
    AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
    showParam.openType = AlibcOpenTypeNative;
    showParam.backUrl=@"tbopenXXXXX://";
    showParam.isNeedPush=isNeedPush;
    showParam.linkKey = @"tmall_scheme";
    //拉起天猫

    page参数
    其中page参数用于指定需要打开的页面,可以使用的页面类型如下表,由AlibcTradePageFactory生成:

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

    //添加商品到购物车
    id<AlibcTradePage> page = [AlibcTradePageFactory addCartPage: @"123456"];
    //根据链接打开页面
    id<AlibcTradePage> page = [AlibcTradePageFactory page: @"http://h5.m.taobao.com/cm/snap/index.html?id=527140984722"
    ];

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

    //打开我的订单页
    id<AlibcTradePage> page = [AlibcTradePageFactory myOrdersPage: 0 isAllOrder:YES];

    //打开我的购物车
    id<AlibcTradePage> page = [AlibcTradePageFactory myCartsPage];

    //淘客信息
    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];
    }

    到这里基本上可以了,但是你真机发现会报错,原因就是你少设置了一步,光访问当没有告诉:把Enable Bitcode设置为NO

    B9B6BF6D-1341-49F3-B78E-20EE85B2744D.png

    到这里大功告成!
    希望能帮到你!

    相关文章

      网友评论

      • zsj_嘉宝:我的工程集成以后一直报错,但是也不少静态库,bitcode也关了
      • Fnoz:配了自己的安全图和appkey等等,demo点击没反应,一直报错“-生成 ttid 时 appkey 不能为空”遇见过吗
      • 我的天空蔚蓝色:复制阿里百川的文档 很高兴么
      • 83ea29f2875d:您好 请问下可以帮我看下问题吗
        id<AlibcTradePage> page = [AlibcTradePageFactory page: url];

        AlibcTradeShowParams* showParam = [[AlibcTradeShowParams alloc] init];
        showParam.openType = AlibcOpenTypeH5;
        showParam.isNeedPush = YES;
        showParam.backUrl = @"";


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


        [[AlibcTradeSDK sharedInstance].tradeService show:_parentCtl.rt_navigationController page:page showParams:showParam taoKeParams:taokeParams trackParam:nil tradeProcessSuccessCallback:^(AlibcTradeResult * _Nullable result) {

        NSLog(@"%@",result);

        if (result) {
        if (result.result == AlibcTradeResultTypePaySuccess) {
        YCLog(@"支付成功");
        }
        }
        } tradeProcessFailedCallback:^(NSError * _Nullable error) {
        if (error) {
        NSLog(@"返回失败app%@",error);
        }
        }];
        支付成功 一直不走成功的回调
      • RiberWang:请问聊天列表的返回按钮可以自定义吗?
      • Maj_sunshine:我现在有个问题 就是阿里百川客服确定有压缩包么 。我拉进项目三百多兆,包体大了不知道多少。
      • 幸福的鱼:导入的流量怎么样?
        SnailLi:请具体描述你的问题,谢谢!
      • 周蔚桥:起步阶段,第一个问题就被挡住了。申请了百川账号,但是app是从头做起,还没有上市场。请问这种情况下,我如何在百川创建应用(无APP下载地址)
        SnailLi:@周蔚桥 还没有上市场的情况下也可以拿到app下载链接,app下载链接前面部分都一样的,只有app id不一样而已,只要你的app创建了证书就可以在App Store上创建项目(就是app上线的时候要在App Store上创建项目的,创建以后就会分配到一个唯一的app id),有了app id 就可以形成app下载链接啦。如有不懂,加qq聊 3197857495
      • 柯元:请问返回按钮的logo图片怎么做出来的?
        5ceffd6f0b3d:@SnailLi 就是拉起手淘后那个小扳手,我也没有logo,只有返回两个字,不知道设哪里才对
        SnailLi:请描述清楚哪个按钮
      • 爱谁谁__:亲 请问一下
        在 AppDelegate 中初始化SDK 这步中 所需要的淘客pid 具体指的是什么 是应用证书里的pid mm_123456789_0_0 还是 需要在阿里妈妈新建一个推广位得到的pid mm_123456789_12345678_123456789?
        SnailLi:注意观察你会发现我有填写我的个人资料
        有缘人2830:有没有qq啊,请教啊
        SnailLi:@爱谁谁__ 为你自己申请的阿里妈妈淘客pid
      • meiqianfangwen:我想用阿里百川在IOS APP里面做一个商城,但是看到AlibcSDK的DEMO里面没有列表页。请问一下是不是要自己做商品列表页,然后点击再用SDK去到淘宝的页面?
        SnailLi:@meiqianfangwen 不可以。
        1、首先调用阿里百川需要传入商品id的才能在阿里的后台找到这个商品,然后才能打开
        2、通过后台去阿里取到商品,阿里会为每个商品分配一个id
        3、如果你自己做固定的商品,请问你有商品id吗?就算你自己写上商品id,那请问你写的商品id能在阿里后台找到与之匹配的商品吗?找不到这个商品如何在阿里百川的sdk里打开,那不能打开纳入后完成购买?连这个商品都找不到,就不能购买了。
        4、总结:必须要在阿里那边获取到商品,然后再通过这个商品的id利用阿里百川sdk打开完成购买
        5、再总结,我觉得你不是程序员:smile:
        meiqianfangwen:@SnailLi 我只是显示十个固定的商品,列表内容也是固定的,不考虑收益分成之类的,只要能展示和交易即可。是不是不需要做后台也行?
        SnailLi:@meiqianfangwen 是的,商品列表都是后台那边整理好的,因为后台的接入也有单独的接口文档的
      • 汪汪we:你好,在商品详情的h5直接返回,会有淘宝webview的内存泄漏么?
        汪汪we:你好,请问淘客参数怎么设置的啊,“AlibcTradeTaokeParams”这个。我这边设置后进行购买,在淘宝联盟后台看不到,急急急 ;秋秋:452311685;非常感谢。
        SnailLi:@汪汪we 这个暂时还没有遇到过呢
      • 邦_:现在还不支持bitcode?
        SnailLi:@邦_ 现在不知道呢,做完了以后我就没去维护了,现在都在忙其他的项目
      • 介是阿姐:您好,有个问题咨询一下,我是使用的百川3.1的SDK,没有找到授权的开发文档,我用的这个方法 [[ALBBSDK sharedInstance]auth:[ViewController new] successCallback:^(ALBBSession *session) {
        NSLog(@"授权成功 ");
        } failureCallback:^(ALBBSession *session, NSError *error) {

        }];
        可是没有调起淘宝,不知道改怎么处理了~
        AllenZYQ:这是注册阿里百川呀。 为什么要调起淘宝?
      • 黄煎鱼:非常感谢,我现在出现的问题是淘宝登录一直出现没授权。。。
        SnailLi:@MarvinDev_3c85 没有安装手淘就会调起网页授权的
        MarvinDev_3c85:我也出现没授权,主要是当手机没有装淘宝的时候,sdk自己会吊起网页,在这个页面登陆的时候提示api未授权,怎么回事吖
        SnailLi:@黄煎鱼 现在解决了吗?

      本文标题:ios 接入阿里百川电商sdk的经验和坑(一把眼泪一把鼻涕的完成

      本文链接:https://www.haomeiwen.com/subject/lgxplxtx.html