️ Начиная с версии плагина 6.0.0, минимальная необходимая версия cordova-ios — 4.5.0. Хотите использовать более низкую версию Cordova-ios? Используйте плагин версии 5.3.2 или ниже.
idToken
serverAuthCode
Этот плагин позволяет аутентифицировать и идентифицировать пользователей с помощью входа в Google на iOS и Android. Сразу после установки вы получите адрес электронной почты, отображаемое имя, имя, фамилию, URL-адрес изображения профиля и идентификатор пользователя. Вы также можете настроить его для получения idToken и serverAuthCode.
Этот плагин обеспечивает только доступ к API входа в Google. Дальнейший доступ к API должен быть реализован для каждого варианта использования и для каждого разработчика.
Андроид
iOS
Чтобы связаться с Google, вам придется выполнить некоторые утомительные настройки, извините.
(Настоятельно) рекомендуется использовать один и тот же проект как для iOS, так и для Android.
Зайдите в свой config.xml
и убедитесь, что имя вашего пакета (т. е. идентификатор приложения) соответствует вашему желанию. Используйте это имя пакета при настройке iOS и Android в следующих шагах! Если вы этого не сделаете, вы, скорее всего, получите ошибку 12501, «пользователь отменен», несмотря на то, что процесс входа в систему не был отменен.
Этот шаг особенно важен, если вы используете такую структуру, как Ionic, для создания своего проекта. Когда вы создаете проект, config.xml
есть имя пакета-заполнителя, например com.ionic.*, поэтому вы можете сразу приступить к разработке.
xml version = ' 1.0 ' encoding = ' utf-8 ' ?>
< widget id = " ** REPLACE THIS VALUE ** " ...>
...
widget >
Платформе браузера требуется действительный WEB_APPLICATION_CLIENT_ID
, созданный в консоли разработчика Google. Убедитесь, что вы добавили свой URL-адрес (пример: http://localhost:3000
) в раздел «Авторизованные источники JavaScript» . Посмотрите этот скриншот, например
Чтобы получить REVERSED_CLIENT_ID
для iOS, создайте файл конфигурации здесь. Этот файл GoogleService-Info.plist
содержит REVERSED_CLIENT_ID
который вам понадобится во время установки. Это значение необходимо только для iOS.
REVERSED_CLIENT_ID
также известен как «Схема URL-адресов iOS» в консоли разработчика.
При входе в iOS пользователь переходит к SafariViewController через Google SDK вместо отдельного браузера Safari.
Чтобы настроить Android, создайте файл конфигурации здесь. Включите вход в Google и добавьте приложение Android для добавления отпечатка пальца SHA1. Как только вход в Google будет включен, Google автоматически создаст необходимые учетные данные в консоли разработчика для Интернета и Android. Нет необходимости добавлять сгенерированный файл google-services.json в проект Cordova. Возможно, вам потребуется настроить экран согласия.
Обязательно выполните шаги keytool
, как описано здесь, иначе аутентификация завершится неудачно (сделайте это как для хранилища ключей выпуска, так и для отладки).
ВАЖНЫЙ:
keytool
, показаны 2 типа отпечатков сертификатов: выпуск и отладка . При создании файла конфигурации лучше использовать отпечаток сертификата отладки , после этого вам нужно зайти в Google Credentials Manager и вручную создать учетные данные для клиента OAuth2 с отпечатком вашего сертификата выпуска . Это необходимо для работы вашего приложения как в версии для разработки, так и в версии для производства. $ keytool -exportcert -keystore -list -v -alias
Для входа на Android будут использоваться учетные записи, в которые выполнен вход на устройстве пользователя.
Чтобы настроить версию Сервисов Google Play, вы можете использовать параметр PLAY_SERVICES_VERSION (со значением 11.8.0 по умолчанию). Это полезно во избежание конфликтов с другими плагинами, которые используют любую другую версию Сервиса Google Play, поскольку они ДОЛЖНЫ быть одной и той же версии.
Google повторно подписывает ваше приложение другим сертификатом, когда вы публикуете его в Play Store. После публикации приложения скопируйте отпечаток SHA-1 «сертификата подписи приложения», который находится в разделе «Подписание приложения» раздела «Управление выпуском» в консоли Google Play. Вставьте этот отпечаток пальца в идентификатор клиента Release OAuth в Google Credentials Manager.
Если вы хотите получить idToken
или serverAuthCode
обратно в процессе входа в систему, вам нужно будет передать идентификатор клиента для веб-приложения вашего проекта. Его можно найти на странице учетных данных API вашего проекта в консоли разработчика Google.
Этот плагин совместим с:
Вот как это работает (сначала сделайте резервную копию проекта!):
Использование CLI Cordova и npm:
$ cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
Использование CLI Cordova для получения последней версии с GitHub:
$ cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
ВАЖНЫЙ:
Обратите внимание, что myreversedclientid
— это заполнитель для обратного clientId, который вы найдете в файле конфигурации iOS. Не заключайте это значение в кавычки. (приложения только для iOS)
Если вы создаете гибридное приложение (iOS и Android) или приложение для Android, вам необходимо заменить myreversedclientid
на обратное значение Client ID в ваших учетных данных выпуска , созданных на шаге 3, в консоли разработчика Google, это будет: "com .googleusercontent.apps. uniqueId
" , без кавычек. Пример: «123-abc123.apps.googleusercontent.com» становится «com.googleusercontent.apps.123-abc123».
myreversedclientid
— это заполнитель для идентификатора клиента Oauth, специально созданного для веб-приложения в консоли разработчика Google.
GooglePlus.js добавляется автоматически. Нет необходимости что-либо менять или добавлять в ваш HTML.
Добавьте это в свой config.xml:
Для (стабильной) версии NPM:
< plugin name = " cordova-plugin-googleplus " source = " npm " >
< variable name = " REVERSED_CLIENT_ID " value = " myreversedclientid " />
< variable name = " WEB_APPLICATION_CLIENT_ID " value = " mywebapplicationclientid " />
plugin >
Для последней версии из Git (не рекомендуется):
< plugin spec = " https://github.com/EddyVerbruggen/cordova-plugin-googleplus.git " source = " git " >
< variable name = " REVERSED_CLIENT_ID " value = " myreversedclientid " />
< variable name = " WEB_APPLICATION_CLIENT_ID " value = " mywebapplicationclientid " />
< plugin >
Этот плагин использует диспетчер зависимостей CocoaPods для удовлетворения зависимостей библиотеки iOS Google SignIn SDK.
Поэтому убедитесь, что в вашей среде сборки iOS установлены Cocoapods — инструкции по настройке можно найти здесь. Также убедитесь, что ваш локальный репозиторий Cocoapods обновлен, запустив pod repo update
.
При создании проекта в Xcode вам необходимо открыть YourProject.xcworkspace
(а не YourProject.xcodeproj
), чтобы и ваш проект приложения Cordova, и проект Pods были загружены в Xcode.
Вы можете перечислить зависимости модуля в своем проекте Cordova iOS, установив Cocoapods-зависимости:
sudo gem install cocoapods-dependencies
cd platforms/ios/
pod dependencies
Проверьте демо-приложение, чтобы быстро начать работу, иначе навредите себе и выполните следующие действия.
Обратите внимание, что ни один из этих методов не должен вызываться до срабатывания deviceready
.
Пример:
document . addEventListener ( 'deviceready' , deviceReady , false ) ;
function deviceReady ( ) {
//I get called when everything's ready for the plugin to be called!
console . log ( 'Device is ready!' ) ;
window . plugins . googleplus . trySilentLogin ( ... ) ;
}
31.03.16: Этот метод больше не требуется предварительно проверять. Он сохраняется для ортоганальности кода.
Функция входа проводит пользователя через процесс Google Auth. Все параметры являются необязательными, однако есть несколько предостережений.
Чтобы получить idToken
на Android, вы должны передать свой webClientId
(частой ошибкой является предоставление идентификатора клиента Android). В iOS idToken
включается в результат входа по умолчанию.
Чтобы получить serverAuthCode
, вы должны передать свой webClientId
и установить offline
значение true. Если offline имеет значение true, но webClientId не указан, serverAuthCode
НЕ будет запрошен.
Запрошенные области по умолчанию — profile
и email
(всегда запрашивается). Чтобы запросить другие области, добавьте их в виде списка, разделенного пробелами, в параметр scopes
. Они будут запрошены в том же виде, в каком они были переданы. Обратитесь к документации по областям действия Google для получения информации о допустимых областях, которые можно запросить. Например, 'scope': 'https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/tasks'
.
Естественно, чтобы использовать любые дополнительные области действия или API, их необходимо активировать в консоли разработчика вашего проекта.
window . plugins . googleplus . login (
{
'scopes' : '... ' , // optional, space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId' : 'client id of the web app/server side' , // optional clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline' : true // optional, but requires the webClientId - if set to true the plugin will also return a serverAuthCode, which can be used to grant offline access to a non-Google server
} ,
function ( obj ) {
alert ( JSON . stringify ( obj ) ) ; // do something useful instead of alerting
} ,
function ( msg ) {
alert ( 'error: ' + msg ) ;
}
) ;
Обратный вызов успеха (второй аргумент) получает объект JSON со следующим содержимым, включая пример данных моей учетной записи Google:
obj . email // '[email protected]'
obj . userId // user id
obj . displayName // 'Eddy Verbruggen'
obj . familyName // 'Verbruggen'
obj . givenName // 'Eddy'
obj . imageUrl // 'http://link-to-my-profilepic.google.com'
obj . idToken // idToken that can be exchanged to verify user identity.
obj . serverAuthCode // Auth code that can be exchanged for an access token and refresh token for offline access
obj . accessToken // OAuth2 access token
Дополнительная информация о пользователе доступна в зависимости от варианта использования. Добавьте необходимые области в параметр областей, а затем верните информацию в объект результата, создаваемый в функциях handleSignInResult
и didSignInForUser
на Android и iOS соответственно.
В Android обратный вызов ошибки (третий аргумент) получает код состояния ошибки, если аутентификация не прошла успешно. Описание этих кодов состояния можно найти на веб-сайте Google для разработчиков Android по адресу GoogleSignInStatusCodes.
В iOS обратный вызов ошибки будет включать локализованное описание NSError.
Вы можете вызвать trySilentLogin
, чтобы проверить, вошли ли они уже в приложение, и выполнить вход в автоматическом режиме, если да.
Если это удастся, вы получите тот же объект, что и функция login
, но в случае неудачи она не покажет пользователю диалоговое окно аутентификации.
Вызов trySilentLogin
выполняется так же, как и login
, за исключением имени функции.
window . plugins . googleplus . trySilentLogin (
{
'scopes' : '... ' , // optional - space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId' : 'client id of the web app/server side' , // optional - clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline' : true , // Optional, but requires the webClientId - if set to true the plugin will also return a serverAuthCode, which can be used to grant offline access to a non-Google server
} ,
function ( obj ) {
alert ( JSON . stringify ( obj ) ) ; // do something useful instead of alerting
} ,
function ( msg ) {
alert ( 'error: ' + msg ) ;
}
) ;
Настоятельно рекомендуется реализовать trySilentLogin с теми же параметрами, что и вход в систему, чтобы избежать возможных осложнений.
Это очистит токен OAuth2.
window . plugins . googleplus . logout (
function ( msg ) {
alert ( msg ) ; // do something useful instead of alerting
}
) ;
Это очистит токен OAuth2, забудет, какая учетная запись использовалась для входа в систему, и отключит эту учетную запись от приложения. Это потребует от пользователя повторного разрешения доступа к приложению при следующем входе в систему. Имейте в виду, что этот эффект не всегда происходит мгновенно. Для полного отключения может потребоваться время.
window . plugins . googleplus . disconnect (
function ( msg ) {
alert ( msg ) ; // do something useful instead of alerting
}
) ;
idToken
Документация Google по аутентификации на внутреннем сервере
Как упоминается в приведенных выше статьях, idToken
можно обменять на информацию пользователя для подтверждения личности пользователя.
Примечание. Google не хочет, чтобы идентификационные данные пользователя отправлялись непосредственно на сервер. idToken является их предпочтительным методом безопасной и безопасной отправки этих данных, поскольку для распаковки они должны быть проверены через их серверы.
Это имеет несколько применений. На стороне клиента это может быть способ двойного подтверждения личности пользователя или его можно использовать для получения таких подробностей, как домен хоста электронной почты. Серверная часть — это то место, где idToken
действительно достигает своего успеха. Это простой способ подтвердить личность пользователя, прежде чем разрешить ему доступ к ресурсам этого сервера или перед заменой serverAuthCode
на токен доступа и обновления (см. следующий раздел).
Если вашей серверной стороне требуется только удостоверение личности, а не дополнительный доступ к учетной записи, это безопасный и простой способ предоставить эту информацию.
serverAuthCode
Документация Google по включению доступа на стороне сервера
Как упоминается в приведенных выше статьях, serverAuthCode
— это элемент, который можно обменять на токен доступа и обновления. В отличие от idToken
, это позволяет серверной стороне иметь прямой доступ к учетной записи Google пользователя.
Только в первоначальном запросе на вход в систему будет возвращен serverAuthCode
. Если вы хотите получить токен во второй раз, вы можете сначала выйти из системы.
Когда дело доходит до этого обмена, у вас есть несколько вариантов: вы можете использовать Google REST Apis, чтобы получить их в самом гибридном приложении, или вы можете отправить код на свой внутренний сервер для обмена там, используя любой необходимый метод (Google предоставляет примеры для Java, Python и JS/HTTP).
Как говорилось ранее, этот плагин предназначен для аутентификации и идентификации пользователя, поэтому любое использование учетной записи пользователя, выходящее за рамки этого, должно быть реализовано для каждого варианта использования и для каждого приложения.
Вопрос: Я не могу заставить работать аутентификацию на Android. И почему нет ANDROID API KEY?
О: На Android вам необходимо выполнить действия keytool
, подробности см. в инструкции по установке.
Вопрос: После выполнения действий keytool
я все еще не могу заставить аутентификацию работать на Android. У меня ошибка 10!!!
О: Вам необходимо получить сертификат SHA 1 из вашего apk-файла. Запустите: keytool -list -printcert -jarfile
и скопируйте SHA 1 в свой идентификатор клиента Android в консоли Google.
Вопрос: Боже мой, $@#*! сборка Android не работает
О: Вам необходимо установить репозиторий поддержки Android и библиотеку поддержки Android в менеджере Android SDK. Убедитесь, что вы используете достаточно актуальную версию.
Вопрос: Почему это не работает на моем эмуляторе Android???
О: Убедитесь, что вы используете виртуальное устройство, работающее с целью API Google и/или процессором API Google !
Вопрос: Я получаю ошибку 10 , что мне делать?
О: Вероятно, это вызвано тем, что Cordova не использует хранилище ключей, которое вы хотите использовать (например, потому что вы создали свое собственное). Пожалуйста, проверьте https://cordova.apache.org/docs/en/latest/guide/platforms/android/#signing-an-app, чтобы узнать, как это сделать. Некоторые сообщают, что вам необходимо запустить cordova clean
перед запуском сборки, чтобы устранить ошибку 10.
Вопрос: Я получаю сообщение об ошибке 16 , что мне делать?
О: Это всегда проблема, поскольку подпись (или отпечаток пальца) вашего приложения для Android после подписания не добавляется в белый список OAuth консоли Google (или Firebase). Пожалуйста, проверьте еще раз, сделали ли вы все необходимое для этого. См. мини-руководство ниже.
Во-первых, убедитесь, что вы полностью прочитали и поняли руководство по подписанию приложений из документации Android!
После/во время чтения еще раз проверьте, правильно ли вы выполнили все шаги 1–4 ниже:
Чтобы подписать свое приложение (при разработке или публикации), вам необходимо создать локальное хранилище ключей и ключ с помощью Android Studio или через терминал. У Google есть функция под названием «Подписание приложений Google Play», где они сохранят ключ на своем сервере и подпишут ваше приложение за вас, но независимо от того, используете вы эту функцию или нет, вам в любом случае понадобится локальное хранилище ключей и ключ.
Ваше локальное хранилище ключей и ключ будут вашим официальным ключом для подписи приложения.
Вам нужно будет внести в белый список следующие отпечатки ключей (в формате SHA1) в настройках Google OAuth:
debug.keystore
для Android по умолчаниюВаше локальное хранилище ключей и ключ будут вашим «ключом загрузки», а другой ключ для официального «ключа подписи приложения» создается и управляется Google.
Вам необходимо внести в белый список следующие отпечатки ключей (в формате SHA1) в настройках Google Oauth:
debug.keystore
для Android по умолчаниюПолучите отпечатки указанных выше ключей (в формате SHA1), чтобы иметь возможность внести их в белый список.
Для debug.keystore
по умолчанию для Android выполните:
keytool -exportcert -keystore /Users/myusername/.android/debug.keystore -list -v
Вы увидите отпечаток SHA1 для ключа отладки в терминале. Скопируйте это.
Для собственного созданного хранилища ключей с ключом (для 2A или 2B) выполните:
keytool -exportcert -keystore /path/to/your/key/yourKeystoreFile.keystore -list -v
Вы увидите отпечаток SHA1 для ключа отладки в терминале. Скопируйте это.
Только если включена подпись приложений Google Play (для 2B). Вы можете найти ключ, который Google будет использовать для подписи ваших сборок, в консоли Google Play.
Требование: вам необходимо подготовить основную информацию о своем приложении для Android, а затем загрузить подписанный APK для внутреннего тестирования. После загрузки вы сможете получить доступ к следующему меню:
Перейдите в «Управление релизами» > «Написание приложения». Там ты увидишь
Кнопка «Загрузить» аналогична (и должна быть) клавише B. выше. А «Сертификат подписи приложения» — это ключ, который будет использовать Google. Скопируйте этот.
Опять же, у нас есть два варианта внести их в белый список. Проекты, использующие только Google Cloud Platform , или проекты, использующие Firebase .
(Если вы также используете Firebase, вы можете пропустить этот шаг)