1. signIn导致弹窗无应用
问题复现:
该问题在集成HMSCore服务时出现,问题表现为多FA(Multi FA)集成的项目中,在entry模块中调用登录后没有反应,在该Demo测试中,使用的是JS UI模板构建的原子化服务,该Demo需要引用@hms-js-account 库,使用该库进行基本的登录,代码片段如下:
signIn: function() {
//该登录方式依赖于"@hmscore/hms-jsb-account": "^1.0.300"
var scopeList = [OPENID] //表示获取的
var signInOption = new HuaweiIdAuthParamsHelper().setId().setProfile().setScopeList(scopeList).setAuthorizationCode().build();
HuaweiIdAuthManager.getAuthApi().getSignInIntent(signInOption).then((result) = >{
// 登录成功,获取用户的华为帐号信息
console.info("signIn success");
console.info(JSON.stringify(result));
console.info("昵称:" + result.getDisplayName());
console.info("头像:" + result.getAvatarUri());
}).
catch((error) = >{
// 登录失败
console.error("signIn fail");
console.error(JSON.stringify(error));
});
}
signIn2: function() {
//该登录方式依赖于"@hmscore/hms-js-account": "5.2.0-300"
HMSAccount.signIn(permissions, scopes).then((res) = >{
//登录成功的处理代码
}).
catch((err) = >{
switch (err.resultCode) {
//处理异常,2005为网络异常代码
}
});
}
处理方式:
以上问题可以移除非entry模块中metaData闭包中关于com.huawei.hms.client.appid子闭包或者将其自闭包值改为和entry模块中对应的值一样,否则会出现无法登录的问题,该appid由OAuth 2.0生成,此处appid在AppGallery Connect页面中我的应用中可以查看,具体如下:
"metaData": {
"customizeData": [
{
//该闭包不应该在非enrty模块内添加
"name": "com.huawei.hms.client.appid",
"value": "10xxxxxx"
},
{
"name": "hwc-theme",
"value": "androidhwext:style/Theme.Emui.Translucent.NoTitleBar"
}
]
}
增补:
对于使用HMS进行华为账号登录的时候,项目开发的appid可以前往华为开发者联盟凭证中去生成:
生成的应用类型选择移动应用,应用包名和SHA256指纹均需要和项目对应。
2. 代码修改后调试不生效
解决方案:
该问题主要是由于IDE工具的缓存问题,建议在不生效的时候先卸载app再安装,同时Rebuild项目,可以使用以下方式进行卸载:
$ adb uninstall com.xxx.xxx #需要手机连接上电脑
- 另外一个问题可能是由于跨FA进行调用,这时候调试的时候记得开启Deploy Multi Hap Packages选项。
- 假设项目
hml组件
比较多,比如开发人员单独写了一个NavBar
page组件,如果在其他Component
中(指的是单独一个Ability
)引用,那么缓存的原因就不会更新该Ability引用的hml信息,最终也就在调试的时候看不到预期效果。
3. DevEco Studio无法下载SDK
Network connection failed. Check the network or HTTP proxy settings.
该问题主要是由于电脑端的语言设置问题,通过修改以下文件可以纠正:
C:\Users\username\AppData\Roaming\Huawei\DevEcoStudio3.1\options\country.region.xml
修改成:
<application>
<component name="CountryRegionSetting">
<countryregion name="CN"/>
</component>
</application>
再次运行软件即可正常下载SDKs。
4. 上架后无法自动下载调用的模块
该问题主要是由于原来FA程序的demo中的调用模块Flag缺少自动安装的标记,样例代码如下:
Operation operation = new Intent.OperationBuilder()
.withDeviceId("")
.withBundleName(BUNDLE_NAME)
.withAbilityName(PARTIAL_DEVICE_ABILITY_NAME)
.withFlags(Intent.FLAG_ABILITY_NEW_MISSION | Intent.FLAG_INSTALL_ON_DEMAND)
.build();
如果调用的模块为单独的FA模块,那需要添加Intent.FLAG_INSTALL_ON_DEMAND标记才能自动下载对应模块。
5. Failure[INSTALL_FAILED_APP_SOURCE_NOT_TRUSTED]
该问题主要是由于证书和设备不匹配,在调试的时候我们要确保几点是相对应的:
- 设备的UDID已经添加到列表中
- 使用旧证书的时候需要重新下载*.cer文件(在证书管理页面直接下载对应的证书cer即可)