Supabase Apple Android 登录
复制安装步骤和本插件的完整 Markdown 指南的配置提示。
前提条件
前提条件本指南将帮助您在 Android 上将 Apple Sign-In 与 Supabase 身份验证集成。假设您已经完成了:
步骤 1:部署后端 Edge Function
步骤 1:部署后端 Edge Function首先,我们需要部署 Supabase Edge Function 来处理 Apple OAuth 回调。
-
前往您的 Supabase 项目目录
终端窗口 cd your-project/supabase -
创建边缘功能 (如果不存在)
终端窗口 supabase functions new apple-signin-callback -
复制边缘功能 code
完整的边缘功能实现可在示例应用中找到 复制以下文件到您的项目:.
- 主边缘功能 __CAPGO_KEEP_0__
supabase/functions/apple-signin-callback/index.tsCopy the edge function codesupabase/functions/apple-signin-callback/deno.json- 依赖项导入映射(包含jose- JWT 签名的库
-
配置 JWT 验证
Apple OAuth 回调端点必须是公开的(不需要身份验证),因为 Apple 将重定向到它。更新您的
supabase/config.toml文件:[functions.apple-signin-callback]enabled = trueverify_jwt = false # Important: Set to false for public OAuth callbackimport_map = "./functions/apple-signin-callback/deno.json"entrypoint = "./functions/apple-signin-callback/index.ts" -
部署函数
终端窗口 supabase functions deploy apple-signin-callback -
获取您的函数 URL
部署后,您将获得类似于:
https://your-project-ref.supabase.co/functions/v1/apple-signin-callback如果您无法找到它,请尝试以下步骤:
- 打开
https://supabase.com/dashboard/project/YOUR_PROJECT_REF/functions - 点击
apple-signin-callback函数 URL 以复制它。
- 打开
步骤 2:配置 Apple 开发者门户
标题:步骤 2:配置 Apple 开发者门户现在我们需要在后端 URL 中配置 Apple 开发者门户并获取所需的所有值。
-
遵循 Apple 登录 Android 设置指南
完成 Apple 登录 Android 设置指南 到:
- 创建服务 ID
- 生成私钥 (.p8 文件)
- 获取您的团队 ID 和密钥 ID
- 配置返回 URL
-
在 Apple 开发者门户中设置返回 URL
在 Apple 指南 (第 6.9 步) 中配置返回 URL 时,请使用您的 Supabase 边缘函数 URL:
https://your-project-ref.supabase.co/functions/v1/apple-signin-callback重要:使用 Supabase 边缘函数 URL
不要 使用来自 Apple 登录 Android 设置指南的重定向 URL。该指南使用自定义后端服务器 URL。对于 Supabase 集成,您 必须 使用您的 Supabase 边缘函数 URL 代替。
-
收集所有必需值
完成苹果设置指南后,您应该有以下内容:
- APPLE_TEAM_ID:您的苹果开发者团队 ID
- APPLE_KEY_ID:苹果开发者门户中的密钥 ID
- APPLE_PRIVATE_KEY: 您的 .p8 私钥文件(需要进行 base64 编码)
- ANDROID_SERVICE_ID: 您的 Apple Service ID(例如,
com.example.app.service) - BASE_REDIRECT_URL: 您的深度链接 URL(例如,
capgo-demo-app://path)
步骤 3: 设置 Supabase 秘密
标题:步骤 3: 设置 Supabase 秘密现在我们需要配置 Supabase Edge Function 的环境变量(秘密)。
-
编码您的私钥
首先,编码您的 Apple 私钥 (.p8 文件) 到 base64:
终端窗口 base64 -i AuthKey_XXXXX.p8复制整个输出(它是一个单独的长字符串)。
-
使用 Supabase 设置秘密 CLI
终端窗口 supabase secrets set APPLE_TEAM_ID=your_team_idsupabase secrets set APPLE_KEY_ID=your_key_idsupabase secrets set APPLE_PRIVATE_KEY=your_base64_encoded_keysupabase secrets set ANDROID_SERVICE_ID=your.service.idsupabase secrets set BASE_REDIRECT_URL=your-app://pathsupabase secrets set APPLE_REDIRECT_URI=https://your-project-ref.supabase.co/functions/v1/apple-signin-callback -
如果您更喜欢使用控制台:
如果您更喜欢使用控制台:
- 前往您的 Supabase 项目控制台
- 导航到 边缘功能 → 设置 → 机密
- 为每个机密变量添加其值
标题:步骤4:使用身份验证助手
Make sure you’ve completed those steps before proceeding.现在您可以在应用程序中使用身份验证助手 code。
实现
标题:实现完整的实现可在 示例应用程序的 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 帮助函数, 您 必须 更新以下值以匹配您的配置:
-
更新
redirectUrl- 将其设置为您的 Supabase 边缘功能 URL:const redirectUrl = platform === 'android'? 'https://your-project-ref.supabase.co/functions/v1/apple-signin-callback': undefined; -
更新
clientId- 将其设置为您的 Apple 服务 ID:await SocialLogin.initialize({apple: {clientId: isIOS? undefined // iOS uses bundle ID automatically: 'your.service.id.here', // Your Apple Service ID for AndroidredirectUrl: redirectUrl,},});
参见 完整实现 参考
步骤5:测试集成
测试集成-
步骤5:测试集成
构建并运行您的Android应用 npx cap sync androidnpx cap run android -
复制到剪贴板
- 测试身份验证流程
- 您应该在浏览器中看到 Apple OAuth 页面
- 您成功验证后应该会被重定向回您的应用
- 检查控制台日志以查看是否有错误
-
验证流程
完整的流程应该是:
- 用户点击“使用 Apple 登录”
- 应用程序打开浏览器并显示 Apple OAuth
- 用户使用 Apple 进行验证
- Apple 重定向到:
https://your-project-ref.supabase.co/functions/v1/apple-signin-callback - 边缘函数用 code 交换令牌
- 边缘函数重定向到:
your-app://path?id_token=...&access_token=... - Android 应用程序接收深度链接并处理身份令牌
- __CAPGO_KEEP_0__
__CAPGO_KEEP_1__
解决方案__CAPGO_KEEP_2__
- __CAPGO_KEEP_3__如果身份验证失败:
APPLE_REDIRECT_URIURI 重定向不匹配 - : 确认 Apple Developer Portal 中的 Return URL 与以下内容完全匹配密钥
AndroidManifest.xml深度链接未工作BASE_REDIRECT_URL - : 确认意图过滤器与您的
supabase secrets list - Token exchange fails: 检查 Supabase 控制台中的边缘函数日志以获取详细的错误消息
- App doesn’t receive callback: 确保
onNewIntentis properly implemented in MainActivity - Review the example app code for reference
How It Works
Section titled “How It Works”On Android, Apple Sign-In uses an OAuth redirect flow:
- Initialization: 使用您的 Service ID 和后端重定向 URL 初始化插件
- OAuth Flow: 打开 Apple 的 OAuth 页面的浏览器/Chrome 自定义标签
- Backend Callback: Apple 重定向到您的 Supabase Edge Function 中的授权 code
- Token Exchange: 使用 Apple 的 token 端点交换 code
- Deep Link Redirect: Edge Function 重定向回您的应用程序,带有身份令牌
- Supabase Authentication: 应用程序接收令牌并登录到 Supabase
This flow is necessary because Apple doesn’t provide native Android support for Sign in with Apple.
继续使用 Supabase Apple 登录(Android)
标题:继续使用 Supabase Apple 登录(Android)如果您正在使用 Supabase Apple 登录(Android) 来规划身份验证和帐户流程, Using @capgo/capacitor-social-login 使用 @capgo/capacitor 社交登录 为使用 @capgo/capacitor 社交登录的原生能力 @capgo/capacitor 社交登录 为 @capgo/capacitor 社交登录的实现细节 @capgo/capacitor Passkey 为 @capgo/capacitor Passkey 的实现细节 for the implementation detail in @capgo/capacitor-native-biometric, and Two-factor authentication Capgo