在客户端接入华为登陆和华为支付
一、 集成 SDK
-
下载SDK
包括两个:HMS Agent(下载 .zip 文件,后面需要进行自定义处理)和 HMS SDK(提供:Gradle 依赖或下载 .jar 文件)。
注意:使用的HMS SDK Agent的主版本号必须与HMS SDK相同。例如HMS SDK Agent 2.6.3.301,2.6.3即为主版本号。
下载 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 // 支付
注意:版本号要同 Agent 保持一致
-
集成 Agent
在1.1中下载的 Agent 包,解压缩,根据实际情况运行其中的脚本。执行下面操作的前提是 appid 已经申请下来。
首先进入HMSAgent_2.6.3.301/
目录,在命令行运行脚本:// 在Mac下执行,为了避免换行符的问题需要先执行下 cat GetHMSAgent_cn.sh | tr "^M" "\n" > GetHMSAgent_cn_new.sh // 注意 ^M是通过:Ctrl+v 、Ctrl+M 输入得到的,复制或输入^M无效 // 接着修改下文件权限 chmod 777 GetHMSAgent_cn_new.sh // 执行文件 ./GetHMSAgent_cn_new.sh
接下来就按提示根据实际情况进行输入和选择。
看到输出提示“按回车键结束”后,可以看到在脚本所在目录中看到目录copysrc
,将AppManifestConfig.xml
中的内容添加到工程的AndroidManifest.xml
文件中,将java/
目录中的com/
目录整体拷贝到工程中。
到此添加集成 SDK 完成。
二、接入
- 调用
init
接口,在 Application 的 onCreate 方法中初始化 HMSAgent。HMSAgent.init(this);
- 调用
connect
接口
注意:必须在应用启动后就调用该接口HMSAgent.connect(this, new ConnectHandler() { @Override public void onConnect(int rst) { LogUtil.d("huawei connect:" + rst); } });
- 调用checkUpdate接口
调用该接口,当华为市场上传了新版本,那么将出现升级新版本的提示框,用户确认后,将自动下载安装新版本。HMSAgent.checkUpdate(this, new CheckUpdateHandler() { @Override public void onResult(int rst) { LogUtil.d("huawei checkUpdate:" + rst); } });
注意:该方法也必须在应用启动时调用,否则会影响审核。
- 调用登录方法
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); } } });
- 调用支付方法
// payReq 支付请求类实例,最好是服务器端给到这些数据 HMSAgent.Pay.pay(payReq, new PayHandler() { @Override public void onResult(int retCode, PayResultInfo payInfo) { if (retCode == HMSAgent.AgentResultCode.HMSAGENT_SUCCESS && payInfo != null) { // 此处如果是本地处理逻辑的话需要校验签名是否正确,如果是服务器处理的话就是成功支付后的逻辑 } else if (retCode == HMSAgent.AgentResultCode.ON_ACTIVITY_RESULT_ERROR || retCode == PayStatusCodes.PAY_STATE_TIME_OUT || retCode == PayStatusCodes.PAY_STATE_NET_ERROR) { // 需要重新获取订单状态 } else { ToastUtil.show(context, "支付失败, code = " + retCode); } } });
三、集成、接入中遇到的问题
- 脚本执行的时候遇到问题:
a) 执行脚本后无反应
b) 提示:exec format error
c) 提示:parse error near 'elif'
解决办法:上面集成 Agent 中已给出解决办法。 - 一开始 HMS Agent 同 HMS SDK 版本不一致,导致初始化失败,提示-1000。
网友评论