iOS第三方授权(Apple/Google/Facebook)接入Supabase方法咨询
iOS对接Supabase:Google与Facebook授权会话获取指南
你已经完成Apple登录的对接,下面针对Google和Facebook的凭证交换流程给出具体实现步骤:
Google登录对接
- 请求端点:
https://SUPABASE_ID.supabase.co/auth/v1/token - 请求方式:POST
- 请求头:设置
Content-Type: application/json - 请求参数:
grant_type:id_tokenprovider:googleid_token: 从GoogleSignIn框架获取到的idToken字符串
- 示例Swift请求代码:
import Foundation func exchangeGoogleTokenForSupabaseSession(googleIdToken: String) async throws -> Data { let supabaseUrl = URL(string: "https://SUPABASE_ID.supabase.co/auth/v1/token")! var request = URLRequest(url: supabaseUrl) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let parameters: [String: Any] = [ "grant_type": "id_token", "provider": "google", "id_token": googleIdToken ] request.httpBody = try JSONSerialization.data(withJSONObject: parameters) let (data, response) = try await URLSession.shared.data(for: request) // 处理响应:解析data获取Supabase的access_token、refresh_token等会话信息 guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else { throw NSError(domain: "SupabaseAuth", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token exchange failed"]) } return data }
Facebook登录对接
- 请求端点:
https://SUPABASE_ID.supabase.co/auth/v1/token - 请求方式:POST
- 请求头:设置
Content-Type: application/json - 请求参数:
grant_type:convert_tokenprovider:facebookaccess_token: 从FBSDKLoginKit框架获取到的accessToken字符串
- 示例Swift请求代码:
import Foundation func exchangeFacebookTokenForSupabaseSession(facebookAccessToken: String) async throws -> Data { let supabaseUrl = URL(string: "https://SUPABASE_ID.supabase.co/auth/v1/token")! var request = URLRequest(url: supabaseUrl) request.httpMethod = "POST" request.setValue("application/json", forHTTPHeaderField: "Content-Type") let parameters: [String: Any] = [ "grant_type": "convert_token", "provider": "facebook", "access_token": facebookAccessToken ] request.httpBody = try JSONSerialization.data(withJSONObject: parameters) let (data, response) = try await URLSession.shared.data(for: request) // 处理响应:解析data获取Supabase的会话凭证 guard let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 else { throw NSError(domain: "SupabaseAuth", code: -1, userInfo: [NSLocalizedDescriptionKey: "Token exchange failed"]) } return data }
通用注意事项
- 替换请求URL中的
SUPABASE_ID为你的Supabase项目ID - 成功响应会包含
access_token、refresh_token和expires_in等字段,后续调用Supabase服务时需携带access_token作为授权凭证 - 建议处理网络请求的异常情况(如无网络、HTTP错误码等)
内容的提问来源于stack exchange,提问作者iOS Dev
相关产品推荐
相关产品推荐

