2

我正在使用 Google 客户端调用 SafetyNet Api,但它没有响应正确的响应。

   SafetyNet.SafetyNetApi.attest(mGoogleApiClient, generateNonce())
            .setResultCallback(new ResultCallback<SafetyNetApi.AttestationResult>() {
                @Override
                public void onResult(SafetyNetApi.AttestationResult result) {
                    Status status = result.getStatus();
                    String data = decodeJws(result.getJwsResult());

                    if (status.isSuccess()) {
                        // Indicates communication with the service was successful.
                        // Use result.getJwsResult() to get the result data.
                    } else {
                        // An error occurred while communicating with the service.
                    }
                }
            });

我在结果方法中收到以下错误消息。

状态{statusCode=NETWORK_ERROR, resolution=null}

任何形式的帮助将不胜感激。

4

2 回答 2

0

首先,您必须通过以下方法生成随机数

   private static byte[] getRequestNonce() {
    String data = String.valueOf(System.currentTimeMillis());
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    byte[] bytes = new byte[24];
    Random random = new Random();
    random.nextBytes(bytes);
    try {
        byteStream.write(bytes);
        byteStream.write(data.getBytes());
    }catch (IOException e) {
        return null;
    }
    return byteStream.toByteArray();
}

后记使用安全网客户端认证api

 SafetyNet.getClient(context).attest(nonce, <API KEY>).addOnSuccessListener(new OnSuccessListener<SafetyNetApi.AttestationResponse>() {
                @Override
                public void onSuccess(SafetyNetApi.AttestationResponse attestationResponse) {
                    // parse response 

                }
            }).addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                    // An error occurred while communicating with the service.
                }
            });
        }

参考:示例代码离线验证

示例代码 使用google api在线验证

于 2019-07-21T16:56:35.463 回答
0

这不起作用,因为您正在使用SafetyNetApi不再受支持的 。

从 Google Play Services 11.0.0 开始,您现在应该获得一个 API 密钥,然后使用它SafetyNetClient

您可能还想看看在使用 SafetyNet Attestation API 时可能做错的 10 件事

于 2019-01-16T02:52:39.163 回答