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

iOS调用Firebase可调用函数遇too many HTTP redirects错误求助

问题

在iOS应用中集成Firebase HTTPS可调用函数时,调用出现too many HTTP redirects错误,错误日志如下:

2023-02-18 19:40:38.701646-0600 Spaces[16235:3277636] Task <48F8CCDC-85B7-451F-9D00-FC93D93B7AFC>.<1> finished with error [-1007] Error Domain=NSURLErrorDomain Code=-1007 "too many HTTP redirects" UserInfo={NSLocalizedDescription=too many HTTP redirects, NSErrorFailingURLStringKey=https://accounts.google.com/v3/signin/rejected?continue=https://uc.appengine.google.com/_ah/conflogin?state%3D~AJKiYcHgSfXKmjn8R3F7NQNdJB-nW8eUS2Xxxojs23jJxTuoOb6Rt2tr-ooa5vw_yCMFz2P1PZUzwzuI-GSUDkbDWHqF-UQ30JQOejlBnzcpcSAKxl60g4hHYnHsvNyJBRHx2z4JxKohRxTwAGiL9ryos8HHOQp1_0GOfqHncrBjMwXXdHNJoWAXtJ4-bf7K3sfh32yXYxEIkKiTadJMenpzjDp4MCu8LbG5OXVXI1tXqAouERC_B4-JQA2esYzTGw704LdBdksK&dsh=S1057996816:1676770836995843&flowEntry=ServiceLogin&flowName=WebLiteSignIn&ifkv=AWnogHcLgDBo5gsyBrVbQJMIcoCwk3TXQujaljG27PM2wEBBNE0chcGuSa8bvjDtbyfz1Ii6UodjEw&rhlk=no&rrk=32, NSErrorFailingURLKey=https://accounts.google.com/v3/signin/rejected?continue=https://uc.appengine.google.com/_ah/conflogin?state%3D~AJKiYcHgSfXKmjn8R3F7NQNdJB-nW8eUS2Xxxojs23jJxTuoOb6Rt2tr-ooa5vw_yCMFz2P1PZUzwzuI-GSUDkbDWHqF-UQ30JQOejlBnzcpcSAKxl60g4hHYnHsvNyJBRHx2z4JxKohRxTwAGiL9ryos8HHOQp1_0GOfqHncrBjMwXXdHNJoWAXtJ4-bf7K3sfh32yXYxEIkKiTadJMenpzjDp4MCu8LbG5OXVXI1tXqAouERC_B4-JQA2esYzTGw704LdBdksK&dsh=S1057996816:1676770836995843&flowEntry=ServiceLogin&flowName=WebLiteSignIn&ifkv=AWnogHcLgDBo5gsyBrVbQJMIcoCwk3TXQujaljG27PM2wEBBNE0chcGuSa8bvjDtbyfz1Ii6UodjEw&rhlk=no&rrk=32, _NSURLErrorRelatedURLSessionTaskErrorKey=(
    "LocalDataTask <48F8CCDC-85B7-451F-9D00-FC93D93B7AFC>.<1>"
), _NSURLErrorFailingURLSessionTaskErrorKey=LocalDataTask <48F8CCDC-85B7-451F-9D00-FC93D93B7AFC>.<1>, NSUnderlyingError=0x28045b2a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1007 "(null)"}}

可调用函数代码

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";

admin.initializeApp();
// const fcm = admin.messaging();
const db = admin.firestore();

exports.addNumbers = functions.https.onCall((data) => {
    // [END addFunctionTrigger]
      // [START readAddData]
      // Numbers passed from the client.
      const firstNumber = data.firstNumber;
      const secondNumber = data.secondNumber;
      // [END readAddData]
    
      // [START addHttpsError]
      // Checking that attributes are present and are numbers.
      if (!Number.isFinite(firstNumber) || !Number.isFinite(secondNumber)) {
        // Throwing an HttpsError so that the client gets the error details.
        throw new functions.https.HttpsError('invalid-argument', 'The function must be called with ' +
            'two arguments "firstNumber" and "secondNumber" which must both be numbers.');
      }
      // [END addHttpsError]
    
      // [START returnAddData]
      // returning result.
      return {
        firstNumber: firstNumber,
        secondNumber: secondNumber,
        operator: '+',
        operationResult: firstNumber + secondNumber,
      };
      // [END returnAddData]
    });

iOS端Swift调用代码

func callNumbers() {
DispatchQueue.global(qos: .background).async {
functions.httpsCallable("addNumbers").call(["firstNumber": 10, "secondNumber": 5]) { result, error in
                if let error = error as NSError? {
                    if error.domain == FunctionsErrorDomain {
                        let code = FunctionsErrorCode(rawValue: error.code)
                        let message = error.localizedDescription
                        let details = error.userInfo[FunctionsErrorDetailsKey]
                    }
                    // ...
                }
                if let data = result?.data {
                   print(data)
                }
            }
        }
}

需要解决该问题,实现通过可调用函数在服务器端执行任务。


解决方案

  • 检查函数权限配置
    这个错误大多是身份验证流程循环重定向导致。如果你的addNumbers函数不需要用户登录即可调用,在Firebase控制台的函数页面,进入该函数的权限设置,将访问权限改为允许所有用户调用(测试环境可用,生产环境需根据业务需求配置严格权限)。同时确认函数代码中没有强制要求未登录用户跳转认证的逻辑。

  • 验证iOS端Firebase初始化
    确保FirebaseApp.configure()在AppDelegate的application(_:didFinishLaunchingWithOptions:)方法中正确调用,且GoogleService-Info.plist文件完整无误,包含正确的项目ID、API密钥、应用ID等信息,避免因配置错误触发异常重定向。

  • 确认函数部署状态
    执行firebase functions:log查看函数部署日志,确认函数已成功上线且无报错。也可以在Firebase控制台的函数页面,直接测试addNumbers函数(传入{"firstNumber":10,"secondNumber":5}),验证函数本身是否能正常返回结果。

  • 清除设备缓存与网络重置
    设备端的网络缓存可能引发重定向循环,尝试清除应用缓存、重启设备,或切换网络环境(比如从Wi-Fi切到移动数据)后重新测试调用。

  • 排查手动URL配置
    确保iOS端没有手动指定函数的调用URL,完全依赖Firebase SDK自动获取的默认端点。如果之前有手动配置URL的代码,直接移除,避免因URL错误导致的重定向问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:31:06