Android阿里百川返傭功能整合

ljwx9527發表於2018-10-23

Android阿里百川返傭功能整合

百川官方的接入文件

這個是官方文件, 即使嚴格按照官方文件整合, 可能還是會有各種各樣莫名其妙的問題

公司負責人的接入部落格 (很詳細)

附上他的開源專案githug

第三方教程文件

這個是我找到的另一個第三方文件, 不過少了一點後續過程

因為我們有幾個兄弟公司, 都做了淘寶返傭這個功能, 我們是最後做這個功能的, 說實話, 剛接到任務我是有點無從下手的, 百川的sdk也沒有講的那麼詳細, 在開發的過程中才慢慢摸出一點門道, 也希望對後來的整合者能有一些力所能及的幫助.

1. 去建立你的應用

2. 下載對應的安全圖片

Android阿里百川返傭功能整合

3.申請開通你的電商功能,馬上就能通過

Android阿里百川返傭功能整合

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來識別的

Android阿里百川返傭功能整合

上圖是pid的具體位置

Android阿里百川返傭功能整合

上圖是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來跳轉就可以了, 我也不明白原因

Android阿里百川返傭功能整合
這是我們首頁的導航按鈕, 下面一排需要淘寶授權才能跳轉,

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的兄弟公司, 是否只能這樣傳, 是否每一個引數都得這樣, 我都不知道, 我們兩個人完成整個返傭功能工期只有一週, 很多東西都來不及驗證, 這篇文章幾乎也是記錄一下

這裡還有一個細節問題

Android阿里百川返傭功能整合
後臺是從淘寶聯盟報表這裡頻繁的下載資料,然後匹配使用者的返傭訂單, 這裡下載下來的是一個excel表格, 裡面包含了各種資訊, 其中有一個來源id, 後臺通過excel的這一項來判斷是否是我們上傳的, 防止其他人惡意刷介面, 但是我們下載的報表一直沒有來源id, 說實話, 這種問題真的莫名其妙, 各種分析查詢, 最後換一個pid就好了[捂臉], 我也不知道為什麼

相關文章