跳过内容

Google 登录(Android)

GitHub

在本指南中,您将学习如何设置 Google 登录和 Capgo 社交登录的 Android 版本。 我假设您已经阅读了 通用设置指南.

在 Android 上使用 Google 登录

简介部分

在本部分中,您将学习如何在 Android 上设置 Google 登录。

  1. 创建Android客户端ID

    1. 点击搜索栏

      Google控制台搜索栏
    2. 搜索 credentials 并点击 APIs and Services 截图中的第2个(数字2)

      显示凭据选项的搜索结果,APIs和Services突出显示
    3. 点击 create credentials

      Google控制台中的创建凭据按钮
    4. 选择 OAuth client ID

      凭据创建菜单中的OAuth客户端ID选项
    5. 选择类型 Android 应用类型

      选择应用类型,Android选项高亮
    6. 打开Android Studio

    7. 在导航器的最下方,找到 Gradle Scripts

      Android Studio项目导航器中的Gradle Scripts部分
    8. 查找 build.gradle 为模块 app

      build.gradle (Module: app)文件在Gradle Scripts部分
    9. 复制 android.defaultConfig.applicationId. 这将是您的 package name 在Google控制台中

      Build.gradle 文件显示 applicationId 配置
    10. 现在,打开终端。确保您在应用程序的文件夹中并运行 android 终端显示 gradlew signInReport 命令 ./gradlew signInReport

    滚动到此命令的顶部。您应该看到以下内容。复制
    1. 终端输出显示 SHA1 证书指纹 SHA1.
    现在,返回 Google 控制台。输入
    1. 作为 applicationId 并您的 SHA1 在证书字段中并点击 Package Name Android 客户端创建表单,包名和 SHA1 字段已填充 create
    创建一个 Web 客户端(这是为 Android 必须的)
  2. 转到

    1. Web 客户端创建表单 Create credentials 在 Google 控制台中查看页面

    2. 设置应用类型为 Web

      选择应用类型,Web 选项高亮
    3. 点击 Create

      创建 Web 客户端表单,底部有创建按钮
    4. 复制客户端 ID,您将其作为 webClientId 在您的 JS/TS code 中

      显示客户端 ID 详情,Web 客户端 ID 复制
  3. 修改您的 MainActivity

    1. 请在 Android Studio 中打开您的应用。您可以通过 cap open android

    2. 查找 MainActivity.java

      1. 打开 app 文件夹

        Android Studio 项目导航器中的 App 文件夹
      2. 查找 java

        Android Studio 项目结构中的 Java 文件夹
      3. 找到并点击 MainActivity.java MainActivity.java 文件

        修改
    3. 请在此处添加 __CAPGO_KEEP_0__ MainActivity.java. Please add the following code

      import ee.forgr.capacitor.social.login.GoogleProvider;
      import ee.forgr.capacitor.social.login.SocialLoginPlugin;
      import ee.forgr.capacitor.social.login.ModifiedMainActivityForSocialLoginPlugin;
      import com.getcapacitor.PluginHandle;
      import com.getcapacitor.Plugin;
      import android.content.Intent;
      import android.util.Log;
      import com.getcapacitor.BridgeActivity;
      // ModifiedMainActivityForSocialLoginPlugin is VERY VERY important !!!!!!
      public class MainActivity extends BridgeActivity implements ModifiedMainActivityForSocialLoginPlugin {
      @Override
      public void onActivityResult(int requestCode, int resultCode, Intent data) {
      super.onActivityResult(requestCode, resultCode, data);
      if (requestCode >= GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MIN && requestCode < GoogleProvider.REQUEST_AUTHORIZE_GOOGLE_MAX) {
      PluginHandle pluginHandle = getBridge().getPlugin("SocialLogin");
      if (pluginHandle == null) {
      Log.i("Google Activity Result", "SocialLogin login handle is null");
      return;
      }
      Plugin plugin = pluginHandle.getInstance();
      if (!(plugin instanceof SocialLoginPlugin)) {
      Log.i("Google Activity Result", "SocialLogin plugin instance is not SocialLoginPlugin");
      return;
      }
      ((SocialLoginPlugin) plugin).handleGoogleLoginIntent(requestCode, data);
      }
      }
      // This function will never be called, leave it empty
      @Override
      public void IHaveModifiedTheMainActivityForTheUseWithSocialLoginPlugin() {}
      }
    4. 在应用程序中使用 Google 登录

  4. 使用 Google 登录

    1. 首先,导入 SocialLogin

      import { SocialLogin } from '@capgo/capacitor-social-login';
    2. 调用 initialize。 这应该只调用一次。

      // onMounted is Vue specific
      // webClientId is the client ID you got in the web client creation step not the android client ID.
      onMounted(() => {
      SocialLogin.initialize({
      google: {
      webClientId: '673324426943-avl4v9ubdas7a0u7igf7in03pdj1dkmg.apps.googleusercontent.com',
      }
      })
      })
    3. 调用 SocialLogin.login. 创建一个按钮并在点击时运行以下 code。

      const res = await SocialLogin.login({
      provider: 'google',
      options: {}
      })
      // handle the response
      console.log(JSON.stringify(res))
  5. 配置模拟器用于测试

    1. 进入 Device manager 点击加号按钮

      Android Studio中的设备管理器,带有加号按钮的设备
    2. 创建虚拟设备

      虚拟设备配置中的创建虚拟设备按钮
    3. 选择任何具有 Play Store 图标

      硬件选择,显示支持Play Store的设备

      如您所见, pixel 8 支持 Play Store 服务

    4. 点击 next

      设备创建向导中的下一步按钮
    5. 确保操作系统映像类型为 Google Play. 必须 类型为 Google Play

      系统映像选择页面显示Google Play类型的图像
    6. 点击下一步

      系统映像选择页面中的下一步按钮
    7. 确认您的设备。您可以为模拟器命名

      设备配置验证页面显示完成按钮
    8. 进入 Device Manager 并启动您的模拟器

      设备管理器中显示虚拟设备并显示播放按钮
    9. 模拟器启动后,进入其设置

      安卓模拟器显示设置应用
    10. 进入 Google Play

    设置屏幕显示Google Play选项
    1. 点击 Update 并等待约60秒
    Google Play更新屏幕显示更新按钮
  6. 测试您的应用

    如果您一切都做对了,那么您应该看到Google登录流程正常工作:

    Android Google 登录流程示例,展示签名过程和成功验证

故障排除

故障排除

如果您遇到任何问题,请首先将应用程序配置与Google Cloud控制台值进行比较。Android Google Sign-In故障通常由包名、SHA-1或客户端ID不匹配引起。

凭证管理器、SHA-1和Firebase

凭证管理器、SHA-1和Firebase

在Android上,这个插件使用Google凭证管理器(androidx.credentials 和Google登录),而不是遗留的 GoogleSignInClient API。Logcat错误,如 GetCredentialCustomException: [28444] Developer console is not set up correctly 通过

过滤Logcat GoogleProvider Filter Logcat with CapgoSocialLogin 在登录失败后。该插件将记录您的包名、签名的SHA-1和掩码 webClientId 以便您可以将它们与Google Cloud Console进行比较。

Required Google Cloud setup

标题:Required Google Cloud setup

您需要在同一个Google Cloud项目中创建两种类型的OAuth 2.0客户端ID:

Client type用于Where it goes
Web应用webClientId 在Android中,一个签名密钥对应一个 SocialLogin.initialize()
在Android中,一个签名密钥对应一个证明您的APK有权调用GoogleGoogle Cloud Console中仅有。不要将此ID传递给 webClientId

常见的错误是使用Android客户端ID作为 webClientId。Credential Manager要求在Web客户端ID中使用。 Android客户端只需要在控制台中正确注册的包名和SHA-1即可。

为每个签署测试构建的证书创建一个Android OAuth客户端:

  • Debug:从 ./gradlew signingReport 用于debug版本。
  • Release:从您实际安装的APK或AAB中。
  • Play App Signing:从Play Console > App integrity > App signing key certificate。即使您的上传密钥SHA-1已经注册,也需要此项。

The applicationIdandroid/app/build.gradle 必须与Android OAuth客户端包名完全匹配,包括任何 .debug suffix.

如果 OAuth 同意屏幕处于测试模式,添加您测试的每个 Google 帐户到“受众”>“测试用户”。不需要将应用程序发布到生产环境中 emailprofile 权限。数字资产链接(assetlinks.json)不需要用于通过凭据管理器进行Google登录。

Google Cloud 的更改可能需要几小时才能传播。

错误 28444:开发者控制台设置不正确

标题:错误 28444:开发者控制台设置不正确

这通常意味着 Google 拒绝了安装的 APK 签名证书、包名和 webClientId。请逐步检查以下清单:

  1. 确认 webClientId 是Web应用程序客户端ID,且以 .apps.googleusercontent.com.
  2. 运行应用程序,重现故障,并阅读Logcat日志 GoogleProvider, signingSha1=, 和 package=.
  3. In Google Cloud Console > Credentials,打开您的Android OAuth客户端并验证exact包名和SHA-1。
  4. 如果测试发布版,请注册该构建的SHA-1,而不是仅限调试密钥存储。
  5. 如果应用程序通过Play Store分发,也注册Play App Signing SHA-1。
  6. 确保Web和Android客户端位于同一个Google Cloud项目中。
  7. 如果consent屏幕处于测试状态,请确认Google账户是测试用户。
  8. 等待并重试后台更改。

USER_CANCELLED 在选择了一个配置错误的调试构建的账户后仍然可能是SHA-1或客户端ID不匹配。先修复上面的控制台设置。

Debug 或本地构建:

终端窗口
cd android && ./gradlew signingReport

已签名的 Release APK:

终端窗口
keytool -printcert -jarfile android/app/release/app-release.apk

将该 SHA-1 添加到匹配包名的 Android OAuth 客户端中,重新安装相同的已签名 APK,重新测试:

终端窗口
adb install android/app/release/app-release.apk

Tokens are nested under result:

const login = await SocialLogin.login({ provider: 'google' });
const idToken = login.result?.idToken;

为了 Firebase Auth,创建具有该 idToken 并使用 Web 客户端 ID 作为 webClientIdinitialize.

如果您无法获取开发 SHA-1 证书,请尝试自定义密钥库。 本问题评论 解释如何将密钥库添加到您的项目中。

从 Google 登录 Android 上继续

标题为“从 Google 登录 Android 上继续”

如果您正在使用 Google 登录 Android To plan authentication and account flows, connect it with 使用 @capgo/capacitor-social-login 对于 @capgo/capacitor-social-login 的原生能力 @capgo/capacitor-social-login 关于 @capgo/capacitor-social-login 的实现细节 @capgo/capacitor-passkey 关于 @capgo/capacitor-passkey 的实现细节 @capgo/capacitor-native-biometric 关于 @capgo/capacitor-native-biometric 的实现细节 双因素认证 关于双因素认证的实现细节