阿里百川电商SDK(3.1)接入与使用

接入


接入准备

参考
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.L4aY7V&treeId=129&articleId=105645&docType=1

  1. 申请百川无线应用
  2. 下载安全图片
  3. 开通业务产品的使用权限
  4. 使用优惠券组件

添加安全图片

将安全图片放在/res/drawable目录下,如果已经有安全图片,就替换。

Gradle配置

repositories { 
    maven { url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" }
} 
dependencies {
    // 授权登陆 (MemberSDK)
    compile 'com.ali.auth.sdk:alibabauth_core:1.2.4@jar'
    compile 'com.ali.auth.sdk:alibabauth_ui:1.2.4@aar'
    compile 'com.ali.auth.sdk:alibabauth_ext:1.2.4@jar'
    
    // fastjson
    compile 'com.alibaba:fastjson:1.2.9'
    // 基础电商组件(AlibcTradeSDK, AlibcTrade, AlibcLogin)
    // 包含打开detail,淘客分润,jsbridge注入等功能
    compile 'com.alibaba.sdk.android:alibc_trade_sdk:3.1.1.11@aar'
    // 集成支付宝(可选)
    compile 'com.alibaba.alipay:alipaySingle:20160825@jar'
    // 组件可用性统计
    compile 'com.alibaba.mtl:app-monitor-sdk:2.5.1_for_bc'
    
    // 基础安全组件
    compile 'com.taobao.android:securityguardaar3:5.1.96@aar'
    // 网关
    compile 'com.taobao.android:mtopsdk_allinone_open:1.3.0@jar'
    // 手机淘宝与三方app之间的往返跳转
    compile 'com.taobao.android:alibc_applink:2.0.0.9@jar'
    // deviceID,主要用于计算设备的uttid, 设备唯一标识
    compile 'com.taobao.android:utdid4all:1.1.5'
}

Proguard 规则

-keepattributes Signature
-keep class sun.misc.Unsafe { ; }
-keep class com.taobao.* {*;}
-keep class com.alibaba.** {*;}
-keep class com.alipay.** {*;}
-dontwarn com.taobao.**
-dontwarn com.alibaba.**
-dontwarn com.alipay.**
-keep class com.ut.** {*;}
-dontwarn com.ut.**
-keep class com.ta.** {*;}
-dontwarn com.ta.**
-keep class org.json.** {*;}
-keep class com.ali.auth.** {*;}

使用电商SDK(3.1)


初始化

在应用的入口方法(比如Application的onCreate)中初始化百川SDK

AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() {
    @Override
    public void onSuccess() {
        // 初始化成功,设置相关的全局配置参数
        
        // 是否使用支付宝
        AlibcTradeSDK.setShouldUseAlipay(true);
        
        // 设置是否使用同步淘客打点
        AlibcTradeSDK.setSyncForTaoke(true);
        
        // 是否走强制H5的逻辑,为true时全部页面均为H5打开
        AlibcTradeSDK.setForceH5(true);
        
        // 设置全局淘客参数,方便开发者用同一个淘客参数,不需要在show接口重复传入
        AlibcTradeSDK.setTaokeParams(taokeParams)
        
        // 设置渠道信息(如果有渠道专享价,需要设置)
        AlibcTradeSDK.setChannel(typeName, channelName)

        // ...
    }

    @Override
    public void onFailure(int code, String msg) {
        //初始化失败,可以根据code和msg判断失败原因,详情参见错误说明
    }
});

资源销毁

在使用完成后,可以调用destroy方法,释放百川相应的资源引用

AlibcTradeSDK.destroy();

显示电商页面

实例化页面参数(必填)

// 商品详情,支持itemId和openItemId的商品,必填,不允许为null
AlibcBasePage page = new AlibcDetailPage(itemId);
 
// 店铺,店铺id,支持明文id
AlibcBasePage page = new AlibcShopPage(shopId);
 
// 添加购物车,支持itemId和openItemId的商品,必填,不允许为null;
AlibcBasePage page = new AlibcAddCartPage(itemId)
 
// 我的订单
// status   默认跳转页面(0:全部, 1:待付款, 2:待发货, 3:待收货, 4:待评价)
// allOrder 为 true 显示所有订单,为false只显示通过当前app下单的订单 
AlibcBasePage page = new AlibcMyOrdersPage(status, allOrder);
 
// 我的购物车
AlibcBasePage page = new AlibcMyCartsPage();
     
// URL
AlibcBasePage page = new AlibcPage(taokeUrl);

设置参数并并使用自定义webview打开页面

[注意]:当传入webviewClient,并重载shouldOverrideUrlLoading方法时,遇到淘系链接情况下(即访问淘宝、天猫、登录、购物车等页面时),该方法返回值要为false,否则可能会出现业务流程错误问题。


// 页面打开方式
AlibcShowParams params = new AlibcShowParams(OpenType.Native, isNeedPush);
// 淘宝客参数
AlibcTaokeParams taoke = new AlibcTaokeParams(pid, unionId, subId);
// 提供给三方传递配置参数
Map<String, String> extras = new HashMap<>(); 

// activity, page, callback 为必填
AlibcTrade.show(activity, webView, webViewClient, webChromeClient, page, params, taoke, extras, new AlibcTradeCallback() {
    @Override
    public void onTradeSuccess(TradeResult tradeResult) {
        //打开电商组件,用户操作中成功信息回调。tradeResult:成功信息(结果类型:加购,支付;支付结果)
    }
 
    @Override
    public void onFailure(int code, String msg) {
        //打开电商组件,用户操作中错误信息回调。code:错误码;msg:错误信息
    }
}); 

使用默认webview打开页面

AlibcTrade.show(context, page, params, taoke, extras, callback);

登陆授权(1.2.4)


电商SDK已经集成登陆授权
在电商SDK初始化时,会自动初始化登陆授权

自动触发登陆

在电商SDK打开的页面中,在需要时会自动触发调用登陆授权SDK

手动触发登陆

通过 AlibcLogin.showLogin 方法可以手动调起登陆

AlibcLogin.getInstance().showLogin(activity, new AlibcLoginCallback() {
    @Override
    public void onSuccess() { 
        // 
    }
    @Override
    public void onFailure(int code, String message) {

    }
});

接收登陆/登出结果

为了正常接收登陆/登出的结果,需要重写传入的 activity 的 onActivityResult 方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
    CallbackContext.onActivityResult(this, requestCode, resultCode, data);
}

设置全局登陆回调

目前电商SDK里的 AlibcLogin 还未提供该功能
只能通过 MemberSDK 获取 LoginService 可以设置全局登陆回调

LoginService service = (LoginService)MemberSDK.getService(LoginService.class)
service.setLoginCallback(new LoginCallback(){
    @Override
    public void onSuccess(Session session) { 
        // 
    }
    @Override
    public void onFailure(int code, String message) {

    }
})

错误码

public class KernelMessageConstants {
    public static final int GENERIC_SYSTEM_ERROR = 10010;
    public static final int SERVER_REQUEST_FAILED = 15;
    public static final int SERVICE_NOT_AVAILABLE_ERROR = 17; 
}

public class SystemMessageConstants extends KernelMessageConstants {
    public static final int JS_BRIDGE_MODULE_NOT_FOUND = 10000;
    public static final int USER_CANCEL_CODE = 10003;
    public static final int H5_LOGIN_FAILURE = 10101;
    public static final int TAOBAO_CANCEL_CODE = 10004;
    public static final int TAOBAO_ERROR_CODE = 10005;
    public static final int JS_BRIDGE_METHOD_NOT_FOUND = 951;
    public static final int JS_BRIDGE_ANNOTATION_NOT_PRESENT = 952;
    public static final int NET_WORK_ERROR = 10099;
    public static final int NPE_ERROR = 10098; 
}

一些坑


在Dialog中打开页面

由于 dialog 会给 context 包上一层 ContextThemeWrapper, 而与 dialog 交互时 sdk 可能会从其中的 view 获取 context 然后转成 activity 这时就会出现异常导致崩溃。

一个解决办法是使用 LayoutInflater.from(activity) 来 inflate 对话框的布局

【bug】在授权或支付页面返回(failure)时会把传入的activity关闭(finish)

打开页面时必需传入一个activity,传入的activity被关闭,这通常不是期望的效果

通过重载传入的activity.finish方法可以临时解决

目前官方文档上使用的sdk版本 3.1.0.7 有这个问题,更新到 3.1.1.11 已经没有此问题

【bug】AlibcTrade 的默认 WebViewClient.shouldInterceptRequest 方法的逻辑错误

alibc_trade_sdk 包的 com.alibaba.baichuan.android.trade.c.b.b
它的 shouldInterceptRequest 方法如下

打开页面时我们传入的WebViewClient会被这个类代理

public WebResourceResponse shouldInterceptRequest(WebView var1, String var2) {
  return VERSION.SDK_INT > 23 && this.a != null && this.a.get() != null?((WebViewClient)this.a.get()).shouldInterceptRequest(var1, var2):super.shouldInterceptRequest(var1, var2);
}

这个方法是用于API LEVEL < 21 的,然而 VERSION.SDK_INT > 23 这个错误的判断导致原本应该被执行的代码未执行

4.x 的设备都会因此bug产生各种问题

参考


阿里百川 SDK 官方文档
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.fZiJXS&treeId=129&articleId=105645&docType=1

3.1SDK 常见问题补充
https://baichuan.bbs.taobao.com/detail.html?spm=a3c0d.7971500.0.0.OkQc3n&postId=7215938

常见错误码
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.SjH1Xf&treeId=129&articleId=104308&docType=1

SG error:XXX错误码
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.AjAmY2&treeId=129&articleId=103222&docType=1

客户端SDK常见问题
http://baichuan.taobao.com/docs/doc.htm?spm=a3c0d.7629140.0.0.LQayyc&treeId=129&articleId=102553&docType=1

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容