Я пытаюсь интегрировать 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 в объекте обратного вызова?