跳转至正文

Android 端 Apple 登录

GitHub

在 Android 上做 Apple 登录很 hacky。Apple 官方并不支持 Sign in with Apple 在 Android 上,因此该方案略显 hack。

Android 目前使用 Chrome tabs 来展示 OAuth2 网页。这种方式存在以下挑战:

  • 配置复杂
  • 需要后端支持

了解 Android 端的流程。

标题为“理解 Android 上的流程”。

让我用流程图来解释 Android 上的流程:

既然你已经了解了挑战和流程,让我们开始配置吧。

  1. 登录 Apple Developer Portal.

  2. 点击 Identifiers.

    Apple Developer Portal Identifiers 栏目

    你应该会看到如下界面:

    Apple Developer Portal Identifiers 界面
    1. 请确保该字段显示为 App IDs
    2. 请确认你能找到你的 App ID。
  3. 请确保 Sign in with Apple 已为您的 App 启用该功能

    1. 点击您的 App 从列表中选择您的 App
    2. 请确保 Sign in with Apple 已启用该功能 “Sign in with Apple capability enabled” 复选框
    3. 如果尚未启用,请将其启用。
  4. 返回所有 All Identifiers

    “All Identifiers” 导航按钮
  5. 点击 App Ids 并前往 Services IDs

    导航至 Service IDs 部分
  6. 创建新的标识符

    1. 点击加号按钮

      添加新的 Service ID 按钮
    2. 选择 Servcice IDs 并点击 Continue

      选择 Service IDs 选项
    3. 输入描述和标识符并点击 Continuie.

      输入 Service ID 详情
    4. 请核对详情并点击 Register

      确认 Service ID 注册
    5. 点击新创建的 Service

      选择新创建的 Service ID
    6. 启用 Sign in with Apple 选项

      为 Service ID 启用 Sign in with Apple
    7. 配置 Sign In with Apple

      配置 Sign in with Apple 按钮
    8. 确保 Primary App ID 已设置为上一步配置的 App ID

      设置 Primary App ID 下拉菜单
    9. 添加您将用于托管后端的域名。

      设置域名与回调 URL 字段
    10. 确认数据并点击 Done

      确认域名与回调 URL 配置
    11. 点击 Continue

      服务配置的继续按钮
    12. 点击 Save

      服务配置的保存按钮
  1. 返回全部 All Identifiers

    所有标识符导航按钮
  2. 点击 Keys

    Apple Developer Portal 中的 Keys 部分
  3. 点击加号图标

    添加新密钥按钮
  4. 为您的密钥命名

    输入密钥名称
  5. 选择 Sign in with Apple 并点击 Configure

    为该密钥启用并配置 Sign in with Apple
  6. 选择主 App ID,然后点击 Save

    为密钥选择主 App ID
  7. 点击 Continue

    配置密钥的继续按钮
  8. 点击 Register

    创建密钥的注册按钮
  9. 复制 Key ID 并下载密钥。

    Key ID 与下载按钮界面
  10. 找到下载的密钥并将其保存到后端文件夹中。

    已下载的密钥文件

为了使用 Login with Apple 在 Android 上,你需要获取 Team ID。它将用于后端。

  1. 前往 该网站 并向下滚动

  2. 找到 Team ID

    开发者账号中的 Team ID 位置

正如你在图中看到的,后端会执行一个名为 Redirect back to the app的操作。这需要手动修改你的 App。

  1. 修改 AndroidManifest.xml
    1. 打开文件,我会用 AndroidStudio

      Android Studio 中的 AndroidManifest.xml 文件
    2. 找到 MainActivity 并添加以下 Intent filter

      在 MainActivity 中添加 Intent filter code
      <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="capgo-demo-app" android:host="path" />
      </intent-filter>
  2. 修改 MainActivity
    1. 请打开 MainActivity

      Android Studio 中的 MainActivity.java 文件
    2. 添加以下 code:

      要添加到 MainActivity 中用于处理 deep link 的 Code
      @Override
      protected void onNewIntent(Intent intent) {
      String action = intent.getAction();
      Uri data = intent.getData();
      if (Intent.ACTION_VIEW.equals(action) && data != null) {
      PluginHandle pluginHandle = getBridge().getPlugin("SocialLogin");
      if (pluginHandle == null) {
      Log.i("Apple Login Intent", "SocialLogin login handle is null");
      return;
      }
      Plugin plugin = pluginHandle.getInstance();
      if (!(plugin instanceof SocialLoginPlugin)) {
      Log.i("Apple Login Intent", "SocialLogin plugin instance is not SocialLoginPlugin");
      return;
      }
      ((SocialLoginPlugin) plugin).handleAppleLoginIntent(intent);
      return;
      }
      super.onNewIntent(intent);
      }

Android 需要后端支持,但配置后端也会影响 iOS。我们提供了一个后端示例 此处

该示例包含以下内容:

  • 一个简单的 JSON 数据库
  • 一种从 Apple 服务器请求 JWT 的方式
  • 简单的 JWT 验证

结合本教程中的所有内容,以下是 env 部分的内容展示:

  • ANDROID_SERVICE_ID = Service ID
  • IOS_SERVICE_ID = App ID
env: {
PRIVATE_KEY_FILE: "AuthKey_U93M8LBQK3.p8",
KEY_ID: "U93M8LBQK3",
TEAM_ID: "UVTJ336J2D",
ANDROID_SERVICE_ID: "ee.forgr.io.ionic.starter.service2",
IOS_SERVICE_ID: "me.wcaleniewolny.test.ionic.vue",
PORT: 3000,
REDIRECT_URI: "https://xyz.wcaleniewolny.me/login/callback",
BASE_REDIRECT_URL: "capgo-demo-app://path"
}

使用 login 函数的使用方式保持不变,与 iOS 一致。详情请参阅该章节。 但是,该 initialize 方法略有不同。

await SocialLogin.initialize({
apple: {
clientId: 'ee.forgr.io.ionic.starter.service2',
redirectUrl: 'https://appleloginvps.wcaleniewolny.me/login/callback'
}
})
  1. 如果你还没有 App ID,请点击加号按钮

    添加新标识符的加号按钮
  2. 选择 App IDs 并点击继续

    选择 App IDs 类型
  3. 点击类型 App 并点击 Continue

    选择 App 类型
  4. 输入描述和 App ID

    正在输入 App 描述和 Bundle ID
  5. 启用 Sign with Apple Capability

    启用 Sign in with Apple capability
  6. 点击 Continue

    App 注册的继续按钮
  7. 确认详情并点击 Register

    正在确认 App 注册详情

如果你正在使用 Android 端 Apple 登录 规划身份验证和账户流程,并将它与 使用 @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 中的实现细节,以及 双重身份验证 了解双因素认证中的实现细节。