百川SDK-iOS接入文档

更新时间:2022/08/23 访问次数:87992

接入SDK前, 请先阅读接入准备

新用户:

老用户:

注意需要仔细阅读下面工程配置,与原有配置有所区别的地方,环境检查可以先忽略yw_1222.jpg问题。

1. 集成SDK

目前百川只支持直接添加framework的方式进行依赖集成

添加百川SDK的framework依赖

SDK下载地址:https://baichuan.taobao.com/docs/doc.htm?treeId=129&articleId=106383&docType=1
注:该版本需使用V6版本的安全图片,V6版本的安全图片可在《百川套件平台》 下载

添加系统库和资源文件,资源文件在framework里,包括图片和bundle,一定要单独添加资源文件。

image

添加资源文件

image

2. 配置百川宿主工程

添加系统库libresolv.tbd、JavaScriptCore及下方图片中的

image

添加编译参数

  • -lstdc++
  • -ObjC

如图,留意大小写

image

添加资源文件

  • 把下载的yw_1222_baichuan.jpg图片文件添加到工程中,缺少该文件会导致AlibcTradeSDK初始化失败
    **从老的onesdk或者电商sdk3.0升级上来的用户,都需要重新申请安全图片.. 否则会导致网络不通**
  • NBResource.bundle
  • AlipaySDK.bundle
  • AlibabaAuthSDK.bundle
  • SmartLink.bundle


添加到工程中

添加plist 文件: mtopsdk_configuration.plist


image


内容如下:

image

**配置URL Types**

URL Scheme为tbopen{AppKey},如tbopen123456

是AppKey, 不是AppID哟!


image

**配置info.plist**

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

image

  • 配置ATS, 允许HTTP请求.

image


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

image

3. iOS 百川SDK 基础功能使用说明

1、百川SDK初始化

在 AppDelegate 中初始化SDK,引入
#import <AlibcTradeSDK/AlibcTradeSDK.h>

// 百川平台基础SDK初始化,加载并初始化各个业务能力插件
[[AlibcTradeSDK sharedInstance] setDebugLogOpen:YES];//开发阶段打开日志开关,方便排查错误信息
    
[[AlibcTradeSDK sharedInstance] setIsvVersion:@"2.2.2"];
[[AlibcTradeSDK sharedInstance] setIsvAppName:@"baichuanDemo"];
[[AlibcTradeSDK sharedInstance] asyncInitWithSuccess:^{
    TLOG_INFO(@"百川SDK初始化成功");
} failure:^(NSError *error) {
    TLOG_INFO(@"百川SDK初始化失败");
}];

百川会初始化相关的依赖,不要自行初始化百川依赖的相关SDK.

2、处理应用间跳转

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation{
    // 如果百川处理过会返回YES
    if (![[AlibcTradeSDK sharedInstance] application:application
                                             openURL:url
                                   sourceApplication:sourceApplication
                                          annotation:annotation]) {
        // 处理其他app跳转到自己的app
    }
    return YES;
}
//IOS9.0 系统新的处理openURL 的API
- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
            options:(NSDictionary<NSString *,id> *)options {
    
    if (@available(iOS 9.0, *)) {
        __unused BOOL isHandledByALBBSDK=[[AlibcTradeSDK sharedInstance]
                                          application:application
                                          openURL:url
                                          options:options];
    } else {
        // Fallback on earlier versions
    }//处理其他app跳转到自己的app,如果百川处理过会返回YES
    
    return YES;
}

XCode 11 ,iOS 13 适配

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {
    [URLContexts enumerateObjectsUsingBlock:^(UIOpenURLContext * _Nonnull obj,
                                              BOOL * _Nonnull stop) {
        if([[AlibcTradeSDK sharedInstance] application:nil
                                               openURL:obj.URL
                                               options:nil]){
            *stop = YES;
        }
    }];
}

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

3、调用淘宝授权登录

if(![[ALBBCompatibleSession sharedInstance] isLogin]) {
    [[ALBBSDK sharedInstance] setH5Only:NO];
    [[ALBBSDK sharedInstance] auth:self successCallback:^{
        NSString *tip = [NSString stringWithFormat:@"登录的用户信息:%@",[[ALBBCompatibleSession sharedInstance] getUser]];
        NSLog(@"%@", tip);
    } failureCallback:^(NSError *error) {
        NSString *tip=[NSString stringWithFormat:@"登录失败:%@",@""];
        NSLog(@"%@", tip);
    }];

} else {
    NSString *tip = [NSString stringWithFormat:@"登录的用户信息:%@",[[ALBBCompatibleSession sharedInstance] getUser]];
    NSLog(@"%@", tip);
}

4、电商相关API使用

页面打开参数组装

image


image


淘客参数组装
(注:1、如果走adzoneId的方式分佣打点,需要在extraParams中显式传入taokeAppkey,否则打点失败;2、如果是打开店铺页面(shop),需要在extraParams中显式传入sellerId,否则同步打点转链失败3、如果adzoneId存在的话 pid参数会失效 4、关于直接打开s.click链接分佣说明
百川SDK不支持s.click(或uland)链接的二次转链逻辑,如果采用openByUrl方式打开该类链接,请勿传入pid等分佣参数;
若需要使用其他渠道获取的s.click链接进行分佣,可自行去淘客联盟后台生成自己的s.click链接或调用联盟服务接口生成。)


image

链路跟踪参数: trackParam


URL 方式调用电商API

  • openByUrl/openByBizCode API返回值处理,目前只有一种情况需要媒体处理:即当AlibcTradeShowParams 中 isNeedPush 为 YES时.此时需要媒体根据API返回值为1时 (应用內H5打开),在传入的UINavigationController中push新页面
  • 绑定三方自己webview 的情况,需要媒体客户端在自己webview 创建初始化的时机开启WKURLProtocol,[WVURLProtocolService setSupportWKURLProtocol:YES]; 在webview 关闭的时候关闭这个WKURLProtocol, [WVURLProtocolService setSupportWKURLProtocol:NO];

    //媒体可以传入自定义webview或者不传 百川SDK默认会创建webview
    NSInteger res  =  [[AlibcTradeSDK sharedInstance].tradeService
                           openByUrl:url
                           identity:@"trade"//当前固定传入"trade" 后期会开放业务标识申请
                           webView:view.webView
                           parentController:view
                           showParams:showParam
                           taoKeParams:[self taokeParam]
                           trackParam:[self customParam]
                           tradeProcessSuccessCallback:self.onTradeSuccess
                           tradeProcessFailedCallback:self.onTradeFailure];
    //页面最终以h5方式打开且showParam.isNeedPush = YES
    //需要媒体自行处理。其余情况媒体不用关心
    if (res == 1) {
        [self.navigationController pushViewController:view animated:YES];
    }

    code 方式调用API

    //媒体可以传入自定义webview或者不传 百川SDK默认会创建webview
     NSInteger res  =  [[AlibcTradeSDK sharedInstance].tradeService
                           openByBizCode:bizCode
                           page:page
                           webView:view.webView
                           parentController:view
                           showParams:showParam
                           taoKeParams:[self taokeParam]
                           trackParam:[self customParam]
                           tradeProcessSuccessCallback:self.onTradeSuccess
                           tradeProcessFailedCallback:self.onTradeFailure];
    //页面最终以h5方式打开且showParam.isNeedPush = YES
    //需要媒体自行处理。其余情况媒体不用关心
    if (res == 1) {
        [self.navigationController pushViewController:view animated:YES];
    }

    **附:百川SDK升级FAQ**

FAQ

WindVane包含UIWebView无法上传ipa包

WindVane包含UIWebView无法上传ipa包

返回
顶部