Новий вхід Google в Android


78

Я намагаюся отримати ідентифікатор токена користувача за допомогою нових служб Google play 8.3, і, як задокументовано, я передаю ідентифікатор сервера:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken(getString(R.string.server_client_id))
    .requestEmail()
    .build();

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

{statusCode=unknown status code: 12501, resolution=null}

і задокументована тут GoogleSignInStatusCodes

Користувач скасував вхід. тобто користувач скасував деякі дозволи на вхід, наприклад, вибір облікового запису або згоду OAuth.

Постійне значення: 12501

Це не мій випадок, оскільки я вже вибрав рахунок. Будь-яка ідея, що може бути причиною?


Зауважте, що той самий код стану (12501) повертається під час спроби обробити результат із скасованого діалогового вікна входу ( resultCode == Activity.RESULT_CANCELED). Використання GMS 8.4.0.
Євген Печанець

Нарешті, я змусив мене це працювати після того, як боровся майже тиждень: stackoverflow.com/questions/33583326/new-google-sign-in-android/…
Майстер

1
Зверніть увагу, що той самий код 12501 може мати місце з більш тривіальних причин, тобто з-за відсутності підключення до Інтернету.
ris8_allo_zen0

@ ris8_allo_zen0 Я також отримав 12501 через відсутність підключення до Інтернету
Арун

Відповіді:


113

У мене була точно така ж проблема, і я знайшов рішення.

Якщо ви дотримуєтесь документації, яка знаходиться тут: https://developers.google.com/identity/sign-in/android/start-integrating

Перший крок говорить вам про створення конфігураційного файлу (який створює для вас ідентифікатор клієнта OAuth 2.0 та вставляє його в google-services.json)

Потім пізніше він знову говорить про створення ідентифікатора клієнта OAuth 2.0, але на цей раз каже, що це потрібно зробити для веб-програми

І це заплутана частина! (принаймні для мене), тому що я просто брав ідентифікатор клієнта, створений для android OAuth, а не створював новий для веб-програми (я вважав, що документація просто зайва або щось інше)

Як сказано, саме цей, і лише цей, який ви повинні використовувати як параметр методів requestIdToken або requestServerAuthCode .

Забудьте про використання ідентифікатора Android OAuth у цих методах, тому що тоді ви будете весь час отримувати потворну відповідь коду стану 12501.

Я думаю, що головна проблема полягає в тому, що документація дещо заплутана з цього приводу. А може, тому, що трохи дивно той факт, що вам потрібно створити два ідентифікатори OAuth.

Отже, як підсумок, вам потрібні ДВА ідентифікатори OAuth, один для android та інший для веб-додатків, і ви повинні встановити кожен з них у правильному місці.


2
це повинна бути правильна відповідь, врятувала мене півдня головний біль.
abedfar

Ви мені справді допомогли. Це правильна відповідь!
Маркус

Безумовно, слід більше голосів, врятував мій день. Дякую тобі за допомогу!
Габріель Фальконе

7
@Kaizie, коли ти кажеш " і ти повинен встановити кожного в правильному місці ", що ти саме маєш на увазі? Нарешті я ніде не використовую ідентифікатор клієнта Android.
josealfonsomora

6
Ключ клієнта Android @josealfonsomora буде входити всередину google-services.json, а ключ веб-програми повинен бути встановлений у методах requestIdToken або requestServerAuthCode.
Kaizie

19

Я боровся з цим і витратив на це майже тиждень.

Ось так я отримав, що це спрацювало.

  1. Імпорт проекту в AndroidStudio
  2. Створіть налагоджувальний магазин ключів для проекту.
  3. Створіть підпис SHA1 для проекту за допомогою налагоджувального сховища.
  4. За допомогою підпису SHA1 зареєструйте свій додаток для входу в Google на Консолі розробника Google.
  5. Створіть там файл конфігурації Google. (Помістіть у папку програми Android Studio)
  6. Використовуйте ідентифікатор веб-клієнта з облікових даних OAuth 2.0 у своєму проекті Android.
  7. Тепер, з Android Studio, згенеруйте налагодження (APK) для вашого проекту.
  8. Встановіть пристрій у свою систему -> скопіюйте цю підписану налагоджувальну версію APK та встановіть її.

Останні три кроки 6, 7 і 8 - це те, про що вам насправді потрібно подбати. Якщо ви безпосередньо запускаєте проект, то APK насправді не підписаний налагоджувальним сховищем, і Google взагалі не розпізнає його.


1
Не могли б ви пояснити, будь ласка, стор.5 (Помістити в папку додатків Android Studio) Який?
Олексій Тимощенко

І як ypu думають, це може бути причиною в цьому випадку: я створив свій ключ SHA1 для консолі Google на одному ноутбуці, а потім створив свій дебаг APK в Android Studio на іншому ноутбуці. Це означає, що APK-процес збірки Studio використовує SHA1 з іншого ноутбука. Але наскільки я нестандартний матч Google SHA1 від APK та SHA1, який був зареєстрований ... Або ні?
Олексій Тимощенко

1
Вам слід створити ключ debug.keystore, а потім використовувати його щоразу для підписання apk, незалежно від того, яку систему ви використовуєте. Просто підпишіть.
Майстер

1
@Master: Дякую, чоловіче. Я встановлював apk за допомогою USB. Це було моє питання. Виправлено зараз. Дякую.
Pawan

У мене був такий досить давно. Цього разу я це швидко зрозумів. Це був відсутній хеш SHA1 після переключення моєї машини розробника.
кіберген

17

У мене була та ж проблема, після рішення дослідження було відновлено, що server_client_id містив якесь неправильне значення або ваш google_services.json не включав oauth_client з client_id, який зареєстрований у вашому магазині ключів.

requestIdToken(getString(R.string.server_client_id))

R.string.server_client_idвикористовувати ідентифікатор клієнта OAuth 2.0 для веб-програми . Ідентифікатор клієнта OAuth для Android, який використовується в google_services.json

Зазвичай ми використовуємо 2 сховища ключів, 1 - за допомогою налагоджувального сховища та 1 - за підписаним сховищем ключів для опублікованого. Отже, якщо ми хочемо мати потребу в режимі налагодження та публікації, зареєструйте свій ідентифікатор клієнта OAuth для Android двічі, 1 використовуючи SHA1 із налагоджувального магазину ключів та 1 із підписаного сховища ключів для опублікованого.

невеликий приклад у моєму google_services.json

  "oauth_client": [
    {
      "client_id": "xxx-client-id.com",
      "client_type": 1,
      "android_info": {
        "package_name": "com.app.android",
        "certificate_hash": "xxxhash"
      }
    },
    {
      "client_id": "yyy.client-id.com",
      "client_type": 1,
      "android_info": {
        "package_name": "com.app.android",
        "certificate_hash": "yyyhash"
      }
    }
  ],

Переконайтесь, що назва вашого пакету точно відповідає тому, що знайдено в AndroidManifest.xml! Це доставляло мені багато головних болів.
jameswoo

Якщо ви видалите його після того, як опублікуєте підписаний apk, це призведе до порушення розвитку. Як ви зможете продовжувати розробляти свій додаток?
Кріс Гаррісон,

@ChrisHarrison Так, ти маєш рацію. я оновлюю відповідь.
RaditzLawliet

15

Я отримував ту саму проблему, тому що я створив ідентифікатор клієнта типу додатка Android

Натомість я видалив його та створив ідентифікатор клієнта веб-програми типу і позбувся цієї проблеми.


1
Працював у моїй справі.
Roon13

Чи могли б ви з точністю знати, на якому екрані ви знаходите цей погляд?
Dany Pop

Не знаю, чому це працює при виборі Android, але це зробило і для мене. @DanyPoplawec це знаходиться в консолі розробника, API Manager для даного проекту, ви натискаєте облікові дані в меню ліворуч, а потім натисніть кнопку Створити облікові дані та виберіть ідентифікатор клієнта OAuth, і ви побачите цю сторінку.
mkimmet

8

Просто з’ясуйте, як це вирішити ... Я отримав цю помилку під час спроби запустити налагоджувальну версію мого додатка ... Щоб виправити це, додайте облікові дані для своєї програми налагодження на консолі розробника, а також на сервісах Google .json.

це мені це виправило!


Не могли б ви надати детальну інформацію про те, як ви це зробили? Це може бути і моєю проблемою.
JDenais

1
@JDenais, перейдіть до консолі розробників Google> Api Manager> Повноваження, створіть Auth 2.0 Android Credential із сертифікатом підпису, який ви використовуєте для створення налагоджувальної версії (можливо, debug.keystore на вашому комп’ютері), і назвою пакета degub вашого додатка .. після цього додайте цей ідентифікатор клієнта до google-services.json, приблизно так: "oauth_client": [{":" XXXX "," client_type ": 1," android_info ": {" ім'я_пакета ":" com .fleeber ", certificate_hash": "РРРРРРРР}}}, {" client_id ":" XXX ", тип_кліента": 1, "android_info": {"ім'я_пакета": "com.fleeber.debug", "certificate_hash": "РРРРР "}}]
Рамон Каналес,

Раніше я мав працюючий додаток із входом у Google, але другий, який я створив, був налаштований неправильно через те, що я входив в Google із двома обліковими записами одночасно. Мені довелося повністю вийти і знову пройти майстер, додати відбиток мого сертифіката налагодження, і JSON потім сформував би правильно.
Брон Девіс,

Ого, ви буквально щойно допомогли мені після більш ніж 5 годин нескінченного пошуку в Інтернеті. Дуже дякую!
О'Каміє,

8

У мене була та ж проблема, і я вирішив її за допомогою такого рішення:

  1. Створіть файл конфігурації (google-services.json), як описано тут, і розмістіть у своєму каталозі проекту / app
  2. (Як згадано в інших відповідях) Використання ідентифікатора клієнта веб-програми для requestIdToken методу.
  3. [Моя головна проблема] Підпишіть свою програму, якщо ви працюєте в режимі налагодження, як показано нижче:
 signingConfigs {
    release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
    }
 }

 buildTypes {
     release {
         ...
     }
     debug {
         ...
         signingConfig signingConfigs.release
     }
 }

4

Тепер я зрозумів.

Отже, спочатку ви повинні слідувати верхнім відповідям, кажучи:

  1. створити ідентифікатор клієнта OAuth для веб-додатків в Google Developers Console і використовувати його в requestIdToken() (позбутися коду стану 12501)
  2. якщо ви створили ідентифікатор клієнта Android OAuth для вашого виробничого хеш-ключа, створіть новий ідентифікатор клієнта Android OAuth для вашого хеш-ключа налагодження та інтегруйте його у свій google-services.json. (позбутися коду стану 12500)

Більше не діє І ось настає остання Частина: 3. Ви не можете зателефонувати requestIdToken()і requestEmail()відразу. Принаймні в моєму випадку я позбувся Result: Status{statusCode=INTERNAL_ERROR, resolution=null}видаленням requestEmail().

Тож удачі ...


2
Річ у вашій частині 3, безумовно, неправильна. requestIdToken()і requestEmail()можна використовувати одразу. Я успішно використовую його у своєму додатку.
kirtan403

Тоді між нашими проектами має бути ще одна різниця. Тому що в моєму проекті це працює саме так, як описано.
кіберген

Я згоден, я використовую обидва requestIdToken()і requestEmail()відразу. З цим немає проблем.
Чад Бінгем

Можливо, це була проблема з однією бібліотечною версією. Це пішло.
кіберген

3

У моєму випадку мені також довелося перевірити, що налагоджувальний SHA-1 був доданий як дійсний OAuth-клієнт Android.


2
12501завжди є помилкою конфігурації. Разом із випадком, про який ви згадали тут, неприпустимий ідентифікатор клієнта сервера або невідповідність імені пакета також спричинить це.
Сем Стерн,

3

Використовуйте веб-програму як server_client_id, а не програму Android


2

У мене була та ж проблема, і я помітив, що код 12501 було повернуто, коли мій server_client_idмістив якесь неправильне значення.

Оскільки детального повідомлення немає, а документація цього коду помилки досить бідна, я не знаю, чи є у вашої проблеми така ж причина, як у мене.


Моя програма базується на коді Android з цього прикладу (клас IdTokenActivity). Щоб це працювало, мені також потрібно було інтегрувати вхід з Google у свій додаток:

  • згенерований файл конфігурації json із увімкненим входом у систему Google
  • додав плагін Google і залежність до мого файлу gradle
  • створив ідентифікатор клієнта OAuth для цього додатка і зберег у своєму проекті як server_client_id

2
Я не думаю, що servier_id неправильний. Я пробував різні.
Джамал

2

Ваш apk знаходиться в режимі налагодження? Я думаю, що це працює лише з підписаним apk.


2
  1. Дотримуйтесь неоднозначного документа Google.
  2. Помістіть google-services.json до каталогу вашого проекту
  3. Встановіть свій gradle як https://stackoverflow.com/a/35216421/5886475

  4. Встановіть server_client_id у string.xml. Це ідентифікатор вашого веб-клієнта, а не клієнт Android


Так , цей 4. допоміг мені, плюс
додав

2

У мене була проблема в тому, що SHA-1, який я створив, як і з неправильним псевдонімом. Псевдонім ПОВИНЕН бути androiddebugkey . Отже, я помістив ідентифікатор OAuth для Android у свій файл google-service.json . Я встановив ідентифікатор веб-клієнта в requestIdToken () . І в моєму конкретному випадку я створив SHA-1 з псевдонімом androiddebugkey .

google-services.json :

"oauth_client": [
    {
      "client_id": "ANDROID OAUTH ID-.....apps.googleusercontent.com",
      "client_type": 1,
      "android_info": {
        "package_name": "br.com.packagename",
        "certificate_hash": "SHA-1 HASH"
      }
    },{
      "client_id": "WEB CLIEND ID......apps.googleusercontent.com",
      "client_type": 3
    }
 ]

Підписання частини:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken("WEB CLIEND ID......apps.googleusercontent.com")
                .requestEmail() 
                .build(); 

спасибі людино. Я загубився, поки не зрозумів, що повинен використовувати androiddebugkey, а не власний ключ налагодження
itzhar

2

Замість R.string.server_client_id, просто використовуйтеR.string.default_web_client_id .

Коли ви копіюєте файл google-services.json у додаток, він автоматично створює це значення рядка. Вам не потрібно копіювати ключ із google-services.json у string.xml Це спрацювало для мене.


2

Я вирішив цю проблему, натиснувши підтримку Firebase в Android Studio, яка може не стосуватися користувачів, які не належать до Firebase.

  1. Зайдіть в меню Інструменти-> Firebase
  2. Клацніть Підключити програму до Firebase, вона з’явиться як Підключено зеленим кольором, коли підключення буде успішним
  3. Натисніть кнопку Додати автентифікацію Firebase до кнопки програми, вона також стане зеленою.

ПРИМІТКА: Маючи величезний список відповідей у ​​цьому, безумовно, підтверджують одне. Google повинен оновити та зберігати документацію бездоганно.


1

Якщо жоден із наведених вище варіантів не працює, перевірте, чи не вказаний вами applicationId у app build.gradle таким самим, як і назва пакета.


1

Очевидно, спочатку перевірте, чи правильно випустив ключ sha1 чи ні. Але якщо це все ще не працює, і ви використовуєте служби Google Play 8.4.0 (тобто компілюєте 'com.google.android.gms: play-services: 8.4.0'), проблему можна вирішити, змінивши об'єкт GoogleSignInOption. Замість:

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
                    .build();

Ви повинні використовувати:

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

Це вирішує помилку повернення statusCode = INTERNAL_ERROR АБО statusCode = Помилка 12501 АБО statusCode = Помилка 12500. Тоді цей об'єкт gso можна використовувати для створення GoogleApiClient, як показано нижче:

 mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this, this)
                .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
               // .addApi(Plus.API, null)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
               // .addScope(Plus.SCOPE_PLUS_LOGIN)
                .build(); 

1

Не знаю чому, але SHA1 в android studio змінюється автоматично, і тому я отримую цю помилку. Щоб вирішити це, я оновив SHA1 моїх налаштувань проекту Firebase новим SHA1 моєї андроїд-студії, і він знову почав працювати.


1
Я використовую Firebase, настільки оновлений SHA1 там, але хтось використовує консоль Google, тоді його потрібно оновити відповідно.
Рахул Сононе,

Я змінив робочі ноутбуки і не міг зрозуміти, чому вхід із Google більше не працює для мене. Тоді я згадав, що мій новий ноутбук повинен мати інший відбиток пальця SHA-1 і що його потрібно додати в консоль розробника Google.
mco

отже, тепер
урегулювання

1

У моєму випадку мої облікові дані Client ID for Androidна консолі API Google містили лише SHA-1 для мого підписаного APK-файлу . Android Studio використовував сховище налагоджувальних ключів за замовчуванням для підписання моїх налагоджувальних збірок, і в цьому випадку налагоджувальне сховище SHA-1 не відповідало клієнту Android SHA-1 в Інтернеті. Моє рішення полягало в тому, щоб просто підписати налагоджувальні збірки за допомогою звільнення сховища ключів.

В Android Studio Build/Edit Build Types...виберіть тип збірки налагодження та переконайтеся, що для Signing Config встановлено ваш сертифікат випуску.

Підписання Config встановлено для випуску


Щиро дякую вам за цю мить. \\\, (-.-) >>> ///(-.-)
Метью Вебер

Слід зазначити, що я насправді отримував інший код помилки. Я отримував 10 DEVELOPER_ERROR, але в цьому була проблема.
Метью Вебер

1

Якщо ви використовуєте налагоджувальний ключ для створення проекту, вам потрібно додати відбиток пальця SHA-1 debug.keystore на консолі Firebase .

  1. На консолі Firebase відкрийте свій проект
  2. Перейдіть до Параметри. Вкладка Загальні
  3. В кінці цієї сторінки є поле для додавання відбитка пальця SHA-1
  4. Вставте SHA-1 у поле консолі.

Щоб отримати SHA-1 debug.keystore:

Mac / Linux:

keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

Windows:

 keytool -exportcert -list -v -alias androiddebugkey -keystore %USERPROFILE%\.android\debug.keystore

https://developers.google.com/android/guides/client-auth

Це все !


1

У мене була та ж проблема та помилка 12501, і жоден із перерахованих вище не працював у мене.

Моя проблема полягала в тому, що я використовую веб-API API за промовчанням, який генерується для мене. після створення мого власного веб-API помилка зникла і працювала нормально!

це робочі кроки:

  1. спочатку я створив ключ налагодження SHA1 і додав до консолі Firebase . створення SHA1 звідси .
  2. створювати як Web API і андроїд OAuth 2.0 ідентифікатор клієнта з тут
  3. отримати google-service.jsonз Firebase консолі і помістити в папку програми.
  4. помістіть цей код для GoogleSignnOption

подобається це:

gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken
                ("put the web app client Id that get from the link in developer console ")
                .requestEmail().build();

порада 1: Я дізнався, що вам слід створити і клієнтський ідентифікатор андроїда, і веб-програму для роботи.

Рада 2: якщо ви з Ірану , як і я , ви можете отримати користувача від Google , але ви не можете , AuthWithGoogleі результат failв auth.signInWithCredential(credential)і ви повинні були використовувати деякі проксі для повернення вірно.

це робоче повне джерело FireBaseAuthDemo у github:

введіть тут опис зображення

сподіваюся, допомога повна


Чи використовували ви ті самі перенаправлення Uri, що й ті, що були налаштовані у веб-програмі, створеній автоматично? Я теж відчуваю цю проблему, і це зводить мене з розуму!
Джон Мак

яким має бути значення "client_type" у клієнті auth? Ви оголосили "client_type": 1, а також "client_type": 3. Що це означає?
rajat44,

@JohnMc Я помістив сюди весь тестовий додаток github.com/mahdit83/FireBaseAuthDemo
Махді

@ rajat44 Цей файл автоматично генерується з консолі Google і насправді не знаю, як Google обробляє цей файл. але це спосіб, яким ви можете змусити це працювати.
Махді

0

У мене також була ця проблема, дотримуючись інструкцій Google щодо автоматичного підписання вашої програми . Якщо ви використовуєте цей метод для підпису своїх програм, вам потрібно буде включити згенерований відбиток пальця у сховище ключів до своїх облікових даних API.

У браузері проекту клацніть правою кнопкою миші на своєму додатку та виберіть Відкрити налаштування модуля.

Знімок екрана налаштувань відкритого модуля |  додаток |  підписання |  конфігурація

Мені було менш заплутаним розміщення .jksфайлу в /appкаталозі мого проекту . У будь-якому випадку запустіть цей рядок на ньому.

keytool -list -v -keystore /home/user/keystores/android.jks

Вам буде запропоновано ввести пароль. Не впевнений, це Key PasswordчиStore Password тому, що мої однакові. : |

Консоль виплюне купу відбитків пальців сертифіката. Візьміть SHA1 і вставте його в свої облікові дані API на консолі розробника Google API . Вам потрібно буде ввести його для клієнта Android, OAuth 2.0 client IDsхоча ви насправді не використовуєте цей client_id у своєму додатку. Якщо ви використовуєте інші API для android, помістіть той самий SHA1 у відповідні облікові дані ключа API keysтакож.


0

Ось новий. Я намагався протягом 6 годин увійти в емулятор з ідентифікатором свого корпоративного домену Google Apps, але безуспішно, отримавши 12501 помилку. Напевно, я спробував свій особистий ідентифікатор Gmail, і це спрацювало. Так само, якби я спробував на своєму телефоні з моїм корпоративним ідентифікатором. Виявляється, емулятор не мав належних налаштувань керування мобільними пристроями, щоб дозволити моєму корпоративному ідентифікатору ввійти в систему.

Отже, якщо я хочу протестувати на емуляторі з цим корпоративним ідентифікатором, я повинен встановити Google Play Store, а потім програмне забезпечення MDM та налаштувати його.


0

Зі свого дивного досвіду з цією помилкою, я можу сказати, що вам також потрібно спробувати перезавантажити телефон, щоб позбутися цієї помилки :) Я був впроваджений Google Sign In за допомогою облікових записів G Suite, які мають політику пристрою, призначену через адміністратора Google . Тож при першому вході потрібно було встановити програму Device Policy. Після того, як всі пізніші кроки були завершені, це просто викидало помилку 12501. У той же час той самий додаток працював чудово на інших телефонах. Тож допомогло лише перезавантаження. Але допомогло


0

Хоча в цьому питанні існує вже багато прихильних відповідей, я намагався зрозуміти логіку. Отже, я придумую свої дослідження.

Щоб отримати SHA-1, запустіть це в терміналі:

keytool -exportcert -keystore path-to-debug-or-production-keystore -list -v

Про OAuth 2.0 client IDs

  • OAuth для Інтернету (у додатку це використовується як server_client_id)
  • OAuth для android (Це потрібно створити, використовуючи правильну назву пакета та відбиток пальця сертифіката підпису SHA-1 ).

Якщо ви використовуєте різне сховище ключів для налагодження та випуску, вам потрібно створити окреме, OAuth 2.0 client IDsвикористовуючи відповідне ім'я пакета & SHA-1 .

Ви можете створювати або редагувати OAuth 2.0 client IDsтут https://console.developers.google.com/apis/credentials?project=

  1. Перехід до вашого додатка.
  2. Якщо у вас вже є OAuth для Android, клацніть на його назві та перевірте назву пакета та SHA-1 .

Ми можемо використовувати одне і те ж сховище ключів як для налагодження, так і для випуску, зберігаючи деталі сховища ключів у глобальному (локальному, а не всередині проекту) gradle.propertiesта отримуючи його, build.gradleяк показано нижче.

def key_alias = ""
def key_password = ""
def store_file = ""
def store_password = ""

try {
    key_alias = YOUR_KEY_ALIAS
    key_password = YOUR_KEY_PASSWORD
    store_file = YOUR_KEYSTORE_PATH
    store_password = YOUR_KEYSTORE_PASSWORD
} catch (Exception exception) {
    throw new IllegalStateException('Failed to find key store details. Social Login is disabled');
}

android {
    signingConfigs {
        config {
            keyAlias key_alias
            keyPassword key_password
            storeFile file(store_file)
            storePassword store_password
        }
    }

    buildTypes {
        debug {
            signingConfig signingConfigs.config
            // ...
        }
        release {
            signingConfig signingConfigs.config
            // ...
        }
    }
}

Ви можете використовувати фрагмент нижче

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == REQUEST_CODE_GOOGLE_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // ...
        } else if (result.getStatus().getStatusCode() == CommonStatusCodes.NETWORK_ERROR) {
            // No internet connection
        } else if (result.getStatus().getStatusCode() == CommonStatusCodes.DEVELOPER_ERROR) {
            // Wrong server OAuth key(server_client_id)
        } else if (result.getStatus().getStatusCode() == 12501) {
            // Wrong app signing-certificate fingerprint SHA1
        } else {
            Log.e("Google sign in error", result.getStatus().toString());
        }
    }
}

Примітка. Якщо під час створення файлу конфігурації ви ввімкнули лише вхід в Google, вам не потрібно додавати google-servies.jsonфайл у свій проект. (Генерація файлу виконує необхідні кроки налаштування).


0

Спробуйте виконати такі дії:

  1. Клонуйте наступний проект https://github.com/googlesamples/google-services

  2. Дотримуйтесь керівництва на https://developers.google.com/identity/sign-in/android/start

  3. Використовуйте веб-клієнт (автоматично створений службою Google) і додайте його в requestIdToken (...)

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
       .requestEmail()  
       .requestIdToken("YOUR_WEB_API_ID.apps.googleusercontent.com")
       .build();
    
  4. Переконайтеся, що ви використовуєте те саме сховище ключів, яке було додано до проекту Google. Наприклад, якщо ви використовували таку команду для генерації ключа SHA-1

    keytool -exportcert -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore    
    
  5. Потім додайте наступний код у файл app / build.gradle всередині android {...} [Вирішено мою проблему]

    signingConfigs
    {
        debug 
        {
            storeFile file("/home/ashwin/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
    
    buildTypes
    {
        release
        {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug
        {
            signingConfig signingConfigs.debug
        }
    }
    

Примітка: Ваші keyPassword і keyAlias ​​повинні бути однаковими, використовуваними під час генерації сертифіката SHA-1.


0

1. Вкажіть signatureConfigs у файлі gradle

signingConfigs {
        config {
            keyAlias 'appalias'
            keyPassword 'hunter123'
            storePassword 'hunter123'
            storeFile file('path/to/keystore.jks')
        }
}

2. Перейдіть до побудови типів у структурі проекту (в Android Studio) і вкажіть signatureConfigs для "config"

Тепер очистіть свій проект і будуйте знову. Це має спрацювати.

Якщо вищезазначене не працює, тоді нижче - ваш останній засіб.
Спробуйте перший крок та побудуйте та перевірте. Якщо це не працює, перейдіть до наступного кроку та спробуйте побудувати ще раз.

  1. Створіть підписаний apk (з перевіреним паролем).
  2. Перед підписанням перевірте ім'я файлу магазину ключів та те, що ви даєте під час підписання apk (в android studio).
  3. Встановіть підписаний apk у свій пристрій.
  4. Зачекайте п’ять хвилин.
  5. Спробуйте заспівати в Google. Якщо все-таки прийде 12501, почекайте ще п’ять хвилин. Виконуючи синхронізацію хітів gradle.
  6. Спробуйте ще раз. Це має спрацювати.

0

Оскільки програма вимагає входу Google із веб-перегляду, нам потрібно створити ідентифікатор клієнта автентифікації веб-програми v2.0

  1. Перейдіть до облікових даних Google API

    Виберіть свій проект Android у верхньому лівому куті

    2

  2. Клацніть на Створити облікові дані -> Ідентифікатор клієнта OAuth -> Виберіть веб-програму

  3. Клацніть Ok

  4. Тепер, якщо ви синхронізували Android Studio з Firebase (увійшли в систему), просто відновіть проект, інакше завантажте оновлений файл google-services.json і замініть існуючий.

    Це повинно працювати нормально.


0

У мене така ж проблема була вирішена наступним чином:

  1. Мене змусили видалити SHA1, про який раніше думали, а також створити та встановити новий SHA1.

  2. згенерувати нове google-services.jsonта встановити у моєму каталозі додатків

  3. Я використовував саме коди розробників Google

  4. моя result.isSucces()повернулася істина після запуску проекту

як підсумок, видаліть старий sha1 і створіть новий sha1 та завантажте новий google-services.json


0

Я стикався з тією ж 12501 statusпомилкою. Це пов’язано з невідповідністю файлу .apk випуску та налагодження APK SHA-1.

  1. Створіть підписаний файл .apk. Щоб підписати файл .apk, виберіть існуючий шлях до магазину ключів, який ви використовували для створення SHA-1. напр/.android/debug.keystore
  2. Дайте псевдонім: androiddebugkey
  3. storepass і keypass: android.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.