Исключение API-интерфейса SafetyNetClient не удалось выполнить аттестацию

При попытке пройти аттестацию с помощью 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();
}

Выход логкэта:

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 говорит об исключении для быть возвращено Задачей, когда вызов сервисов Google Play не удался.

Может ли кто-нибудь помочь. заранее спасибо


person indraja machani    schedule 18.01.2018    source источник


Ответы (1)


Очень вероятно, что на вашем устройстве не установлена ​​последняя версия сервисов Google Play.

С одной стороны, у вас есть API, который, как вы знаете, в версии 11.0.0 перешел от использования SafetyNetApi к использованию SafetyNetClient.

С другой стороны, у вас есть сервисы Google Play, которые, в свою очередь, выполняют необходимые вам функции в соответствии с запросами API. Однако даже если вы создадите свое приложение с использованием последней версии API, нет никаких гарантий, что на устройстве, на котором работает ваше приложение, действительно установлена ​​последняя версия Play Services.

Дословное копирование из документации:

Прежде чем использовать API аттестации SafetyNet, необходимо убедиться, что на устройстве пользователя установлена ​​правильная версия сервисов Google Play. Если установлена ​​неправильная версия, ваше приложение может перестать отвечать после вызова API. Если ваше приложение обнаруживает, что установлена ​​неправильная версия, вы должны попросить пользователя обновить приложение сервисов Google Play на своем устройстве.

Чтобы проверить, совместима ли установленная версия служб Google Play с используемой вами версией Android SDK, вызовите метод isGooglePlayServicesAvailable(), как показано в следующем фрагменте кода:

if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context)
        == ConnectionResult.SUCCESS) {
  // The SafetyNet Attestation API is available.
}
person Oscar    schedule 07.03.2018