阿里百川電商SDK(3.1)接入與使用

接入


接入準(zhǔn)備

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

  1. 申請百川無線應(yīng)用
  2. 下載安全圖片
  3. 開通業(yè)務(wù)產(chǎn)品的使用權(quán)限
  4. 使用優(yōu)惠券組件

添加安全圖片

將安全圖片放在/res/drawable目錄下且轨,如果已經(jīng)有安全圖片倍谜,就替換劣欢。

Gradle配置

repositories { 
    maven { url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" }
} 
dependencies {
    // 授權(quán)登陸 (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'
    // 基礎(chǔ)電商組件(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'
    // 組件可用性統(tǒng)計
    compile 'com.alibaba.mtl:app-monitor-sdk:2.5.1_for_bc'
    
    // 基礎(chǔ)安全組件
    compile 'com.taobao.android:securityguardaar3:5.1.96@aar'
    // 網(wǎng)關(guān)
    compile 'com.taobao.android:mtopsdk_allinone_open:1.3.0@jar'
    // 手機(jī)淘寶與三方app之間的往返跳轉(zhuǎn)
    compile 'com.taobao.android:alibc_applink:2.0.0.9@jar'
    // deviceID,主要用于計算設(shè)備的uttid扁凛, 設(shè)備唯一標(biāo)識
    compile 'com.taobao.android:utdid4all:1.1.5'
}

Proguard 規(guī)則

-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)


初始化

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

AlibcTradeSDK.asyncInit(this, new AlibcTradeInitCallback() {
    @Override
    public void onSuccess() {
        // 初始化成功,設(shè)置相關(guān)的全局配置參數(shù)
        
        // 是否使用支付寶
        AlibcTradeSDK.setShouldUseAlipay(true);
        
        // 設(shè)置是否使用同步淘客打點
        AlibcTradeSDK.setSyncForTaoke(true);
        
        // 是否走強(qiáng)制H5的邏輯,為true時全部頁面均為H5打開
        AlibcTradeSDK.setForceH5(true);
        
        // 設(shè)置全局淘客參數(shù)冤今,方便開發(fā)者用同一個淘客參數(shù),不需要在show接口重復(fù)傳入
        AlibcTradeSDK.setTaokeParams(taokeParams)
        
        // 設(shè)置渠道信息(如果有渠道專享價茂缚,需要設(shè)置)
        AlibcTradeSDK.setChannel(typeName, channelName)

        // ...
    }

    @Override
    public void onFailure(int code, String msg) {
        //初始化失敗戏罢,可以根據(jù)code和msg判斷失敗原因,詳情參見錯誤說明
    }
});

資源銷毀

在使用完成后脚囊,可以調(diào)用destroy方法龟糕,釋放百川相應(yīng)的資源引用

AlibcTradeSDK.destroy();

顯示電商頁面

實例化頁面參數(shù)(必填)

// 商品詳情,支持itemId和openItemId的商品悔耘,必填讲岁,不允許為null
AlibcBasePage page = new AlibcDetailPage(itemId);
 
// 店鋪,店鋪id,支持明文id
AlibcBasePage page = new AlibcShopPage(shopId);
 
// 添加購物車缓艳,支持itemId和openItemId的商品校摩,必填,不允許為null阶淘;
AlibcBasePage page = new AlibcAddCartPage(itemId)
 
// 我的訂單
// status   默認(rèn)跳轉(zhuǎn)頁面(0:全部, 1:待付款, 2:待發(fā)貨, 3:待收貨, 4:待評價)
// allOrder 為 true 顯示所有訂單衙吩,為false只顯示通過當(dāng)前app下單的訂單 
AlibcBasePage page = new AlibcMyOrdersPage(status, allOrder);
 
// 我的購物車
AlibcBasePage page = new AlibcMyCartsPage();
     
// URL
AlibcBasePage page = new AlibcPage(taokeUrl);

設(shè)置參數(shù)并并使用自定義webview打開頁面

[注意]:當(dāng)傳入webviewClient,并重載shouldOverrideUrlLoading方法時溪窒,遇到淘系鏈接情況下(即訪問淘寶坤塞、天貓、登錄澈蚌、購物車等頁面時)摹芙,該方法返回值要為false,否則可能會出現(xiàn)業(yè)務(wù)流程錯誤問題宛瞄。


// 頁面打開方式
AlibcShowParams params = new AlibcShowParams(OpenType.Native, isNeedPush);
// 淘寶客參數(shù)
AlibcTaokeParams taoke = new AlibcTaokeParams(pid, unionId, subId);
// 提供給三方傳遞配置參數(shù)
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) {
        //打開電商組件浮禾,用戶操作中成功信息回調(diào)。tradeResult:成功信息(結(jié)果類型:加購坛悉,支付伐厌;支付結(jié)果)
    }
 
    @Override
    public void onFailure(int code, String msg) {
        //打開電商組件,用戶操作中錯誤信息回調(diào)裸影。code:錯誤碼挣轨;msg:錯誤信息
    }
}); 

使用默認(rèn)webview打開頁面

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

登陸授權(quán)(1.2.4)


電商SDK已經(jīng)集成登陸授權(quán)
在電商SDK初始化時,會自動初始化登陸授權(quán)

自動觸發(fā)登陸

在電商SDK打開的頁面中轩猩,在需要時會自動觸發(fā)調(diào)用登陸授權(quán)SDK

手動觸發(fā)登陸

通過 AlibcLogin.showLogin 方法可以手動調(diào)起登陸

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

    }
});

接收登陸/登出結(jié)果

為了正常接收登陸/登出的結(jié)果卷扮,需要重寫傳入的 activity 的 onActivityResult 方法

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

設(shè)置全局登陸回調(diào)

目前電商SDK里的 AlibcLogin 還未提供該功能
只能通過 MemberSDK 獲取 LoginService 可以設(shè)置全局登陸回調(diào)

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 然后轉(zhuǎn)成 activity 這時就會出現(xiàn)異常導(dǎo)致崩潰。

一個解決辦法是使用 LayoutInflater.from(activity) 來 inflate 對話框的布局

【bug】在授權(quán)或支付頁面返回(failure)時會把傳入的activity關(guān)閉(finish)

打開頁面時必需傳入一個activity均践,傳入的activity被關(guān)閉晤锹,這通常不是期望的效果

通過重載傳入的activity.finish方法可以臨時解決

目前官方文檔上使用的sdk版本 3.1.0.7 有這個問題,更新到 3.1.1.11 已經(jīng)沒有此問題

【bug】AlibcTrade 的默認(rèn) 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 這個錯誤的判斷導(dǎo)致原本應(yīng)該被執(zhí)行的代碼未執(zhí)行

4.x 的設(shè)備都會因此bug產(chǎn)生各種問題

參考


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

3.1SDK 常見問題補(bǔ)充
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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鞭铆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焦影,更是在濱河造成了極大的恐慌车遂,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斯辰,死亡現(xiàn)場離奇詭異舶担,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)彬呻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進(jìn)店門衣陶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柄瑰,“玉大人,你說我怎么就攤上這事剪况〗陶矗” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵拯欧,是天一觀的道長详囤。 經(jīng)常有香客問我财骨,道長镐作,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任隆箩,我火速辦了婚禮该贾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捌臊。我一直安慰自己杨蛋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布理澎。 她就那樣靜靜地躺著逞力,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糠爬。 梳的紋絲不亂的頭發(fā)上寇荧,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天,我揣著相機(jī)與錄音执隧,去河邊找鬼揩抡。 笑死,一個胖子當(dāng)著我的面吹牛镀琉,可吹牛的內(nèi)容都是我干的峦嗤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼屋摔,長吁一口氣:“原來是場噩夢啊……” “哼烁设!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起钓试,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤装黑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后亚侠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曹体,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年硝烂,在試婚紗的時候發(fā)現(xiàn)自己被綠了箕别。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖串稀,靈堂內(nèi)的尸體忽然破棺而出除抛,到底是詐尸還是另有隱情,我是刑警寧澤母截,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布到忽,位于F島的核電站,受9級特大地震影響清寇,放射性物質(zhì)發(fā)生泄漏喘漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一华烟、第九天 我趴在偏房一處隱蔽的房頂上張望翩迈。 院中可真熱鬧,春花似錦盔夜、人聲如沸负饲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽返十。三九已至,卻和暖如春椭微,著一層夾襖步出監(jiān)牢的瞬間洞坑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工赏表, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留检诗,地道東北人。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓瓢剿,卻偏偏與公主長得像逢慌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子间狂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,452評論 2 348

推薦閱讀更多精彩內(nèi)容