(Примечание. Вероятно, это связано с общей проблемой, с которой у меня здесь , но, поскольку это конкретная проблема 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?