hms
通过SDK
提供的一些能力,即便是离线能力,安装apk
之后第一次使用需要联网。因为需要后台校验一些配置信息,还包括指纹、包名、App ID
等。如果校验不通过是无法调用这些API
的。 这里不说上线应用市场,就看本地打release
包,这里可能需要一些android
开发基础才看得懂。
集成步骤
会让你输入包名,每个包名对应一个应用,在这个应用下会有相应的配置,不同的应用会有不同的配置,所以这里才让你输入包名。而且运行apk
的时候,hms
的sdk
会根据你的包名去匹配后台该包名底下的配置,然后进行验证。
比如.jks
或.keystore
密钥库,密钥库里可以包含多个私钥证书,自己利用android studio
就可以生成,每个密钥用别名alias
区分
注意:这个私钥证书和https
的公钥证书不一样,这个证书里面存放的是私钥,而https
的证书里是公钥。
这是自签名,不用第三方参与颁发证书。
如下图,android studio
可以在密钥库的多个私钥里选择一个私钥进行签名,比如这里可选择别名为hmsdemo
或test2
的私钥去签名
key store password
相当于你家大门钥匙,key password
相当于你家里房间的钥匙,不同的房间需要不同的钥匙。当然使用不同密钥也可以选择用相同的密码充当钥匙,就相当于进了你家大门,其余的房间门都是同一把钥匙,这样方便记忆。
开发者通过JDK
的Keytool
工具以及签名文件,选择自己的密钥库的某一个私钥对应的SHA256
复制(私钥不会在这里显示,你的证书里的个人信息和私钥通过MD5
、SHA1
、SHA256
后的哈希数值会显示在这里,这就是证书的指纹)
查看SHA256
的操作如下:
进入已安装JDK
的bin
目录下。在bin
目录下运行,输入keytool
查看签名文件指令,并运行
keytool -list -v -keystore D:\Android\WorkSpcae\HmsDemo\app\HmsDemo.jks
(window
需要这么操作,mac
直接运行指令即可)
然后把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
提示:如果在“API管理”----“Push Kit”没开启,则会报以下错误
E/HMSSDK_HmsInstanceIdEx: TokenTask failed, ErrorCode: 800100000
E/HMSSDK_AutoInit: Push init failed
com.huawei.hms.common.ApiException: 907122036: no right
最后下载这个agconnect-services.json
到工程根目录,这个json
的数据也是需要后台校验的,hms
会在apk
运行后调用API
时,会将这个里面的数据发送到后台校验,验证不通过则这个API
就调用失败。
agconnect-services.json
内容如下
顺带一提,package_name
就像名字,可能重名,后台是不会根据你的package_name
去区分你的应用的,而app_id
就像身份证号,这个不会重复,可以用来区分不同的应用
将已经生成的签名文件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
}
}