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

求助:Firebase Functions在iOS端调用返回NOT FOUND错误

解决iOS调用Firebase Functions返回"NOT FOUND"的问题

嘿,我一眼就看到你遇到的核心问题了——这是函数名称不匹配加上函数类型不兼容导致的,咱们一步步来搞定:

1. 先解决最明显的问题:函数名称不一致

你Swift代码里调用的是testFunction,但部署在GCP的函数名叫helloWorld,这就好比你喊张三但来了李四,系统肯定找不到啊!先把两边的名称统一起来,要么把Swift里的调用改成helloWorld,要么把GCP函数名改成testFunction。

2. 关键:HTTP函数 vs Callable函数不兼容

你现在部署的是普通HTTP云函数(用req、res处理请求响应的那种),但iOS代码里用的是functions.httpsCallable()——这是Firebase专门用来调用Callable Functions的API,两种类型完全不兼容,这才是"NOT FOUND"的核心原因。

给你两种解决方案,选适合你的就行:

方案一:把HTTP函数改成Callable函数

修改GCP上的函数代码,换成Callable函数的写法,同时指定正确的区域(你用的是eu-west-2):

const functions = require("firebase-functions");

// 指定欧盟西部2区域,同时把函数名改成和Swift调用一致的testFunction
exports.testFunction = functions.region('eu-west-2').https.onCall((data, context) => {
  // Callable函数通过data参数获取客户端传来的数据
  let message = data.message || 'Hello World!';
  // 必须返回一个JSON格式的响应,不能直接send
  return { result: message };
});

然后重新部署函数:

firebase deploy --only functions:testFunction

部署完成后,你的Swift代码不需要改,直接调用就能正常工作了。

方案二:Swift改用URLSession调用普通HTTP函数

如果你不想修改云函数的类型,那iOS端就得换成普通的HTTP请求来调用,代码示例如下:

func cloudRequest() {
    // 替换成你自己的项目ID,格式是https://eu-west-2-<你的项目ID>.cloudfunctions.net/helloWorld
    guard let url = URL(string: "https://eu-west-2-YOUR_PROJECT_ID.cloudfunctions.net/helloWorld") else {
        print("无效的URL,请检查项目ID和区域")
        return
    }
    
    var request = URLRequest(url: url)
    request.httpMethod = "POST"
    // 如果要传参数,这里可以构造请求体
    request.httpBody = "message=From iOS".data(using: .utf8)
    
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        DispatchQueue.main.async {
            if let error = error {
                print("请求出错:\(error.localizedDescription)")
                return
            }
            
            if let data = data, let responseText = String(data: data, encoding: .utf8) {
                print("云函数响应:\(responseText)")
            }
        }
    }
    task.resume()
}

最后再检查两个细节

  • 确认iOS项目里的GoogleService-Info.plist是从你的Firebase项目下载的,配置完全正确;
  • 用firebase functions:list命令查看已部署的函数列表,确认函数名称、区域和你调用的完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 05:57:47