You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS第三方授权(Apple/Google/Facebook)接入Supabase方法咨询

iOS对接Supabase:Google与Facebook授权会话获取指南

你已经完成Apple登录的对接,下面针对Google和Facebook的凭证交换流程给出具体实现步骤:

Google登录对接

  1. 请求端点:https://SUPABASE_ID.supabase.co/auth/v1/token
  2. 请求方式:POST
  3. 请求头:设置Content-Type: application/json
  4. 请求参数:
    • grant_type: id_token
    • provider: google
    • id_token: 从GoogleSignIn框架获取到的idToken字符串
  5. 示例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登录对接

  1. 请求端点:https://SUPABASE_ID.supabase.co/auth/v1/token
  2. 请求方式:POST
  3. 请求头:设置Content-Type: application/json
  4. 请求参数:
    • grant_type: convert_token
    • provider: facebook
    • access_token: 从FBSDKLoginKit框架获取到的accessToken字符串
  5. 示例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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:15:50