如何解决使用SafetyDetect安全检测checkSysIntegrity接口报错问题
=============================================

#### 问题现象

使用SafetyDetect安全检测checkSysIntegrity接口提示报错The network is unreachable，请问如何解决？

#### 背景知识

SafetyDetect安全检测：

*   判断设备环境是否安全，比如是否被越狱、被模拟等，您可基于结果评估如何响应。
*   判断用户访问的URL是否为恶意网址，对于恶意网址，由您评估提示或拦截用户的访问风险。
*   获取本设备的系统完整性的在线检测结果：[checkSysIntegrity](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/devicesecurity-safetydetectenhanced-api#section102884586336)。

#### 问题定位

1.  The network is unreachable错误信息所属错误码为[1010800002](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/errorcode-devicesecurity-safetydetect#section1010800002-设备网络异常)，根据错误码信息排查网络情况。
2.  使用SafetyDetect安全检测功能需要在AGC上[开通Device Security服务](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/devicesecurity-deviceverify-activateservice)：检查是否开通相关服务。
3.  检查Profile（.p7b）文件是否使用正确，在开通服务后，需要重新申请Profile（.p7b）文件。
4.  检查调用checkSysIntegrity接口时传入的nonce值是否正确，nonce值必须为16至66字节之间，有效值为base64编码范围。

#### 分析结论

调用checkSysIntegrity接口时传入的nonce值错误，包含base64编码范围之外的字符标识，最终导致调用接口报错。

#### 修改建议

在调用checkSysIntegrity接口时，必须传入一个随机生成的nonce值。在检测结果中会包含这个nonce值，可以通过校验这个nonce值来确定返回结果能够对应请求，并且没有被重放攻击。nonce值必须为16至66字节之间，有效值为base64编码范围，推荐的做法是，每次请求都从服务器随机生成新的nonce值。

#### 常见FAQ

Q：在调用Device Security Kit的checkSysIntegrity接口时，真机不会报错正常返回，使用模拟器测试时，报1010800001内部错误。

A：模拟器与真机存在差异性，Device Security Kit（设备安全服务）暂不支持模拟器。

详见官网：[模拟器与真机的差异](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-emulator-specification#section147193483010)。