️ 从插件版本 6.0.0 开始,所需的最低 cordova-ios 版本是 4.5.0。需要使用较低的 cordova-ios 版本?使用插件版本 5.3.2 或更低版本。
idToken
serverAuthCode
该插件允许您在 iOS 和 Android 上使用 Google Sign-In 对用户进行身份验证和识别。您将立即获得电子邮件、显示名称、名字、姓氏、个人资料图片网址和用户 ID。您还可以将其配置为获取 idToken 和 serverAuthCode。
该插件仅包含对 Google Sign-In API 的访问。进一步的 API 访问应该根据用例、每个开发人员来实现。
安卓
iOS系统
要与 Google 通信,您需要进行一些繁琐的设置,抱歉。
(强烈)建议您对 iOS 和 Android 使用相同的项目。
进入您的config.xml
并确保您的包名称(即应用程序 ID)是您想要的名称。在以下步骤中设置 iOS 和 Android 时,请使用此包名称!如果不这样做,您可能会收到 12501“用户已取消”错误,尽管从未取消登录过程。
如果您使用 Ionic 等框架来构建项目,则此步骤尤其重要。当您创建项目时, config.xml
有一个占位符包名,例如 com.ionic.*,因此您可以立即开始开发。
xml version = ' 1.0 ' encoding = ' utf-8 ' ?>
< widget id = " ** REPLACE THIS VALUE ** " ...>
...
widget >
浏览器平台需要在 Google 开发者控制台生成的有效WEB_APPLICATION_CLIENT_ID
。确保您已将 URL 地址(例如: http://localhost:3000
)添加到“授权 JavaScript 来源”部分。例如,请参见此屏幕截图
要获取您的 iOS REVERSED_CLIENT_ID
,请在此处生成配置文件。此GoogleService-Info.plist
文件包含您在安装过程中需要的REVERSED_CLIENT_ID
。仅 iOS 需要此值。
REVERSED_CLIENT_ID
在开发人员控制台上也称为“iOS URL 方案”。
iOS 上的登录将用户通过 Google SDK 带到 SafariViewController,而不是单独的 Safari 浏览器。
要配置 Android,请在此处生成配置文件。启用 Google 登录并添加 Android 应用程序以添加 SHA1 指纹。启用 Google 登录后,Google 将自动在开发者控制台中为 Web 和 Android 创建必要的凭据。无需将生成的 google-services.json 文件添加到您的 cordova 项目中。您可能需要配置同意屏幕。
确保按照此处所述执行keytool
步骤,否则身份验证将失败(对发布和调试密钥库都执行此操作)。
重要的:
keytool
,显示了 2 种类型的证书指纹, Release和Debug ,在生成配置文件时,最好使用Debug证书指纹,之后,你必须去 Google Credentials Manager 上,手动创建带有您的发布证书指纹的OAuth2 客户端凭据。这对于您的应用程序在开发和生产版本上的工作都是必需的。 $ keytool -exportcert -keystore -list -v -alias
Android 上的登录将使用在用户设备上登录的帐户。
要设置 Google Play Services 版本,您可以使用 PLAY_SERVICES_VERSION 参数(默认值为 11.8.0)。为了避免与使用任何其他不同版本的 Google Play 服务的其他插件发生冲突,它很有用,因为它们必须是相同的版本。
当您在 Play 商店中发布应用程序时,Google 会使用不同的证书重新签署您的应用程序。发布您的应用后,复制“应用签名证书”的 SHA-1 指纹,该证书位于 Google Play 管理中心“发布管理”下的“应用签名”部分。将此指纹粘贴到 Google Credentials Manager 中的 Release OAuth 客户端 ID 中。
如果您想从登录过程中获取idToken
或serverAuthCode
,则需要传递项目 Web 应用程序的客户端 ID。这可以在 Google 开发者控制台上项目的 API 凭据页面上找到。
该插件兼容:
它的工作原理如下(首先备份您的项目!):
使用 Cordova CLI 和 npm:
$ cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid --variable WEB_APPLICATION_CLIENT_ID=mywebapplicationclientid
$ cordova prepare
使用 Cordova CLI 从 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
是您在 iOS 配置文件中找到的反向 clientId 的占位符。不要用引号将该值引起来。 (仅限 iOS 应用程序)
如果您正在构建混合应用程序(iOS 和 Android)或 Android 应用程序,则必须将myreversedclientid
替换为在 Google 开发者控制台上第 3 步生成的发布凭证中的客户端 ID 的反向值,这将是: “com uniqueId
" ,不带引号。示例:“123-abc123.apps.googleusercontent.com”变为“com.googleusercontent.apps.123-abc123”。
myreversedclientid
是专门为 Google 开发者控制台中的 Web 应用程序生成的 Oauth 客户端 ID 的占位符。
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 - 安装说明可以在此处找到。还要通过运行pod repo update
确保您本地的 Cocoapods 存储库是最新的。
如果在 Xcode 中构建项目,您需要打开YourProject.xcworkspace
(而不是YourProject.xcodeproj
),以便您的 Cordova 应用程序项目和 Pods 项目都将加载到 Xcode 中。
您可以通过安装 cocoapods-dependency 来列出 Cordova iOS 项目中的 pod 依赖项:
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 ( ... ) ;
}
3/31/16:不再需要先检查此方法。保留它是为了代码正交性。
登录功能引导用户完成 Google Auth 流程。所有参数都是可选的,但有一些注意事项。
要在 Android 上获取idToken
,您必须传入webClientId
(一个常见的错误是提供 Android 客户端 ID)。在 iOS 上, idToken
默认包含在登录结果中。
要获取serverAuthCode
,您必须传入webClientId
并将offline
设置为 true。如果离线为 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
其他用户信息可按用例获得。将所需的范围添加到scopes选项,然后将信息返回到分别在Android和iOS上的handleSignInResult
和didSignInForUser
函数中创建的结果对象。
在 Android 上,如果身份验证不成功,错误回调(第三个参数)会收到错误状态代码。这些状态代码的描述可以在 Google 的 Android 开发者网站 GoogleSignInStatusCodes 上找到。
在 iOS 上,错误回调将包含 NSError localizedDescription。
您可以调用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 API 来获取混合应用程序本身中的那些,或者您可以使用任何必要的方法将代码发送到后端服务器以在那里进行交换(Google 提供了示例)适用于 Java、Python 和 JS/HTTP)。
如前所述,该插件完全与用户身份验证和身份有关,因此除此之外对用户帐户的任何使用都需要根据每个用例、每个应用程序来实现。
问:我无法在 Android 上进行身份验证。为什么没有 ANDROID API KEY?
A:在Android上您需要执行keytool
步骤,详细信息请参阅安装说明。
问:按照keytool
步骤操作后,我仍然无法在 Android 上进行身份验证。我遇到了“10 错误”!!!
答:您需要从 apk 文件中获取 SHA 1 证书。运行: keytool -list -printcert -jarfile
并将 SHA 1 复制到 Google Console 上的 Android 客户端 ID。
问:天啊$@#*! Android 构建失败
答:您需要在 Android SDK 管理器中安装Android 支持存储库和Android 支持库。确保您使用的是相当最新的版本。
问:为什么这在我的 Android 模拟器上不起作用???
答:确保您使用的是运行Google API 目标和/或 Google API CPU 的虚拟设备!
问:我收到错误 10 ,我该怎么办?
答:这可能是由于 cordova 没有使用您想要使用的密钥库造成的(例如,因为您生成了自己的密钥库)。请检查 https://cordova.apache.org/docs/en/latest/guide/platforms/android/#signing-an-app 以了解如何执行此操作。有些人报告说,您需要在运行构建之前运行cordova clean
以解决错误 10。
问:我收到错误 16 ,我该怎么办?
答:这始终是一个问题,因为您的 Android 应用程序的签名(或指纹)在签名时不会添加到 google console(或 firebase)OAuth 白名单中。请仔细检查您是否已执行此操作所需的所有操作。请参阅下面的迷你指南。
首先,请确保您完全阅读并理解 Android 文档中的应用程序签名指南!
阅读本文后/同时,请仔细检查您是否正确执行了以下所有步骤 1-4:
为了签署您的应用程序(在开发或发布时),您需要使用 Android Studio 或通过终端创建本地密钥库和密钥。 Google 有一项名为“Google Play 应用程序签名”的功能,他们会将密钥保存在其服务器上并为您签署您的应用程序,但无论您是否使用此功能,您都需要本地密钥库和密钥。
您的本地密钥库和密钥将是您的官方应用程序签名密钥。
您需要在 Google OAuth 设置中将以下关键指纹(SHA1 格式)列入白名单:
debug.keystore
密钥您的本地密钥库和密钥将是您的“上传密钥”,官方“应用程序签名密钥”的另一个密钥由 Google 创建和管理。
您需要在 Google Oauth 设置中将以下关键指纹(SHA1 格式)列入白名单:
debug.keystore
密钥获取上述密钥的指纹(SHA1 格式)以便能够将它们列入白名单。
对于 android 默认debug.keystore
执行以下操作:
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 Play Console 中找到 Google 用于签署您的版本的密钥。
要求:您需要完成Android应用程序的基本信息,然后需要上传签名的APK进行内部测试。上传后,您将能够访问以下菜单:
转到发布管理 > 应用程序签名。在那里你会看到
“上传”与上面的键 B. 相同(并且应该相同)。 “应用程序签名证书”是 Google 将使用的密钥。复制这个。
同样,我们有两个选项将它们列入白名单。仅使用Google Cloud Platform 的项目或使用Firebase的项目。
(如果您也使用 Firebase,则可以跳过此步骤)