Превышен ежедневный лимит Google Диска 403 для несанкционированного использования. Для продолжения использования требуется регистрация » (РЕШЕНО)

# #android #google-cloud-platform #google-drive-api

Вопрос:

У меня есть приложение, которое хранит app-database.db файл на Google Диске пользователя appDataFolder . Приложение еще не опубликовано, поэтому в настоящее время я единственный пользователь, использующий приложение.

API key и OAuth Client ID для обоих debug типов и release типов сборки генерируются Google Cloud Console . Проект добавляется Firebase Console , а google-services.json файл добавляется в основную папку модуля приложения.

OAuth Contest завершено, его набор In Production и добавленные области являются .../auth/drive.appdata и .../auth/drive.file которые оба являются non-sensitive scopes , так Verification not required что . Также Google Drive API включен в Google Cloud Console .

Отправка пользователя на экран входа, как это:

 val signInOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  .requestScopes(Scope(DriveScopes.DRIVE_FILE))
  .requestScopes(Scope(DriveScopes.DRIVE_APPDATA))
  .requestEmail()
  .build()
startActivityForResult(GoogleSignIn.getClient(this, signInOptions).signInIntent, SIGN_IN_REQ_CODE)
 

Проверка результата подписи выглядит следующим образом:

 GoogleSignIn.getSignedInAccountFromIntent(result)
  .addOnSuccessListener { account: GoogleSignInAccount ->
    if (GoogleSignIn.hasPermissions(account, *scopes)) {
      val drive = GoogleAccountCredential.usingOAuth2(this@SomeActivity, credentialScopes)
            .apply { selectedAccount = account.account }
            .let {
               Drive.Builder(AndroidHttp.newCompatibleTransport(), GsonFactory(), it)
                  .setApplicationName("APP_NAME_FROM_CONTEST_SCREEN")
                  .build()
            }
            // ...
    } else {
       GoogleSignIn.requestPermissions(this@SomeActivity, PERMISSIONS_REQ_CODE, account, *scopes)
    }
  }.addOnFailureListener {
    // ...
  }

private val scopes = arrayOf(Scope(DriveScopes.DRIVE_FILE), Scope(DriveScopes.DRIVE_APPDATA), Scope(Scopes.PROFILE), Scope(Scopes.OPEN_ID), Scope(Scopes.EMAIL))
private val credentialScopes = listOf(DriveScopes.DRIVE_FILE, DriveScopes.DRIVE_APPDATA)
 

Теперь, когда я пытаюсь загрузить или загрузить файл из/в любую папку Drive API Client v3 , он отлично работает debug build . Но в release build я получаю:

 403 Forbidden
{
  "errors": [
    {
      "domain": "usageLimits",
      "reason": "dailyLimitExceededUnreg",
      "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
      "extendedHelp": "https://code.google.com/apis/console"
    }
  ],
  "code": 403,
  "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
}
 

Так в чем же проблема? Он работает как внутри debug , так и не внутри release , хотя ключи для обоих типов добавляются внутри консоли. Любая помощь будет признательна.

Обновить

Я решил minifyEnabled true , так что для меня проблема заключалась в правилах proguard. Добавление правил proguard устранило проблему.

 # Needed to keep generic types and @Key annotations accessed via reflection
-keepattributes Signature,RuntimeVisibleAnnotations,AnnotationDefault

-keepclassmembers class * { @com.google.api.client.util.Key <fields>; }

# Needed by google-http-client-android when linking against an older platform version
-dontwarn com.google.api.client.extensions.android.**

# Needed by google-api-client-android when linking against an older platform version
-dontwarn com.google.api.client.googleapis.extensions.android.**

# Needed by google-play-services when linking against an older platform version
-dontwarn com.google.android.gms.**
 

Комментарии:

1. Превышен ежедневный лимит для использования без проверки подлинности. означает, что вы не отправили заголовок авторизации и токен на предъявителя с вашим запросом в api. Похоже, вы пытаетесь смешать signin и Oauth2. Это две разные вещи. попробуйте использовать клиентскую библиотеку java Google api, возможно, что-то вроде этого medium.com/android-dev-hacks/…

2. @DalmTo использует ту же библиотеку и выполняет те же действия, описанные в ссылке выше, но в сборке выпуска возникает то же исключение. Вопрос в том, есть ли какие-либо проблемы с заголовками или доступом, как код отлично работает в отладочной сборке.