Android阿里百川返傭功能整合
這個是官方文件, 即使嚴格按照官方文件整合, 可能還是會有各種各樣莫名其妙的問題
附上他的開源專案githug
這個是我找到的另一個第三方文件, 不過少了一點後續過程
因為我們有幾個兄弟公司, 都做了淘寶返傭這個功能, 我們是最後做這個功能的, 說實話, 剛接到任務我是有點無從下手的, 百川的sdk也沒有講的那麼詳細, 在開發的過程中才慢慢摸出一點門道, 也希望對後來的整合者能有一些力所能及的幫助.
1. 去建立你的應用
2. 下載對應的安全圖片
3.申請開通你的電商功能,馬上就能通過
4.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'
}
複製程式碼
5.初始化, 最好是在Application裡
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判斷失敗原因,詳情參見錯誤說明
}
});
複製程式碼
在合適的地方銷燬
AlibcTradeSDK.destroy();
複製程式碼
業務中需要了解的細節
無論是H5還是吊起淘寶開啟相關頁面,都需要使用AlibcTrade.show()方法, 這個方法裡面配置了很多引數, 基本決定了你的業務邏輯是否正常, 你可以像上面一樣初始化的時候就配置好, 不過因為我們不止一個電商模組, 所以是單獨設定的.
百川sdk具體的跳轉AlibcTrade.show()方法
AlibcTrade.show(context, detailPage, showParams, alibcTaokeParams, exParams, new AlibcTradeCallback() {
@Override
public void onTradeSuccess(AlibcTradeResult tradeResult) {
}
@Override
public void onFailure(int i, String s) {
}
});
複製程式碼
第二個引數就是具體要跳轉的頁面, 我們的需求幾乎都是碰到商品詳情才跳轉, 所以只用了兩種方式AlibcDetailPage和AlibcPage, 前者只能使用ID跳轉具體頁面,後者只能通過url跳轉具體頁面
AlibcDetailPage detailPage = new AlibcDetailPage(id);
AlibcPage detailPage = new AlibcPage(url);
複製程式碼
第三個引數就是跳轉方式,可以H5,可以拉手淘,也可以自動
AlibcShowParams showParams = new AlibcShowParams(OpenType.Native, false);
複製程式碼
第四個重要的引數是AlibcTaokeParams, 淘寶聯盟後臺的訂單匹配就是通過PID來識別的
上圖是pid的具體位置
上圖是pid的具體含義, 這個解釋能讓你更好的理解為什麼pid這麼重要
AlibcTaokeParams alibcTaokeParams = new AlibcTaokeParams();
alibcTaokeParams.adzoneid = ConstBc.MALL_AD_ZONE_ID; //pub平臺獲取
alibcTaokeParams.pid = ConstBc.MALL_PID;
alibcTaokeParams.subPid = ConstBc.MALL_SUB_PID;
alibcTaokeParams.extraParams = new HashMap<>();
alibcTaokeParams.extraParams.put("taokeAppkey", ConstBc.APP_TAOKE_KEY); //pub平臺獲取Appkey
複製程式碼
adzoneid就是pid的最後一段,taokeappkey在阿里百川app控制檯就能獲取
第五個引數我不知道具體用處, 不過基本都是這麼填的
Map<String, String> exParams = new HashMap<>();
exParams.put(AlibcConstants.ISV_CODE, "appisvcode");
複製程式碼
上面是如何跳轉,讓使用者購物後能夠返傭
下面說一下細節需求
比如為了提升體驗, 我們只在使用者點選詳情時才跳轉手淘,並將剛才的引數傳過去, 之前的所有淘寶相關的頁面都用的webview, 所以我們需要過載webview.setWebViewClient(mWebviewclient)的mwebviewclient;
mWebview = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//當檢測到詳情頁的url時跳轉手淘,並返回true終止webview的跳轉
if(){
AlibcTrade.show()
return true
}
return super.shouldOverrideUrlLoading(view, url);
}
};
複製程式碼
剛開始我是通過AlibcPage跳轉的, 但是我們app首頁有一個足跡導航欄,在淘寶授權後可以直接跳轉到自己的足跡Web頁面, 但是從足跡跳轉web的時候並沒有傳pid, 明明設定了引數的, 後來改成提取詳情頁url裡面的id, 然後通過AlibcDetailPage來跳轉就可以了, 我也不明白原因
這是我們首頁的導航按鈕, 下面一排需要淘寶授權才能跳轉,if (!AlibcLogin.getInstance().isLogin()) {
AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() {
@Override
public void onSuccess(int i) {
callBack.success();
}
@Override
public void onFailure(int i, String s) {
callBack.fail();
}
});
} else {
callBack.success();
}
}
複製程式碼
通過AlibcTrade.show()方法吊起手淘,引數也傳輸正確, 使用者購買成功之後, 需要及時去拉取使用者的購物訂單傳給我們自己的後臺, 然後我們自己的後臺去淘寶聯盟拉取屬於我們平臺推廣的訂單, 然後再匹配到某個使用者, 在使用者的訂單列表頁顯示出來
int mPage = 1;
//說明回來前已經跳到淘寶,就要拉去pc的訂單頁;
try {
String url = "https://buyertrade.taobao.com/trade/itemlist/asyncBought.htm?action=itemlist/BoughtQueryAction";
byte[] bytes = ("pageNum=" + mPage + "&pageSize=15&prePageNo=" + (mPage - 1)).getBytes();
connection = (HttpsURLConnection) new URL(url + "&event_submit_do_query=1&_input_charset=utf8").openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
connection.setInstanceFollowRedirects(false);
connection.setUseCaches(false);
connection.addRequestProperty("x-requested-with", "XMLHttpRequest");
connection.addRequestProperty("Accept", "text/html,application/json, text/javascript, */*; q=0.01");
connection.addRequestProperty("Accept-Encoding", "gzip, deflate");
connection.addRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6,zh-TW;q=0.4,ms;q=0.2");
connection.addRequestProperty("Referer", "https://buyertrade.taobao.com/trade/itemlist/list_bought_items.htm");
connection.addRequestProperty("Cookie", CookieManager.getInstance().getCookie(url));
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", Integer.toString(bytes.length));
connection.getOutputStream().write(bytes);
connection.connect();
String content = read(connection);
} catch (Exception e) {
}
複製程式碼
上面是去淘寶的後臺拉取使用者的訂單, 這段程式碼是copy的兄弟公司, 是否只能這樣傳, 是否每一個引數都得這樣, 我都不知道, 我們兩個人完成整個返傭功能工期只有一週, 很多東西都來不及驗證, 這篇文章幾乎也是記錄一下