跳过内容

Supabase Apple Login on Android

GitHub

前提条件

前提条件部分

本指南将帮助您在 Android 上将 Apple Sign-In 与 Supabase 身份验证集成。假设您已经完成:

步骤 1:部署后端 Edge Function

步骤 1:部署后端 Edge Function

首先,我们需要部署 Supabase Edge Function 来处理 Apple OAuth 回调。

  1. 导航到您的 Supabase 项目目录

    终端窗口
    cd your-project/supabase
  2. 创建边缘函数 (如果不存在)

    终端窗口
    supabase functions new apple-signin-callback
  3. 复制边缘函数 code

    完整的边缘函数实现可在示例应用中找到 复制以下文件到您的项目中:.

    - 主边缘函数 __CAPGO_KEEP_0__

    • supabase/functions/apple-signin-callback/index.ts - Main edge function code
    • supabase/functions/apple-signin-callback/deno.json 用于 JWT 签名的库 jose 配置 JWT 验证
  4. 配置 JWT 验证

    The Apple OAuth callback endpoint must be public (no authentication required) because Apple will redirect to it. Update your supabase/config.toml 文件:

    [functions.apple-signin-callback]
    enabled = true
    verify_jwt = false # Important: Set to false for public OAuth callback
    import_map = "./functions/apple-signin-callback/deno.json"
    entrypoint = "./functions/apple-signin-callback/index.ts"
  5. 部署函数

    终端窗口
    supabase functions deploy apple-signin-callback
  6. 获取函数 URL

    部署后,你会得到一个类似这样的 URL:

    https://your-project-ref.supabase.co/functions/v1/apple-signin-callback

    如果您找不到它,以下是您可以尝试的方法:

    1. 打开 https://supabase.com/dashboard/project/YOUR_PROJECT_REF/functions
    2. 点击 apple-signin-callback 函数URL以复制它。 Supabase Functions Apple Sign-In Callback

第 2 步:配置 Apple Developer Portal

第 2 步:配置 Apple Developer Portal

现在我们需要使用后端 URL 配置 Apple Developer Portal 并获取所需的所有值。

  1. 按照 Apple Login Android Setup Guide 的步骤进行

    完成 Apple Login Android Setup 指南 到:

    • 创建 Service ID
    • 生成私钥 (.p8 文件)
    • 获取您的 Team ID 和 Key ID
    • 配置 Return URL
  2. 在 Apple Developer Portal 中设置 Return URL

    当在 Apple 开发者门户中配置 Return URL(Apple 指南第 6.9 步)时,请使用您的 Supabase Edge Function URL:

    https://your-project-ref.supabase.co/functions/v1/apple-signin-callback

    重要:使用 Supabase Edge Function URL

    不要 使用 Apple Login Android 设置指南中的重定向 URL。 . 这个指南使用自定义后端服务器 URL。为了 Supabase 集成,您 必须 使用您的 Supabase Edge Function URL 代替。

  3. 收集所有必需的值

    完成 Apple 设置指南后,您应该有:

    • APPLE_TEAM_ID:您的 Apple 开发者团队 ID
    • APPLE_KEY_ID:来自 Apple 开发者门户的密钥 ID
    • APPLE_PRIVATE_KEY:您的 .p8 私钥文件(需要 base64 编码)
    • ANDROID_SERVICE_ID:您的 Apple 服务 ID(例如, com.example.app.service)
    • BASE_REDIRECT_URL:您的深度链接URL(例如, capgo-demo-app://path)

步骤 3:设置 Supabase 秘密值

步骤 3:设置 Supabase 秘密

现在我们需要配置环境变量(秘密)以便于 Supabase Edge 功能

  1. 编码您的私钥

    首先,编码您的 Apple 私钥 (.p8 文件) 为 base64:

    终端窗口
    base64 -i AuthKey_XXXXX.p8

    复制整个输出(它是一个单独的长字符串)

  2. 使用 Supabase 设置秘密 CLI

    终端窗口
    supabase secrets set APPLE_TEAM_ID=your_team_id
    supabase secrets set APPLE_KEY_ID=your_key_id
    supabase secrets set APPLE_PRIVATE_KEY=your_base64_encoded_key
    supabase secrets set ANDROID_SERVICE_ID=your.service.id
    supabase secrets set BASE_REDIRECT_URL=your-app://path
    supabase secrets set APPLE_REDIRECT_URI=https://your-project-ref.supabase.co/functions/v1/apple-signin-callback
  3. 如果您更喜欢使用仪表板:

    如果您更喜欢使用仪表板:

    1. 前往您的 Supabase 项目仪表板
    2. 导航至 边缘功能设置密钥
    3. 为每个密钥变量添加其值

步骤 4:使用身份验证助手

标题为“步骤 4:使用身份验证助手”

现在您可以在应用程序中使用身份验证助手 code.

The complete implementation is available in the example app的 supabaseAuthUtils.ts 文件中。

使用身份验证助手

标题:使用身份验证助手
import { authenticateWithAppleSupabase } from './supabaseAuthUtils';
const result = await authenticateWithAppleSupabase();
if (result.success) {
console.log('Signed in:', result.user);
// Navigate to your authenticated area
} else {
console.error('Error:', result.error);
}

更新助手函数

标题:更新助手函数

当使用助手函数时,您 authenticateWithAppleSupabase 必须 更新以下值以匹配您的配置:__CAPGO_KEEP_0__ __CAPGO_KEEP_1__

  1. 更新 redirectUrl - 将其设置为您的 Supabase Edge Function URL:

    const redirectUrl = platform === 'android'
    ? 'https://your-project-ref.supabase.co/functions/v1/apple-signin-callback'
    : undefined;
  2. 更新 clientId - 将其设置为您的 Apple Service ID:

    await SocialLogin.initialize({
    apple: {
    clientId: isIOS
    ? undefined // iOS uses bundle ID automatically
    : 'your.service.id.here', // Your Apple Service ID for Android
    redirectUrl: redirectUrl,
    },
    });

__CAPGO_KEEP_0__ 完整实现 用于参考。

步骤 5:测试集成

步骤 5:测试集成
  1. 构建并运行您的 Android 应用

    终端窗口
    npx cap sync android
    npx cap run android
  2. 测试身份验证流程

    • 点击“使用 Apple 登录”按钮
    • 您应该在浏览器中看到 Apple OAuth 页面
    • 验证后,您应该被重定向回您的应用
    • 检查控制台日志以查看是否有错误
  3. 验证流程

    完整的流程应该是:

    1. 用户点击“使用Apple登录”
    2. 应用程序打开Apple OAuth的浏览器
    3. 用户使用Apple登录
    4. Apple重定向到: https://your-project-ref.supabase.co/functions/v1/apple-signin-callback
    5. 边缘函数交换code为令牌
    6. 边缘函数重定向到: your-app://path?id_token=...&access_token=...
    7. 安卓应用程序接收深度链接并处理身份令牌
    8. 应用程序使用身份令牌登录Supabase

If authentication fails:

  • 重定向 URI 不匹配: 确认 Apple Developer Portal 中的 Return URL 与 APPLE_REDIRECT_URI secret
  • 深度链接无法正常工作: 检查 AndroidManifest.xml intent 过滤器是否与 BASE_REDIRECT_URL
  • 缺少密钥: 确认使用 supabase secrets list
  • Token 交换失败: 检查 Supabase 控制台中的 Edge Function 日志以获取详细错误信息
  • 应用程序未接收回调: 确保 onNewIntent 在 MainActivity 中正确实现
  • Review the 示例应用程序 code 用于参考

在 Android 上,Apple Sign-In 使用 OAuth 重定向流程:

  1. 初始化: 使用您的 Service ID 和后端重定向 URL 初始化插件
  2. OAuth 流: 打开 Apple 的 OAuth 页面的浏览器/Chrome 自定义标签
  3. 后端回调: Apple redirects to your Supabase Edge Function with an authorization code
  4. 令牌交换: 边缘函数使用 Apple 的令牌端点交换 code 为令牌
  5. 深度链接重定向: 边缘函数将身份令牌重定向回您的应用
  6. Supabase 身份验证: 应用接收令牌并登录 Supabase

此流程是必要的,因为 Apple 没有为 Android 提供 native Sign in with Apple 支持。

从 Supabase Apple 登录继续

标题:从 Supabase Apple 登录继续

如果您正在使用 Supabase Apple Login on Android 为 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 的实现细节提供,以及 双因素身份验证 为双因素身份验证提供实现细节.