Android平臺以WebView方式整合H5+SDK和支付寶登入授權外掛開發問題總結
1、問題
原因沒有引入aar包
2、問題
Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version 16 declared in library [:alipaySdk-15.5.7-20181023110917:] C:\Users\WMXX\.gradle\caches\transforms-1\files-1.1\alipaySdk-15.5.7-20181023110917.aar\e003387131f245820a9020941ca1ddf6\AndroidManifest.xml as the library might be using APIs not available in 15
Suggestion: use a compatible library with a minSdk of at most 15,
or increase this project's minSdk version to at least 16,
or use tools:overrideLibrary="com.alipay.sdk" to force usage (may lead to runtime failures)
原因
專案 App Module 的 build.gradle 中的minSdkVersion的版本號小於生成的C:\Users\WMXX\.gradle\caches\transforms-1\files-1.1\alipaySdk-15.5.7-20181023110917.aar檔案的 minSdkVersion的版本號
3、問題
支付寶授權之後資料如何返回到js?
解決:支付寶登入授權要求必須通過多執行緒呼叫,然而對於run方法沒有返回值,那麼登入授權之後的auth_code如何返回到js那??這裡想到H5+sdk的外掛開發中回到js是使用JSUtil.execCallback
public void authV2(final String url, final Activity activity,final IWebview iWebview, final JSONArray jsonArray) {
Log.e("authV2","支付寶方法");
Thread authRunnable = new Thread() {
// AuthResult authResult = null;
@Override
public void run() {
// 構造AuthTask 物件
Log.e("authV2","123");
AuthTask authTask = new AuthTask(activity);
// 呼叫授權介面,獲取授權結果
Log.e("authV2","456");
Map<String, String> result = authTask.authV2(url, true);
Log.e("result","資料"+result);
AuthResult authResult = new AuthResult(result, true);
String resultStatus = authResult.getResultStatus();
// 判斷resultStatus 為“9000”且result_code
// 為“200”則代表授權成功,具體狀態碼代表含義可參考授權介面文件
if (TextUtils.equals(resultStatus, "9000") && TextUtils.equals(authResult.getResultCode(), "200")) {
// 獲取alipay_open_id,調支付時作為引數extern_token 的value
// 傳入,則支付賬戶為該授權賬戶
Log.e("authV23","進入到hander--成功");
} else {
// 其他狀態值則為授權失敗
Log.e("authV23","進入到hander--失敗");
}
// 呼叫方法將原生程式碼的執行結果返回給js層並觸發相應的JS層回撥函式
JSONArray newArray = new JSONArray();
newArray.put(authResult.getResultCode());
newArray.put(authResult.getResultStatus());
newArray.put(authResult.getAuthCode());
newArray.put(authResult.getScope());
newArray.put(authResult.getUser_id());
Log.e("newArray","------"+newArray);
JSUtil.execCallback(iWebview, jsonArray.optString(0),newArray, JSUtil.OK, false);
}
};
// 必須非同步呼叫
Thread authThread = new Thread(authRunnable);
authThread.start();
}
4、問題
問題描述(v1和v2)
Android 7.0中引入了APK Signature Scheme v2,v1是jar Signature來自JDK
V1:應該是通過ZIP條目進行驗證,這樣APK 簽署後可進行許多修改 - 可以移動甚至重新壓縮檔案。
V2:驗證壓縮檔案的所有位元組,而不是單個 ZIP 條目,因此,在簽名後無法再更改(包括 zipalign)。正因如此,現在在編譯過程中,我們將壓縮、調整和簽署合併成一步完成。好處顯而易見,更安全而且新的簽名可縮短在裝置上進行驗證的時間(不需要費時地解壓縮然後驗證),從而加快應用安裝速度。
解決方案一
v1和v2的簽名使用
1)只勾選v1簽名並不會影響什麼,但是在7.0上不會使用更安全的驗證方式
2)只勾選V2簽名7.0以下會直接安裝完顯示未安裝,7.0以上則使用了V2的方式驗證
3)同時勾選V1和V2則所有機型都沒問題