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

最近在接入阿里百川电商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 *)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 __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 page = [AlibcTradePageFactory itemDetailPage: @”
123456”];

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

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

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

//打开我的购物车
id 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 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

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

你可能感兴趣的:(ios 接入阿里百川电商sdk的经验和坑(一把眼泪一把鼻涕的完成))