在客戶端接入華為登陸和華為支付
一、 集成 SDK
下載SDK
包括兩個(gè):HMS Agent(下載 .zip 文件瘟栖,后面需要進(jìn)行自定義處理)和 HMS SDK(提供:Gradle 依賴或下載 .jar 文件)葵擎。
注意:使用的HMS SDK Agent的主版本號(hào)必須與HMS SDK相同。例如HMS SDK Agent 2.6.3.301慢宗,2.6.3即為主版本號(hào)坪蚁。
下載 SDK-
HMS SDK 使用 Gradle 依賴方式
配置倉庫,在工程的 build.gradle 文件如下位置添加:allprojects { repositories { jcenter() maven {url 'http://developer.huawei.com/repo/'} } }
在模塊 build.gradle 文件中添加如下依賴:
String HMSSDKVer = '2.6.3.301' implementation 'com.huawei.android.hms:hwid:'+ HMSSDKVer // 登陸 implementation 'com.huawei.android.hms:iap:' + HMSSDKVer // 支付
注意:版本號(hào)要同 Agent 保持一致
-
集成 Agent
在1.1中下載的 Agent 包镜沽,解壓縮敏晤,根據(jù)實(shí)際情況運(yùn)行其中的腳本。執(zhí)行下面操作的前提是 appid 已經(jīng)申請下來缅茉。
首先進(jìn)入HMSAgent_2.6.3.301/
目錄嘴脾,在命令行運(yùn)行腳本:// 在Mac下執(zhí)行,為了避免換行符的問題需要先執(zhí)行下 cat GetHMSAgent_cn.sh | tr "^M" "\n" > GetHMSAgent_cn_new.sh // 注意 ^M是通過:Ctrl+v 蔬墩、Ctrl+M 輸入得到的译打,復(fù)制或輸入^M無效 // 接著修改下文件權(quán)限 chmod 777 GetHMSAgent_cn_new.sh // 執(zhí)行文件 ./GetHMSAgent_cn_new.sh
接下來就按提示根據(jù)實(shí)際情況進(jìn)行輸入和選擇。
看到輸出提示“按回車鍵結(jié)束”后拇颅,可以看到在腳本所在目錄中看到目錄copysrc
奏司,將AppManifestConfig.xml
中的內(nèi)容添加到工程的AndroidManifest.xml
文件中,將java/
目錄中的com/
目錄整體拷貝到工程中樟插。
到此添加集成 SDK 完成韵洋。
二、接入
- 調(diào)用
init
接口黄锤,在 Application 的 onCreate 方法中初始化 HMSAgent搪缨。HMSAgent.init(this);
- 調(diào)用
connect
接口
注意:必須在應(yīng)用啟動(dòng)后就調(diào)用該接口HMSAgent.connect(this, new ConnectHandler() { @Override public void onConnect(int rst) { LogUtil.d("huawei connect:" + rst); } });
- 調(diào)用checkUpdate接口
調(diào)用該接口,當(dāng)華為市場上傳了新版本鸵熟,那么將出現(xiàn)升級(jí)新版本的提示框副编,用戶確認(rèn)后,將自動(dòng)下載安裝新版本流强。HMSAgent.checkUpdate(this, new CheckUpdateHandler() { @Override public void onResult(int rst) { LogUtil.d("huawei checkUpdate:" + rst); } });
注意:該方法也必須在應(yīng)用啟動(dòng)時(shí)調(diào)用痹届,否則會(huì)影響審核。
- 調(diào)用登錄方法
HMSAgent.Hwid.signIn(true, new SignInHandler() { @Override public void onResult(int rst, SignInHuaweiId result) { // 打印返回碼 LogUtil.d("huawei sign resutlCode: " + rst); if (rst == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && null != result) { // 打印用戶信息 LogUtil.d("userInfo = " + result.toString()); } else { // 提示登錄失敗碼 ToastUtil.show(LoginActivity.this, rst); } } });
- 調(diào)用支付方法
// payReq 支付請求類實(shí)例打月,最好是服務(wù)器端給到這些數(shù)據(jù) HMSAgent.Pay.pay(payReq, new PayHandler() { @Override public void onResult(int retCode, PayResultInfo payInfo) { if (retCode == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && payInfo != null) { // 此處如果是本地處理邏輯的話需要校驗(yàn)簽名是否正確短纵,如果是服務(wù)器處理的話就是成功支付后的邏輯 } else if (retCode == HMSAgent.AgentResultCode.ON_ACTIVITY_RESULT_ERROR || retCode == PayStatusCodes.PAY_STATE_TIME_OUT || retCode == PayStatusCodes.PAY_STATE_NET_ERROR) { // 需要重新獲取訂單狀態(tài) } else { ToastUtil.show(context, "支付失敗, code = " + retCode); } } });
三僵控、集成香到、接入中遇到的問題
- 腳本執(zhí)行的時(shí)候遇到問題:
a) 執(zhí)行腳本后無反應(yīng)
b) 提示:exec format error
c) 提示:parse error near 'elif'
解決辦法:上面集成 Agent 中已給出解決辦法。 - 一開始 HMS Agent 同 HMS SDK 版本不一致,導(dǎo)致初始化失敗悠就,提示-1000千绪。
參考文檔:
官方文檔
腳本不能正常執(zhí)行