接触卫士(Contact Shield)是HMS Core提供的基于低功耗蓝牙(Bluetooth Low Energy,简称BLE)的接触诊断基础服务。各国政府组织可以使用接触卫士API开发新冠病毒接触跟踪的应用。在保护用户隐私的基础上,实现和其他手机的互通,帮助用户诊断是否接触了病毒感染者,从而减少新冠病毒的蔓延。

接触卫士的工作原理

1.   B的手机会根据每天的周期性密钥(Periodic Key)生成动态共享码(Dynamic Sharing Code,简称DSC)集合,再通过BLE向周围广播DSC。

2.   A的手机扫描到B的手机广播的DSC后,记录当前时间戳和蓝牙接收信号强度(Received Signal Strength Indicator,简称RSSI),并将这些数据存储至本地数据库中。

3.   假如B被确诊为COVID-19患者,App获取B的授权后将病毒潜伏期(默认14天)内的周期性密钥上传至App或公共卫生机构指定的服务器。此时,B的周期性密钥称为共享密钥(Shared Key)。

4.   A的App定时从服务器下载确诊者的周期性密钥的压缩文件,并调用接触卫士(Contact Shield)进行接触诊断,并根据App提供的共享密钥推导出确诊者曾经广播的DSC集合。

5.   接触诊断过程中,接触卫士使用第4步中生成的DSC集合去匹配本地数据库中曾保存的过去14天的DSC数据表,匹配结束后生成诊断报告,并通过App告知A接触诊断结果。

根据诊断报告,A便可获知曾经是否与确诊者有过密切接触,以及接触的潜在风险等级。

接触卫士在调用接口的过程中会有返回错误码-1的场景,该场景下可能的错误有很多,在这里给大家分享一些该错误码的排查步骤。

注:遇到-1错误码时可以先查看一下报错的日志,然后过滤搜索HmsNearbyKit_sdk_ContactApiImpl关键字,日志中一般都会包含一个真正错误原因的错误码。

1.没有申请接触卫士权限(错误码6004)

原因1

与其他HMS SDK不同,接触卫士SDK需要邮件发送相关信息来开通权限。

申请接触卫士API权限可以参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/contactshield-request-access-0000001058448610?ha_source=hms1

原因2

本地项目中的agconnect-services.json文件不匹配。需要重新确认下本地项目中添加的agconnect-services.json文件与实际需要的agconnect-services.json文件是不是同一个。

可以去AGC官网上重新下载新的agconnect-services.json文件,然后重新调测。

agconnect-services.json文件下载请参考:

https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/contactshield-integratesdk-0000001058897058?ha_source=hms1

2.生成APK的签名文件(.keystore.jks)与其在AGC上配置的SHA-256信息不一样(错误码6003)

APK签名的文件必须与下方AGC上配置的签名一样才行。

配置步骤可以参考:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/contactshield-config-agc-0000001057648627?ha_source=hms1

3.首次调用API时,手机没联网

首次调用接触卫士的API时,如果手机没有连接网络,这种场景下也会返回-1。此场景下,保证网络连接正常后,重新调用接触卫士的API即可。

4.在调用startContactShield()接口后,用户手动取消了弹窗提示

调用startContactShield()接口后,会有如下弹窗,必须选择Allow,才能正常调用接触卫士的API:

注:最新版本的接触卫士中错误码已经更新为8105。

5.没有HMS Core APK的定位权限

在调用startContactShield()接口后,除了会弹第4点的弹窗外,如果没有定位权限的话也会弹如下弹窗。同样必须选择“ ALLOW ALL THE TIME” 才能正常调用接触卫士的API。

注:最新版本的接触卫士中错误码已经更新为8103。

该权限的设置可以在 设置-应用-应用管理-搜索HMS Core-权限-位置信息 中查看。

6.调用putSharedKeyFiles接口,提供的文件格式不对

调用接触卫士的putSharedKeyFiles接口时,传入的List<File> files中的文件存在问题。

该文件的格式以及生成方式与谷歌的Exposure Notifications中相关文件的格式和生成方式是一样的。

谷歌相关文档请参考:

https://developers.google.com/android/exposure-notifications/exposure-key-file-format

https://github.com/google/exposure-notifications-server/blob/main/examples/export/README.md

>>访问华为开发者联盟官网,了解更多相关内容

>>获取开发指导文档

>>华为移动服务开源仓库地址:GitHub、Gitee

关注我们,第一时间了解华为移动服务最新技术资讯~

如何优雅地排查华为接触卫士—1错误码相关推荐

  1. 【HMS Core】华为登录后返回错误码 8 、账号服务如何授权、推送服务端获取用户信息异常

    1.[HMS core][游戏登陆][问题描述] 调用华为登录后返回错误码 8 [解决方案] 错误码8的话一般在定义为内部错误(引起该错误码的原因很多),但是一般重试基本可以解决该问题(错误码).如果 ...

  2. 支付宝支付之“单笔转账到支付宝账户接口”的调用(生成签名、上传应用公钥、下载SDK、接口调用、报错自动排查、查看错误码)

    支付宝接口调用 "单笔转账到支付宝账户"的接口调用,一般涉及到下面几个知识点 1.生成签名 在使用支付宝接口的时候,需要使用支付宝的签名,这里需要使用支付宝的RSA生成工具. 关于 ...

  3. error 系统错误 错误码10007_在Java项目中打印错误日志的正确姿势,排查问题更方便,非常实用!...

    作者:琴水玉 cnblogs.com/lovesqcc/p/4319594.html 在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导. 但是在实际中打的错误日志内容和格式变 ...

  4. LoadLibrary下错误返回126错误码排查过程

    在开发一些Windows下的应用程序过程中,经常会手动加载一些DLL,使用的就是LoadLibrary这个函数,而这个函数一旦失败,返回的错误码基本都是126,126错误码的意思是找不到指定的模块,这 ...

  5. 未知的错误代码在应用程序安装:110 android,应用在华为P9手机上安装失败原因分析 (错误码:-110)...

    问题描述: 应用在之前的华为手机上都能正常安装,但是在华为P9手机上安装失败,提示错误为: 失败原因: 系统问题导致安装失败(错误码:-110) 原因分析: 开始怀疑是android的版本问题,后来看 ...

  6. 微博分享回调成功,但是微博客户端却进入草稿箱,提示错误码 8995。第三方问题排查思路总结

    问题再现 问题描述:Android平台微博分享,app收到api回调,表示分享成功,但是打开微博客户端app,该分享进入草稿箱,并提示 : (8995)app auth fail for appKey ...

  7. 游戏接入华为SDK4.0(记录:实名认证问题、错误码查询和支付/游戏/账号demo下载地址)

    一.HMS SDK4.0开发前期参数准备 1.打开华为开发者管理中心:链接: 华为开发者管理中心. 按照截图上选择AppGallery Connect 2.打开AppGallery Connect 链 ...

  8. 应用在华为P9手机上安装失败原因分析 (错误码:-110)

    问题描述: 应用在之前的华为手机上都能正常安装,但是在华为P9手机上安装失败,提示错误为: 失败原因: 系统问题导致安装失败(错误码:-110) 原因分析: 开始怀疑是android的版本问题,后来看 ...

  9. mysql修改密码报错问题以及远程工具连接华为云数据库报错问题

    mysql修改密码报错问题以及远程工具连接华为云数据库报错问题 1.mysql修改密码错误 2. 华为云远程数据库连接工具无法连接问题 1.mysql修改密码错误 很久没用自己电脑里的mysql,这次 ...

最新文章

  1. 取一个字符串中的数字
  2. [转]Pass a ViewBag instance to a HiddenFor field in Razor
  3. Cocos2d 3.0继承自Sprite的类在addChild后出现故障
  4. MongoDB查询实现 笛卡尔积,Union All 和Union 功能
  5. 查询SQL中某表里有多少列包含某字段
  6. 解决:您需要来自xxx的权限才能对此文件夹进行更改(电脑系统取得管理员权限)
  7. 中国十大名校“互撕”往事
  8. mysql堆溢出_为什么这个MySQL触发器会导致堆栈溢出?
  9. zipimport — Import modules from Zip archives¶
  10. nodejs进入mysql数据库_nodejs简单访问及操作mysql数据库的方法示例
  11. mv强制覆盖 shell_生产力工具:shell 与 Bash 脚本
  12. mysql修改最大连接数笔记
  13. 三星android+l,高配原生安卓!移动定制版三星I9008L评测
  14. 风格迁移篇--CCPL:Contrastive Coherence Preserving Loss for Versatile Style Transfer多功能风格转换的对比连贯保持损失
  15. LCD1602字符串显示(STM32F103)
  16. matlab 计算均值,方差,标准差
  17. linux dnf配置文件,RedHat8.1配置本地dnf源
  18. PS学习总结二:色彩
  19. IBM沃森对哈利波特各大主角的人格分析
  20. 电容触摸技术实用教程

热门文章

  1. Maven安装教程以及IDEA配置详解(IDEA版)
  2. Python-----有关判断语句练习题以及题目解析(2)
  3. 【AI老婆生成器】定制专属于你的二次元完美女友
  4. 深入理解JVM(六)JVM调优
  5. 极大似然估计 伯努利分布 高斯分布 正态分布
  6. 软文写作技巧之三要素
  7. 基于SSM+Redis+RocketMQ实现的校园快递配送代拿管理系统
  8. ARM-Linux开发与单片机开发的异同
  9. Java——继承(一)
  10. 衡量点云重建结果的指标-CD、EMD