Где идентификатор клиента определен в запросе Google Drive Android OAuth? - PullRequest
0 голосов
/ 10 апреля 2020

(Примечание. Вероятно, это связано с общей проблемой, с которой у меня здесь , но, поскольку это конкретная проблема c, я спрошу об этом отдельно.)

Я пытаюсь заставить работать Google Drive авторизацию на Android. Он отлично работает на моей отладочной (Android Studio) сборке, но после упаковки в Google Play авторизация не производится. Я подозреваю, что это как-то связано с подписанием.

У меня есть два разных имени пакета, которые скомпилированы из одного источника - два разных productFlavors в build.gradle - и поэтому два разных набора учетных данных в одном проекте в консоль API Google.

Я изначально создал учетные данные, используя сертификат подписи релиза SHA-1. Но это не сработает в моей среде разработки, пока я не создам другой набор учетных данных (в том же проекте, используя то же имя пакета com.me.myproject), но вместо этого с отладочным сертификатом Android Studio SHA-1. Это, похоже, исправило .

За исключением случаев, как уже упоминалось, сборка, упакованная и развернутая в Google Play (с сертификатом выпуска), не будет работать.

I Мне любопытно, как точно указать, какие учетные данные использовать. Единственным дифференцирующим элементом будет идентификатор клиента, но он не используется в примере кода, который я видел (например, пример Google ).

Итак, что я получил, выглядит например:

    GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestScopes(new Scope(DriveScopes.DRIVE))
            .requestEmail()
// Neither of these is working
//              .requestIdToken(clientID)
//              .requestServerAuthCode(clientID)
            .build();

Указание clientID также приводит к сбою авторизации на моей отладочной сборке, так что это шаг назад. Плюс пример кода Google не использует его вообще:

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
            .requestEmail()
            .build();

Причина, по которой меня это озадачивает, заключается в том, что в Swift, например, я должен указать идентификатор клиента:

        GIDSignIn.sharedInstance()?.clientID = "...client ID..."
        GIDSignIn.sharedInstance()?.scopes = [kGTLRAuthScopeDrive]
        GIDSignIn.sharedInstance()?.restorePreviousSignIn()

И так далее iOS все работает нормально.

Есть (другие) примеры, которые говорят, что в проекте используется «учетные данные. json» (что, как я видел, кажется то же самое, что "client_secret _ *. apps.google.com. json", загружаемый из консоли API Google. Но пример кода Google к нему не относится. (И даже тогда нет информации о том, как включить разные учетные данные для разных имен пакетов или разных сертификатов.)

Что мне не хватает при указании надлежащих учетных данных для проекта в консоли API Google?

...