跳过内容

Android 上的 Google 登录

GitHub

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

使用 Google 登录

使用 Google 登录 Android

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

  1. 创建Android客户端ID

    1. 点击搜索栏

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

      显示API和服务高亮的搜索结果
    3. 点击 create credentials

      Google Console 中的创建凭证按钮
    4. 选择 OAuth client ID

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

      Android 选项突出显示的应用类型选择
    6. 打开 Android Studio

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

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

      build.gradle (Module: app) 文件
    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 button create
    Android客户端创建表单,包名和SHA1字段已填写
  2. 创建一个Web客户端(这是Android必需的)

    1. 前往 Create credentials Google控制台

    2. 设置应用类型为 Web

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

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

      修改您的
  3. __CAPGO_KEEP_0__ MainActivity

    1. 请在 Android Studio 中打开您的应用程序。您可以运行 cap open android

    2. 查找 MainActivity.java

      1. 打开 app 文件夹

        在 Android Studio 项目导航器中找到应用程序文件夹
      2. 查找 java

        在 Android Studio 项目结构中找到 Java 文件夹
      3. 查找您的 MainActivity.java 并单击它

        MainActivity.java 文件在包结构中
    3. 修改 MainActivity.java。请添加以下 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. 保存文件

  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. Create a button and run the following code on click.

      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 icon

      显示支持Google Play商店的设备

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

    4. 点击 next

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

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

      系统图标选择屏幕中的下一步按钮
    7. 确认您的设备。您可以为模拟器命名

      设备配置验证屏幕,带有完成按钮
    8. 进入 Device Manager 启动您的模拟器

      设备管理器中列出的虚拟设备和播放按钮
    9. 模拟器启动后,进入其设置

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

    设置屏幕,带有Google Play选项
    1. 点击 Update 等待约60秒
    Google Play 更新屏幕
  6. 测试您的应用

    如果您正确完成了所有步骤,您应该看到Google登录流程正常工作:

    Android上的Google登录流程演示,显示登录过程和成功身份验证

故障排除

故障排除

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

凭证管理器、SHA-1和Firebase

Android上此插件使用Google凭证管理器(

和Google登录),而不是遗留的androidx.credentials Logcat错误,如__CAPGO_KEEP_0__ GoogleSignInClient API. Logcat errors such as GetCredentialCustomException: [28444] Developer console is not set up correctly 来自该堆栈。

过滤Logcat GoogleProviderCapgoSocialLogin 为了比较它们与Google Cloud Console。 webClientId Google Cloud设置

类型

用途位置Web应用
用于Server / ID token audiencewebClientId in SocialLogin.initialize()
在 Android 中,一个签名密钥对应一个证明您的 APK 有权调用 Google仅在 Google 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 后缀。

如果 OAuthConsentScreen 在测试模式下,请在 Audience > Test users 下添加您测试的每个 Google 帐户。发布应用到生产环境不是 emailprofile scope。通过 Credential Manager 的 Google 登录不需要 Digital Asset Links(assetlinks.json)。

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

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

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

这通常意味着 Google 拒绝了安装的 APK 签名证书、包名和 webClientId. 请按照以下检查清单进行工作:

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

USER_CANCELLED 在选择了一个配置错误的调试构建的账户后,仍然可能出现 SHA-1 或客户端 ID 匹配问题。首先修复上面的后台设置。

从您安装的构建中提取 SHA-1

从您安装的构建中提取 SHA-1

调试或本地构建:

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

签名的发布 APK:

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

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

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

读取登录结果

标题:读取登录结果

令牌嵌套在 result:

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

对于 Firebase Auth,创建具有该令牌的凭据 idToken 并使用 Web 客户端 ID 作为 webClientIdinitialize.

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

如果您正在使用 Google Login on Android 来规划身份验证和帐户流程,连接它 使用 @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 中的实现细节 双因素验证 双因素验证的实现细节。