美文网首页移动开发技术集锦
Android 集成、接入华为登陆和华为支付

Android 集成、接入华为登陆和华为支付

作者: 不知名bzm | 来源:发表于2019-01-10 18:14 被阅读0次

在客户端接入华为登陆和华为支付

一、 集成 SDK

  1. 下载SDK
    包括两个:HMS Agent(下载 .zip 文件,后面需要进行自定义处理)和 HMS SDK(提供:Gradle 依赖或下载 .jar 文件)。
    注意:使用的HMS SDK Agent的主版本号必须与HMS SDK相同。例如HMS SDK Agent 2.6.3.301,2.6.3即为主版本号。
    下载 SDK

  2. 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 保持一致

  3. 集成 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 完成。

二、接入

  1. 调用 init 接口,在 Application 的 onCreate 方法中初始化 HMSAgent。
    HMSAgent.init(this);
    
  2. 调用 connect 接口
    HMSAgent.connect(this, new ConnectHandler() {
      @Override
      public void onConnect(int rst) {
        LogUtil.d("huawei connect:" + rst);
      }
    });
    
    注意:必须在应用启动后就调用该接口
  3. 调用checkUpdate接口
    调用该接口,当华为市场上传了新版本,那么将出现升级新版本的提示框,用户确认后,将自动下载安装新版本。
    HMSAgent.checkUpdate(this, new CheckUpdateHandler() {
      @Override
      public void onResult(int rst) {
        LogUtil.d("huawei checkUpdate:" + rst);
      }
    });
    

注意:该方法也必须在应用启动时调用,否则会影响审核。

  1. 调用登录方法
    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);
        }
      }
    });
    
  2. 调用支付方法
    // 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);
        }
      }
    });
    

三、集成、接入中遇到的问题

  1. 脚本执行的时候遇到问题:
    a) 执行脚本后无反应
    b) 提示:exec format error
    c) 提示:parse error near 'elif'
    解决办法:上面集成 Agent 中已给出解决办法。
  2. 一开始 HMS Agent 同 HMS SDK 版本不一致,导致初始化失败,提示-1000。

参考文档:
官方文档
脚本不能正常执行

相关文章

网友评论

    本文标题:Android 集成、接入华为登陆和华为支付

    本文链接:https://www.haomeiwen.com/subject/cogvrqtx.html