阿里百川接入

597 阅读4分钟

移动端接入阿里百川SDK 可实现唤醒手淘,登录,授权,甚至交易等功能,相较通过H5授权,不用输入淘宝帐号和密码,所会极大的提升用户体验。

阿里百川目前分为SDK4.x 和 SDK 5.x ,这里主要结合项目实践对照目前的开发发档,记录和分享一下5.x的开发经验

1.SDK导入

百川已经不再支持通过cocoapods依赖方式,目前只能通过直接添加Framework的方式接入,这种方式会明显让开发包变大。

2. 添加三方依赖。其中SocketRocket库虽然文档中显示它是可选依赖,但实际中必然会引用到,没有添加的话,肯定会有报错提示。

#电商套件增强依赖,可以使用媒体版本
#(可选依赖,没有集成小程序商详、购物车、直播等套件的媒体可以不依赖)
pod  'Masonry' #可以使用媒体版本
pod  'FMDB'
pod  'Reachability'
pod  'SocketRocket'

#电商套件增强依赖,电商套件媒体图片库实现外部依赖(媒体自由注入实现 这里只是举例)
#(可选依赖,没有集成小程序商详、购物车、直播等套件的媒体可以不依赖)
pod  'SSZipArchive'
pod  'SDWebImage'

3. 配置宿主工程

新增mtopsdk_configuartion.plist文件,

配置URL Types,新增URL Scheme为tbopen{AppKey},如tbopen123456

配置info.plist,其中增加LSApplicationQueriesSchemes字段,并添加tbopen,tmall,taobaolite

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

设置Allow Non-modular Includes in Framwork Modules YES

打包发版时要确保TBMediaPlayer去掉模拟器架构 TBMediaPlayer去掉模拟器架构

// 去掉模拟器架构
lipo -remove i386 TBMediaPlayer -o TBMediaPlayer 
lipo -remove x86_64 TBMediaPlayer -o TBMediaPlayer

// 查看支持的架构
lipo -info TBMediaPlayer

4. 初始化SDK

后续的所有功能开发,都必须基于初始化成功。

[AlibcTradeUltimateSDK.sharedInstance enableAutoShowDebug:YES];

[[AlibcTradeUltimateSDK sharedInstance] asyncInitWithSuccess:^{

    NSLog(@"百川SDK初始化成功");

} failure:^(NSError *error) {

    NSLog(@"百川SDK初始化失败");

}];

5. 登录授权

淘宝的登录态 有自己的续登逻辑以及和网关层的交互 外部不应该感知淘宝登录态 登录是提供给百川电商业务用的。

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {

    return [[AlibcTradeUltimateSDK sharedInstance] application:app 
                                                       openURL:url 
                                                       options:options];

}

原有的H5授权方式5.0.0.4版本已经禁掉,百川SDK提供了Native的淘宝授权方式,可以直接获取授权的token和过期日期,避免H5的实现成本,提升了用户体验。

授权流程:

// MARK: - <WKNavigationDelegate>
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler{
        
        NSURLRequest *request = navigationAction.request;
        NSURL *openUrl= request.URL;
        NSString *url = openUrl.absoluteString;
        //淘宝授权

       if([url containsString:@"oauth.taobao.com"]){
            
            [self authorizeWebUrlScheme:url];
             // 取消请求加载
             decisionHandler(WKNavigationActionPolicyCancel);
             return;
        }
}

授权时需要先明确,阿里百川需要进行二次授权, 特别特别注意:第二次授权的AppKey 不能使用百川SDK的,而使用淘宝联盟的,这样获取的token 才能换取相应的relation_id。

在配置宿主工程中,配置的Scheme为tbopen{AppKey},为阿里百川的Appkey,但第二次授权使用的AppKey则是淘宝联盟的AppKey,因为获取的Token 要通过淘宝联盟去验证。

-(void)authorizeAiBCScheme:(NSString *)url{

    //先退出登录
    CGFloat delay = 0.f;
    if ([AlibcTradeUltimateSDK.sharedInstance.loginService isLogin]) {
        delay = 1.f;
        [AlibcTradeUltimateSDK.sharedInstance.loginService logout];
    }
    
    //延时操作
    [[RACScheduler mainThreadScheduler] afterDelay:delay schedule:^{

      @strongify(self);
      
      //auth 进入打开淘宝应用授权获取用户信息
      [AlibcTradeUltimateSDK.sharedInstance.loginService auth:baseVC
                          success:^(AlibcUser *user) {
                          
           //authorize4AppKey 返回当前应用弹窗授权获取相应Token   
           [AlibcTradeUltimateSDK.sharedInstance.tradeService 
                         authorize4AppKey:BCTAOKEAPPKEY
                                appName:@"项目名称"
                                appLogo:[UIImage imageNamed:@"launch_logo"]
                              currentVC:baseVC
                               callBack:^(NSError *error,
                                          NSString *accessToken, 
                                          NSString *expire) {
        
               //些时获取的token可以通过接口传给后台用于获取relation_Id
    
            }];

         } failure:^(NSError *error) {

             NSLog(@"登录失败");

         }];

    }];
}
    

获取access_token也就是sessionKey后,后台会通过淘宝联盟文档open.taobao.com/api.htm?doc… 中的taobao.tbk.sc.publisher.info.save接口获取会员运营ID或者渠道ID。 移动端也可能通过淘宝联盟提供的 API 测试工具进行自测。

后台需要通过这个接口获取relation_id后才能进行相应的转链等操作,转链中会有相应的标记,当有用户通过该链接完成交易后,我们才会有相应的佣金。

6.拉起手淘

拉起手淘相对比较简单,需要公司或后台提供相应的PID 就可以实现.当设备未安装淘宝应用时,SDK 会有相应页面,所以不用转门处理未安装的情况。

AlibcTradeShowParams *showParams = [[AlibcTradeShowParams alloc]init];
showParams.isNeedOpenByAliApp = YES;
showParams.isPushBCWebView = YES;

AlibcTradeTaokeParams *taoke = [[AlibcTradeTaokeParams alloc]init];
taoke.pid = BCTAOKEPID;

[AlibcTradeUltimateSDK.sharedInstance.tradeService openTradeUrl:url
                                               parentController:VC
                                                     showParams:showParams
                                                    taoKeParams:taoke
                                                     trackParam:@{}
                                                openUrlCallBack:^(NSError *error,
                                                                  NSDictionary *result) {

    }];

PS:

  1. 整个百川SDK 体验最不好的地方就在于授权时需要二次登录授权。文档中提示相应的Appkey 是可选参数,默认会取当前应用的appkey,我们一般会采用默认。但这样获取的Token 后台并不能用于获取通过淘宝联盟获取relation_id。

  2. 需要二次授权的原因也并不清楚,虽然比H5体验效果好,但仍会有不顺畅的感觉,目前也没找到更好的解决办法。

  3. 关于在应用内完成交易且不拉起淘宝,暂未在项目中实现。后期有实现再补充一下。