Google 签名插件
用 Google 登录的非官方 Capacitor 插件。 [^1]
特征
Capacitor Google Sign-In插件是Capacitor应用程序最完整的Google认证解决方案之一. 以下是一些关键特征:
- 🖥️ 跨平台:支持Android,iOS,和Web.
- 🔐 认证:在用户中用他们的Google账户签名,并获得ID标志(JWT).
- 🔑 授权:可选地请求 OAuth 瞄准镜以获取访问令牌和服务器认证码.
- 👤 用户配置:检索用户的电子邮件,显示姓名,配置图片等.
- 🛡️ 诺斯支持:在Android和Web上使用自定义的非ce来防止回放攻击.
- 🪶 轻巧:只有一个依赖和零个不必要出血.
- 🚨 错误代码:提供详细的出错代码,以更好地处理出错.
- 🤝 兼容性: 与 苹果签名 - 单位 财务报告和审定财务报表 奥奥特 插件 .
- 📦 可可花和SPM:支持CocoaPods和Swift软件包管理器用于iOS.
- 🔁 最新数据:总是支持最新的Capacitor版本.
缺少一个功能? 刚刚 打开一个问题 我们看看!
使用大小写
Google Sign-In插件通常在用户应当以其现有的Google账户签名的地方使用,例如:
- 社会登录:让用户用他们的Google账户在您的应用程序上签名,而不是创建新的密码.
- 后端认证: 将ID标志(JWT)发送到后端验证用户身份.
- 谷歌 API 访问: 请 OAuth 范围代表用户获得访问令牌以访问Google API.
- 服务器端 API 访问: 在您的后端交换服务器认证码, 用于访问和刷新令牌 .
- 配置文件预填: 使用用户的电子邮件, 显示名称和配置图片, 在您的应用程序中预先填入他们的配置 .
兼容性
| 插件版本 | 电容版本 | 状态 |
|---|---|---|
| 0.1.x (中文(简体) ) | >=8.x.x | 积极支持 |
指南
安装
你可以用我们的 AI 辅助设置 以安装插件. 添加数据 超级技能 至您的 AI 工具,使用以下命令:
npx skills add capawesome-team/skills --skill capacitor-plugins
然后使用下列提示:
Use the `capacitor-plugins` skill from `capawesome-team/skills` to install the `@capawesome/capacitor-google-sign-in` plugin in my project.
如果你喜欢 手动设置,通过运行以下命令来安装插件,并遵循下面的平台特定指令:
npm install @capawesome/capacitor-google-sign-in
npx cap sync
在所有的平台上,你的品牌必须是 已核实 您的应用程序名称将使用 Google 同意屏幕显示在标志上 .
机器人
创建一个 机器人 用户端 谷歌云控台 在与您的网络客户端相同的工程中 :
- 软件包名称:您的应用程序的应用程序ID(例如.
com.example.app),定义如下:android/app/build.gradle。 。 。 . - SHA-1 证书指纹:签名应用的证书的指纹.
请注意:Android客户端ID从未传递给插件,因为 initialize(...) 总是收到 网络 客户身份 Android客户端必须仍然存在并匹配应用,否则登录入流失败.
需要使用的 SHA-1 指纹取决于应用程序的签名方式 :
- 本地调试构建:调试键盘的指纹. 打印出来
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android。 。 。 . - 通过 Google Play 分发的构建: 指纹 应用程序签名密钥,而不是上传密钥。 在 Google 游戏控制台下找到它
Test and release›Setup›App signing。 。 。 .
为您想要支持的每个指纹添加 OAuth 客户端 。 缺失的指纹是导致登录流失败的最常见原因.
变量
此插件将使用以下工程变量( 在您的应用程序中定义) variables.gradle 文件名 :
$androidxCredentialsVersion版本androidx.credentials:credentials(默认 :1.5.0(中文(简体) )$googleIdVersion版本com.google.android.libraries.identity.googleid:googleid(默认 :1.1.1(中文(简体) )$playServicesAuthVersion版本com.google.android.gms:play-services-auth(默认 :21.5.0(中文(简体) )
iOS系统
添加数据 GIDClientID 键 ios/App/App/Info.plist google Cloud Console 的 iOS 客户端标识文件 :
<key>GIDClientID</key>
<string>YOUR_IOS_CLIENT_ID</string>
您还需要为您的 iOS 客户端ID 添加 URL 方案 ios/App/App/Info.plist 文件 :
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.YOUR_IOS_CLIENT_ID</string>
</array>
</dict>
</array>
替换 YOUR_IOS_CLIENT_ID 与来自Google Cloud Console的倒置客户端ID(例如. com.googleusercontent.apps.123456789-abc) (中文(简体) ).
配置
此插件不需要配置 .
使用量
以下示例显示如何初始化插件,在用户中签名和签名,并完成Web上的登录流.
初始化插件
打电话 initialize(...) 在所有其他方法之前 这个 clientId 一定是个 网络客户端ID 从Google Cloud Console在所有平台上,甚至在Android和iOS上. 可选规定 scopes 以请求授权,从而在登录结果中允许访问令牌和服务器认证码:
import { GoogleSignIn } from '@capawesome/capacitor-google-sign-in';
const initialize = async () => {
await GoogleSignIn.initialize({
clientId: '123456789-abc.apps.googleusercontent.com',
scopes: ['https://www.googleapis.com/auth/userinfo.profile'],
});
};
在用户中签名
启动"Google Sign-In"流程并取回"ID"(JWT)和用户配置. 注意在网络上
import { ErrorCode, GoogleSignIn } from '@capawesome/capacitor-google-sign-in';
const signIn = async () => {
try {
const result = await GoogleSignIn.signIn();
console.log(result.idToken);
console.log(result.userId);
console.log(result.email);
console.log(result.displayName);
console.log(result.accessToken);
console.log(result.serverAuthCode);
} catch (error) {
if (error.code === ErrorCode.SignInCanceled) {
console.log('The user canceled the sign-in flow.');
} else if (error.code === ErrorCode.NoCredentialAvailable) {
console.log('No Google account is available on this device.');
} else if (error.code === ErrorCode.ProviderConfigurationError) {
console.log('Google Play services is not available or not up to date.');
} else {
console.log('Another error occurred:', error);
}
}
};
完成网络上的登录流程
在网络上,应用程序被重定向回 redirectUrl 用户签名后。 打电话 handleRedirectCallback() 在那里可以将授权代码交换为符号并完成登录流. 仅在网上提供 :
import { GoogleSignIn } from '@capawesome/capacitor-google-sign-in';
import { Capacitor } from '@capacitor/core';
const handleRedirectCallback = async () => {
if (Capacitor.getPlatform() !== 'web') {
return;
}
const result = await GoogleSignIn.handleRedirectCallback();
console.log(result.idToken);
console.log(result.userId);
console.log(result.email);
console.log(result.displayName);
console.log(result.accessToken);
console.log(result.serverAuthCode);
};
签名用户
签名当前用户 :
import { GoogleSignIn } from '@capawesome/capacitor-google-sign-in';
const signOut = async () => {
await GoogleSignIn.signOut();
};
API 密码
手柄重定向调用( C)
handleRedirectCallback() => Promise<SignInResult>
处理 OAuth 提供者的重定向调用.
当应用程序从 OAuth 提供者重定向回时,必须调用这种方法 . 它将授权代码交换为令牌并返回登录结果.
仅在Web上提供.
回返情况: Promise<SignInResult>
自: 0.1.0 (中文(简体) )
初始化(...)
initialize(options: InitializeOptions) => Promise<void>
初始化Google Sign-In插件.
这种方法必须在所有其他方法之前使用一次.
| 参数 | 类型 |
|---|---|
options | InitializeOptions |
自: 0.1.0 (中文(简体) )
签名IN(...)
signIn(options?: SignInOptions | undefined) => Promise<SignInResult>
启动Google Sign-In流量.
在Web上,这可以重定向到Google OAuth的授权页面.
承诺永远不会在网络上解决。 用户签名后,
应用程序将重定向回 redirectUrl。 。 。 .
使用 handleRedirectCallback() 要完成登录流程.
| 参数 | 类型 |
|---|---|
options | SignInOptions |
回返情况: Promise<SignInResult>
自: 0.1.0 (中文(简体) )
符号输出( C)
signOut() => Promise<void>
签名当前用户 .
在Android上,这清除了认证状态. 在iOS上,这个标志出自Google Sign-In SDK. 在网络上,这是不开放的.
自: 0.1.0 (中文(简体) )
接口
签名结果
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
idToken | string | 由Google返回的ID标志 (JWT). 此符号可以发送到您的后端进行校验 . | 0.1.0 (中文(简体) ) |
userId | string | 用户Google账户的独特标识符. | 0.1.0 (中文(简体) ) |
email | string | null | 用户的电子邮件地址. | 0.1.0 (中文(简体) ) |
displayName | string | null | 用户的显示名(全名). | 0.1.0 (中文(简体) ) |
givenName | string | null | 用户的给定名 (名). | 0.1.0 (中文(简体) ) |
familyName | string | null | 用户姓(上名). | 0.1.0 (中文(简体) ) |
imageUrl | string | null | 用户配置图片的 URL. | 0.1.0 (中文(简体) ) |
accessToken | string | null | 访问 Google API 的访问符 。 仅在 scopes 配置为 initialize()。 。 。 . | 0.1.0 (中文(简体) ) |
serverAuthCode | string | null | 在您的后端可以交换的服务器认证代码, 用于访问和刷新令牌 。 只有在Android和iOS上可以使用时 scopes 配置为 initialize()。 。 。 . | 0.1.0 (中文(简体) ) |
初始化选项
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
clientId | string | 来自Google Cloud Console的网络客户端ID. 在Android上,这个作为服务器客户端ID传递给证书管理器API和授权客户端API. 在iOS上,它被用作Google Sign-In SDK的服务器客户端ID. 在Web上,这个用于初始化Google Sign-In JavaScript API. 请注意:这必须是所有平台,甚至Android和iOS上的网络客户端ID. | 0.1.0 (中文(简体) ) |
redirectUrl | string | 在 OAuth 流后重定向到的 URL 。 仅在Web上提供. | 0.1.0 (中文(简体) ) |
scopes | string[] | OAuth 范围请求 。 如果提供,插件除了认证外还会请求授权. 这样可以 accessToken 财务报告和审定财务报表 serverAuthCode 在报到结果. | 0.1.0 (中文(简体) ) |
签名选项
| Prop | 类型 | 说明 | 自兹 |
|---|---|---|---|
nonce | string | 防止重放攻击的无能 仅在Android和Web上提供. | 0.1.0 (中文(简体) ) |
警卫
此插件处理 OAuth 流并返回给您的应用程序的符号 。 为保证融入安全,请注意以下情况:
- 需要服务器侧符号验证 . 这个
idToken(JWT)为: 没有 验证客户端。 您的后端 必须 使用 谷歌的公用钥匙 在信任任何权利要求之前(例如:.userId, (中文(简体) ),email) (中文(简体) ). 在没有服务器端验证的情况下,从不使用客户端符号数据进行授权决定. - 交换
serverAuthCode在你的后门. 如果使用瞄准镜,请发送serverAuthCode到你的后端,并在那里交换它 访问和刷新符号。 永远不要交换客户端 因为这会暴露你的客户秘密.
财务问题
这个插件与其他Google Sign-In插件有什么区别?
这个插件是为Google Sign-In而专门设计的,并专注于提供具有最新平台功能的干净而现代的API. 以下是一些关键差异:
- 跨平台:支持Android,iOS,和Web.
- 轻巧: 无不必要的依赖。 只是Google的签名,没有别的.
- 无折旧的 API:使用最新的平台API(Android上的信用管理器,iOS上的Google Sign-In SDK).
- 认证 + 授权:支持单流中的认证(ID sorders)和授权(access sorders,服务器认证代码).
- 错误代码: 为正确处理错误提供打出的错误代码.
- 在网络上重定向流量:使用重定向的OAuth流来代替弹出,从而产生更可靠和更方便用户的经验.
为什么我需要Android和iOS上的网络客户端ID?
这个 clientId 选项必须是来自所有平台的 Google Cloud Console 的网络客户端ID。 在Android上,它作为服务器客户端ID被传递到证书管理器API和授权客户端API. 在iOS上,它被用作Google Sign-In SDK的服务器客户端ID. 在 iOS 上,您通过 GIDClientID 键 Info.plist 文件,参见 安装 节.
为什么 signIn 承诺永远不要在网络上解决?
在Web上,插件使用基于重定向的OAuth流. 这个 signIn(...) 方法重定向到Google OAuth授权页面,因此承诺永远无法解决. 用户签名后,应用程序会重新定向到 redirectUrl 你必须打电话 handleRedirectCallback() 以完成登录流程,参见 使用示例 见上文.
我怎么才能得到谷歌API的登录符??
配置 scopes 选项 initialize(...) 方法。 然后,插件除了认证之外,还要求授权,因为认证允许 accessToken 财务报告和审定财务报表 serverAuthCode 属性。 如果您需要访问并刷新后端上的符号,请交换 serverAuthCode 从来没有客户端,如 警卫 节.
为什么Android的签入流量在选择账户后就失败了?
如果取账器打开,但一旦取出一个账户,流量就会出故障,则该应用极有可能丢失匹配的Android OAuth客户端. 查找日志输出中的以下条目之一 :
Auth.Api.Credentials: colz: [8] Unknown error [status=UNREGISTERED_ON_API_CONSOLE].
Auth.Api.Credentials: colz: [16] Account reauth failed.
Google Play 服务将此报告为取消, 因此插件拒绝使用 SIGN_IN_CANCELED 错误代码和 Account reauth failed 作为错误消息。 确保Android OAuth客户端对签名应用的证书的软件包名称和SHA-1指纹存在,详情见: 安装 节。 通过Google Play分发的构建必须使用应用程序签名密钥的指纹,而不是上传密钥.
相关插件
- 苹果签名 - 单位:用他们的Apple账户在用户中签名.
- 脸书签名 单位:在用户中用他们的Facebook账户签名.
- 奥奥特: 与任何 OAuth 2. 0 和 OpenID 连接供应商通信 .
- 密码:根据WebAuthn标准创建并认证了密码.
通讯
随时更新有关卡帕韦索姆、Capacitor和Ionic生态系统的最新消息和最新消息,因为我们 《卡帕索克通讯》。 。 。 .
更改日志
见 变动情况。 。 。 .
许可证
见 自由主义。 。 。 .
[^1]: 本项目不附属于Google Inc.或其任何子公司或子公司,不由Google Inc.认可、赞助或核准.