跳过内容

Android 上的 Google 登录

GitHub

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

使用Google登录在Android

使用 Google 登录于 Android

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

  1. 创建Android客户端ID

    1. 点击搜索栏

      Google控制台搜索栏
    2. 搜索 credentials 并点击 APIs and Services 结果显示凭据选项,APIs和服务突出显示

      点击
    3. 结果显示凭据选项,APIs和服务突出显示 create credentials

      在 Google 控制台中创建凭证按钮
    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 文件中的应用 ID 配置
    10. 现在,打开终端。确保您在应用的文件夹中并运行 android 终端显示 gradlew signInReport 命令 ./gradlew signInReport

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

    1. 前往 Create credentials Google控制台中的

    2. 设置应用类型为 Web

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

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

      客户端ID详细信息,显示Web客户端ID复制
  3. 修改您的 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. 调用初始化。应仅在此处调用一次。

      // 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 __CAPGO_KEEP_0__. Logcat错误,如 GoogleSignInClient API. Logcat errors such as GetCredentialCustomException: [28444] Developer console is not set up correctly 来自该堆栈。

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

客户端类型

用于位置Web应用
Web应用服务器/ID令牌受众webClientIdSocialLogin.initialize()
Android,一个签名密钥证明您的APK有权调用Google仅限Google Cloud Console。不要将此ID传递给 webClientId

使用Android客户端ID的常见错误是 webClientId。凭据管理器需要在那里使用Web客户端ID。Android客户端只需要在控制台中正确注册的包名和SHA-1即可。

为每个签名构建创建一个Android OAuth客户端:

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

Google Android OAuth 客户端包名必须与 Android OAuth 客户端包名完全匹配,包括任何后缀。 applicationId 如果 OAuth 同意屏幕处于测试模式,请在 Audience > Test users 下添加您测试的每个 Google 帐户。发布应用到生产环境不是必需的。 android/app/build.gradle.debug 通过 Credential Manager 的 Google 登录不需要数字资产链接。

Google Cloud 的更改可能需要几小时才能传播。 email 错误 28444:开发者控制台设置不正确 profile 错误 28444:开发者控制台设置不正确assetlinks.json这通常意味着 Google 拒绝了安装的 APK 签名证书、包名和组合。

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

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

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

错误 28444:开发者控制台设置不正确 webClientId. 请按照以下检查清单进行工作:

  1. 确认 webClientId 是Web应用程序客户端ID,且以 .apps.googleusercontent.com.
  2. 运行应用程序,重现故障,并在Logcat中读取 GoogleProvider, signingSha1=, 和 package=.
  3. Google Cloud Console > Credentials,打开您的Android OAuth客户端并验证确切的包名和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 匹配问题。请先修复上面的后台设置。

从安装的构建中提取 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 证书,请尝试自定义 keystore。 此问题评论 解释了如何将 keystore 添加到您的项目。

如果您正在使用 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 中的实现细节 双因素验证 双因素验证的实现细节。