八、从华为HMS Core集成过程看密码学知识

章节系列目录:点击跳转

  hms通过SDK提供的一些能力,即便是离线能力,安装apk之后第一次使用需要联网。因为需要后台校验一些配置信息,还包括指纹、包名、App ID等。如果校验不通过是无法调用这些API的。

  这里不说上线应用市场,就看本地打release包,这里可能需要一些android开发基础才看得懂。

集成步骤

1.在AppGallery Connect(华为开发者服务的后台)创建项目及应用

  会让你输入包名,每个包名对应一个应用,在这个应用下会有相应的配置,不同的应用会有不同的配置,所以这里才让你输入包名。而且运行apk的时候,hmssdk会根据你的包名去匹配后台该包名底下的配置,然后进行验证。

2.生成签名证书

  比如.jks.keystore密钥库,密钥库里可以包含多个私钥证书,自己利用android studio就可以生成,每个密钥用别名alias区分

  注意:这个私钥证书和https的公钥证书不一样,这个证书里面存放的是私钥,而https的证书里是公钥。

  这是自签名,不用第三方参与颁发证书。

  如下图,android studio可以在密钥库的多个私钥里选择一个私钥进行签名,比如这里可选择别名为hmsdemotest2的私钥去签名

  key store password相当于你家大门钥匙,key password相当于你家里房间的钥匙,不同的房间需要不同的钥匙。当然使用不同密钥也可以选择用相同的密码充当钥匙,就相当于进了你家大门,其余的房间门都是同一把钥匙,这样方便记忆。

3.选择签名的私钥查看证书并导出指纹。

  开发者通过JDKKeytool工具以及签名文件,选择自己的密钥库的某一个私钥对应的SHA256复制(私钥不会在这里显示,你的证书里的个人信息和私钥通过MD5SHA1SHA256后的哈希数值会显示在这里,这就是证书的指纹)

  查看SHA256的操作如下:

  进入已安装JDKbin目录下。在bin目录下运行,输入keytool查看签名文件指令,并运行

keytool -list -v -keystore D:\Android\WorkSpcae\HmsDemo\app\HmsDemo.jks

(window需要这么操作,mac直接运行指令即可)

4.在AppGallery Connect(华为开发者服务的后台)添加指纹

  然后把SHA256填写到华为开发者服务的后台配置页面,方便hms发送数据给后台校验SHA256时用。

  如果校验不通过日志也会打印失败,我在测试华为推送服务的时候填写错了SHA256导致打印错误日志如下:

E/HMSSDK_HmsInstanceIdEx: TokenTask failed, ErrorCode: 6003
E/HMSSDK_AutoInit: Push init failed
    com.huawei.hms.common.ApiException: 6003: certificate fingerprint error

5.AppGallery Connect上开通API服务

  提示:如果在“API管理”----“Push Kit”没开启,则会报以下错误

E/HMSSDK_HmsInstanceIdEx: TokenTask failed, ErrorCode: 800100000
E/HMSSDK_AutoInit: Push init failed
    com.huawei.hms.common.ApiException: 907122036: no right

6.添加项目配置

  最后下载这个agconnect-services.json到工程根目录,这个json的数据也是需要后台校验的,hms会在apk运行后调用API时,会将这个里面的数据发送到后台校验,验证不通过则这个API就调用失败。

  agconnect-services.json内容如下

  顺带一提,package_name就像名字,可能重名,后台是不会根据你的package_name去区分你的应用的,而app_id就像身份证号,这个不会重复,可以用来区分不同的应用

7.配置项目签名

将已经生成的签名文件HmsDemo.jks拷贝到app文件夹下,并打开应用级build.gradle文件(通常是 app/build.gradle

在build.gradle文件的android闭包中添加签名配置信息。

signingConfigs {
    release {
        storeFile file('HmsDemo.jks')
        keyAlias 'hmsdemo'     // ====使用密钥库中的哪一个密钥
        keyPassword '123456'    // ====访问这个密钥库需要的密码,大门钥匙
        storePassword '123456'    // ====访问指定的密钥需要的密码,卧室钥匙
        v1SigningEnabled true
        v2SigningEnabled true
    }
}

buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
    debug {
        signingConfig signingConfigs.release
        debuggable true
    }
}

关注、留言,我们一起学习。

----------------------Talk is cheap, show me the code-----------------------
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页