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

已实现Firebase Google登录,如何获取Gmail授权令牌调用Gmail API?

获取Firebase Google登录后的Gmail授权令牌

嘿,我之前刚好处理过类似的需求,给你一步步梳理怎么拿到Gmail的授权令牌(access token)来调用Gmail API:

1. 先配置Google登录的权限范围(Scopes)

默认的Firebase Google登录只请求了基础的身份验证权限,你需要额外添加Gmail相关的权限范围,这样才能拿到访问Gmail API的令牌。

在AppDelegate或者SceneDelegate的初始化代码里,给GIDSignIn添加对应的Scopes:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    
    // 配置Google登录的客户端ID和权限范围
    GIDSignIn.sharedInstance().clientID = FirebaseApp.app()?.options.clientID
    // 根据你的需求选合适的Scope,比如只读邮件用gmail.readonly
    GIDSignIn.sharedInstance().scopes = ["https://www.googleapis.com/auth/gmail.readonly"]
    
    return true
}

常用的Gmail Scopes参考:

  • https://www.googleapis.com/auth/gmail.readonly:只读访问用户邮件
  • https://www.googleapis.com/auth/gmail.send:允许发送邮件
  • https://www.googleapis.com/auth/gmail.modify:允许修改邮件

2. 在登录成功回调中获取Access Token

你之前的代码里有sign(inWillDispatch和present viewController,但关键的登录成功回调是sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!),在这里可以拿到Gmail API需要的access token:

func sign(_ signIn: GIDSignIn!, didSignInFor user: GIDGoogleUser!, withError error: Error!) {
    if let error = error {
        print("Google登录出错: \(error.localizedDescription)")
        return
    }
    
    // 核心:获取访问Gmail API的access token
    guard let accessToken = user.authentication.accessToken else {
        print("无法获取Gmail授权令牌")
        return
    }
    
    print("拿到Gmail Access Token: \(accessToken)")
    
    // 这里可以把access token持久化保存(比如用UserDefaults或者Keychain)
    // 另外,refresh token可以用来刷新过期的access token,也建议保存
    let refreshToken = user.authentication.refreshToken
    
    // 继续完成Firebase的登录流程(如果你之前已经集成了的话)
    let credential = GoogleAuthProvider.credential(withIDToken: user.authentication.idToken, accessToken: accessToken)
    Auth.auth().signIn(with: credential) { authResult, error in
        if let error = error {
            print("Firebase登录失败: \(error.localizedDescription)")
            return
        }
        print("Firebase登录成功,同时搞定了Gmail授权!")
    }
}

3. 几个关键注意点

  • Access Token有效期:默认只有1小时,过期后需要用refresh token刷新。可以调用GIDSignIn.sharedInstance().refreshTokensIfNeeded来自动获取新的access token。
  • Google Cloud Console配置:一定要在Google Cloud Console里启用Gmail API,并且在OAuth consent screen里添加好你的iOS客户端ID,测试阶段别忘了添加测试用户。
  • 权限说明:如果你的应用要发布,必须在OAuth consent screen里详细说明为什么需要访问用户的Gmail,否则Google会拒绝你的权限申请。

内容的提问来源于stack exchange,提问作者ethanfox27

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:47:40