移动端接入阿里百川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:
-
整个百川SDK 体验最不好的地方就在于授权时需要二次登录授权。文档中提示相应的Appkey 是可选参数,默认会取当前应用的appkey,我们一般会采用默认。但这样获取的Token 后台并不能用于获取通过淘宝联盟获取relation_id。
-
需要二次授权的原因也并不清楚,虽然比H5体验效果好,但仍会有不顺畅的感觉,目前也没找到更好的解决办法。
-
关于在应用内完成交易且不拉起淘宝,暂未在项目中实现。后期有实现再补充一下。