问题背景:
为了让我们开发者减少集成配置,在集成华为HMS SDK时,华为提供了agconnect-services.json文件,开发者需要按照指导获取该文件,并将文件部署到工程制定位置。agconnect-services.json文件内包含appid、cpid等AGC页面创建的各种项目信息。
问题现象:
集成测试调用接口失败,日志有两个比较明显报错,一个是找不到appid以及cpid,还有一个是接口报错907135000。
日志报错:
E/HMSSDK_AGCUtils: In getMetaDataAppId, Failed to read meta data for the AppID.
E/HMSSDK_AGCUtils: Get client/app_id failed: java.io.FileNotFoundException: agconnect-services.json
E/HMSSDK_AGCUtils: The client/app_id is null.
E/SecurityResourcesReader: KEY is null return def directly
I/HMSSDK_AGCUtils: In getMetaDataCpId, Failed to read meta data for the CpId.
E/HMSSDK_AGCUtils: Get client/cp_id failed: java.io.FileNotFoundException: agconnect-services.json
E/HMSSDK_AGCUtils: The client/cp_id is null.
I/HMSSDK_HmsClient: receive msg status_code:1, error_code 907135000, api_name:core.getNoticeIntent, app_id:|, pkg_name:com.appservicetest.huawei, session_id:*, transaction_id:000000000Intent20201105190645844381286, resolution:null
定位过程:
从日志中可以看出agconnect-services.json文件没有集成成功,自己看官网资料以及和华为支持人员沟通,总结以下几个检查点:
- “agconnect-services.json”文件要拷贝到应用级根目录下,如下图。
-
检查下应用级build.gradle中包名applicationId是否为agc页面配置的包名,区分大小写。
-
检查下项目级“build.gradle”文件中在“buildscript > dependencies”中是否添加agcp配置。示例如下:
buildscript {
repositories {
google()
jcenter()
maven {url 'https://developer.huawei.com/repo/'}
}
dependencies {
...
classpath 'com.huawei.agconnect:agcp:1.4.1.300'
}
}
- 检查应用级的“build.gradle”文件添加如下配置
apply plugin: ‘com.huawei.agconnect’
注意:该配置必须添加到apply plugin: 'com.android.application的下一行,否则会有问题。
- 如果涉及多渠道发包,可能以上检查后仍然不能检查到appid和cpid,则可以使用以下“笨方法”起到相同效果。
json文件仍部署到制定位置,然后在manifest中定义appid和cpid,配置如下信息
<meta-data
android:name="com.huawei.hms.client.appid"
<!-- value的值“xxx”用实际申请的应用ID替换,来源于应用详情。-->
android:value="appid=xxx">
</meta-data>
<!-- value的值“xxx”用实际申请的开发者的支付ID替换,来源于应用的支付服务信息。-->
<meta-data
android:name="com.huawei.hms.client.cpid"
android:value="cpid=xxx">
</meta-data>
cpid从agconnect-services.json查询
通过以上方式基本可以解决类似问题。
作者:Mayism