Атрибут SafetyNetClient api с ошибкой-api исключение
При попытке подтвердить с помощью SafetyNetClient.attest(...) в последней версии Play-Services v11.0.1 клиент выдает ошибку и возвращает исключение ApiException.
фрагмент кода:
byte[] nonce = getRequestNonce();
String apiKey = "<api key>";
mSafetyNetClient.attest(nonce, apiKey)
.addOnCompleteListener(new OnCompleteListener<SafetyNetApi.AttestationResponse>() {
@Override
public void onComplete(@NonNull Task<SafetyNetApi.AttestationResponse> task) {
...
}
});
...
private byte[] getRequestNonce() {
String nonceData = "Safety Net Sample: " + System.currentTimeMillis();
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byte[] bytes = new byte[24];
mRandom.nextBytes(bytes);
try {
byteStream.write(bytes);
byteStream.write(nonceData.getBytes());
} catch (IOException e) {
return null;
}
return byteStream.toByteArray();
}
Выход Logcat:
06-20 16:43:57.987 18222-18222/com.example.test W/System.err: com.google.android.gms.common.api.ApiException
06-20 16:43:57.987 18222-18222/com.example.test W/System.err: at com.google.android.gms.common.internal.zzb.zzx(Unknown Source)
06-20 16:43:57.987 18222-18222/com.example.test W/System.err: at com.google.android.gms.common.internal.zzbi.zzy(Unknown Source)
06-20 16:43:57.987 18222-18222/com.example.test W/System.err: at com.google.android.gms.common.internal.zzbj.zzo(Unknown Source)
06-20 16:43:57.987 18222-18222/com.example.test W/System.err: at com.google.android.gms.internal.zzbbd.zzb(Unknown Source)
06-20 16:43:57.987 18222-18222/com.example.test W/System.err: at com.google.android.gms.internal.zzbbd.setResult(Unknown Source)
06-20 16:43:57.988 18222-18222/com.example.test W/System.err: at com.google.android.gms.internal.zzcsh.zza(Unknown Source)
06-20 16:43:57.988 18222-18222/com.example.test W/System.err: at com.google.android.gms.internal.zzcrw.onTransact(Unknown Source)
06-20 16:43:57.988 18222-18222/com.example.test W/System.err: at android.os.Binder.execTransact(Binder.java:565)
Может кто-нибудь, пожалуйста, помогите.
Google api doc сообщает, что задание возвращает исключение в случае сбоя вызова служб Google Play.
Может ли кто-нибудь, пожалуйста, помогите. заранее спасибо
1 ответ
Весьма вероятно, что на вашем устройстве не установлена последняя версия Google Play Services.
С одной стороны, у вас есть API, который, как вы знаете, в версии 11.0.0 перешел от использования SafetyNetApi
использовать SafetyNetClient
,
С другой стороны, у вас есть сервисы Google Play, которые, в свою очередь, выполняют необходимые вам функции в соответствии с требованиями API. Однако даже если вы создаете свое приложение с последней версией API, нет никаких гарантий, что на устройстве, на котором работает ваше приложение, действительно установлена последняя версия Play Services.
Копирование дословно из документации:
Перед использованием API аттестации SafetyNet необходимо убедиться, что на устройстве пользователя установлена правильная версия сервисов Google Play. Если установлена неправильная версия, ваше приложение может перестать отвечать после вызова API. Если ваше приложение обнаруживает, что установлена неправильная версия, вы должны попросить пользователя обновить приложение служб Google Play на своем устройстве.
Чтобы проверить, совместима ли установленная версия служб Google Play с версией используемого вами SDK Android, вызовите метод isGooglePlayServicesAvailable(), как показано в следующем фрагменте кода:
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == ConnectionResult.SUCCESS) { // The SafetyNet Attestation API is available. }