Ionic 3 Google Войти - PullRequest
       25

Ionic 3 Google Войти

0 голосов
/ 06 ноября 2018

Я пытаюсь интегрировать Ionic Google Plus Native Plugin, чтобы пользователи могли войти в мое приложение со своего телефона с помощью Google Login. Это просто оболочка для этой библиотеки Cordova / PhoneGap .

Я думаю, что я почти на всем пути. У меня есть кнопка на экране входа в систему, и когда я нажимаю ее на своем телефоне Android, я сталкиваюсь с ожидаемым экраном «Выберите учетную запись». Но когда я действительно нажимаю на одну из моих учетных записей и смотрю, что произошло в Chrome Dev Tools (посредством удаленной отладки), я вижу, что возникла ошибка, загадочно обозначенная 12500 с бесполезной трассировкой стека .

Кажется, что горстка звезд должна выровняться, чтобы заставить это работать, и не совсем ясно, как я могу заставить это работать одновременно в режимах разработки и производства. Вот что я проверил:

  • В Google APIs & Services => Панель управления учетными данными
    • У меня есть два идентификатора клиента OAuth 2.0 для Android, один предназначен для разработки, а другой - для производства.
    • Оба они настроены с одним и тем же именем пакета, которое является полным именем в файле манифеста Android, имя которого начинается с «com.blah.blah.blah», который также является идентификатором виджета в файле config.xml.
    • Каждый из них настроен с различным отпечатком подписывающего сертификата, который я установил с помощью keytool.
      • Для производства я сгенерировал отпечаток SHA1 из файла хранилища ключей, который я использую, чтобы подписать приложение для производства.
      • Для разработки я сгенерировал отпечаток SHA1, распаковав отладочный APK-файл, созданный программой ionic cordova run android, и запустив keytool в файле META-INF / CERT.RSA.
  • В файле config.xml проекта Ionic
    • У меня есть раздел, который выглядит так:
<plugin name="cordova-plugin-googleplus" spec="^5.3.2">        
    <variable name="REVERSED_CLIENT_ID" value="com.googleusercontent.apps.ABCDEFG-12345" />
    <variable name="WEB_APPLICATION_CLIENT_ID" value="ABCDEFG-12345.apps.googleusercontent.com" />
    <variable name="PLAY_SERVICES_VERSION" value="11.8.0" />
</plugin>
  • Я заменял ABCDEFG-12345 над частью уникального идентификатора клиента для производства или разработки, и я не вижу четкого способа поддержки обоих сразу, кроме как в качестве пользовательского этапа сборки.

    • В Typescript для страницы с моей кнопкой входа в систему сейчас я просто делаю это:
import { GooglePlus } from '@ionic-native/google-plus
...
constructor(public googlePlus: GooglePlus){}
...
login() {
  this.googlePlus.login({
    webClientId: 'ABCDEFG-12345.apps.googleusercontent.com',
    offline: false
  })
  .then(res => console.log(res))
  .catch(err => console.error(err));
}
  • Опять здесь, заменив ABCDEFG-12345 над частью уникального идентификатора клиента для производства или разработки, я не вижу четкого способа поддержки обоих сразу, кроме как, возможно, в качестве пользовательского этапа сборки.

Когда я нажимаю кнопку, я просто получаю ошибку 12500 в режиме разработки. Я не пробовал в режиме производства. Какого черта я пропускаю и как мне докопаться до сути?

Перекрестная проблема в репозитории github здесь .

ОБНОВЛЕНИЕ: 7 Ноября 2018 Опуская все параметры из вызова this.googlePlus.login (то есть, пропуская пустой объект, {}), я не получаю сообщение об ошибке, но this.googlePlus.login, в ответ я получаю объект пользователя. Однако я не получаю (по крайней мере, на Android) idtoken (который я могу передать своему серверному коду). Итак, мой объект выглядит так:

{
  accessToken: "XXXXXXXXXXX"
  displayName: "XXXXXXXXXXX"
  email: "XXXXXXXXXXX"
  expires: XXXXXXXXXXX
  expires_in: XXXXXXXXXXX
  familyName: "XXXXXXXXXXX"
  givenName: "XXXXXXXXXXX"
  userId: "XXXXXXXXXXXX"
}

Есть идеи, как получить idtoken в объекте обратного вызова?

...