Blog: reezy.me/2016-12-20/…
简书: www.jianshu.com/p/e8d1fad84…javascript
参考
baichuan.taobao.com/docs/doc.ht…html
将安全图片放在/res/drawable目录下,若是已经有安全图片,就替换。java
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.20@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'
}复制代码
-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.** {*;}复制代码
在应用的入口方法(好比Application的onCreate)中初始化百川SDKandroid
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方法,释放百川相应的资源引用web
AlibcTradeSDK.destroy();复制代码
实例化页面参数(必填)json
// 商品详情,支持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,不然可能会出现业务流程错误问题。session
// 页面打开方式
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打开页面app
AlibcTrade.show(context, page, params, taoke, extras, callback);复制代码
电商SDK已经集成登录受权
在电商SDK初始化时,会自动初始化登录受权 async
在电商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.20 已经没有此问题
【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 官方文档
baichuan.taobao.com/docs/doc.ht…
3.1SDK 常见问题补充
baichuan.bbs.taobao.com/detail.html…
常见错误码
baichuan.taobao.com/docs/doc.ht…
SG error:XXX错误码
baichuan.taobao.com/docs/doc.ht…
客户端SDK常见问题
baichuan.taobao.com/docs/doc.ht…