【问题标题】:Firebase Functions iOS Returns Error Not FoundFirebase 函数 iOS 返回未找到错误
【发布时间】:2026-02-03 16:15:01
【问题描述】:

我已经构建并部署了默认的“Hello World”firebase 函数,但是当我尝试调用它时,错误消息是“NOT FOUND”。任何帮助将不胜感激。谢谢

Swift 代码

func cloudRequest(){
    functions.httpsCallable("testFunction").call("") {(result, error) in
        if let error = error as? NSError{
            switch FunctionsErrorCode(rawValue: error.code) {
            case .internal:
                print("Internal error \(error.localizedDescription)")
            default:
                print("Error \(error.localizedDescription)")
            }
        }
        print("Running result condition")
        if error == nil{
            print(result?.data)
        }
    }
}

部署在 GCP eu west 2 中的函数的代码是

exports.helloWorld = (req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
};

【问题讨论】:

  • 您能否编辑您的问题以显示您的云函数的代码?虽然您可能从某个地方复制/粘贴了它,但我们需要查看它才能帮助进行故障排除。
  • 您似乎只添加了调用该函数的代码,但还需要进一步输入。按照弗兰克的要求,你能附上函数的代码吗?查看完整的错误消息、如何初始化 functions 对象以及托管 Firebase 函数的区域也会很有趣。

标签: ios swift firebase google-cloud-functions


【解决方案1】:

根据更新的代码,目标 Firebase 函数似乎被称为 helloWorld,而不是 testFunction。此外,它位于区域europe-west2。实际上,您似乎也在使用 Cloud Functions 而不是 Firebase Functions。

请注意,Firebase 项目具有 GCP 对应项,因此两个项目中都会出现 Firebase 函数,但 GCP 项目不一定有与之关联的 Firebase 项目。您可以在the documentation 中找到更多相关信息。

如果您打算从 iOS 调用 Cloud Functions,我建议您转移到 Firebase Functions,在那里您将能够使用 Firebase SDK 来触发该功能(您打算做什么)。

Firebase 库

使用these instructions 了解如何正确编写 Firebase 函数以及如何部署它。你应该有这样的东西:

'use strict';

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

exports.helloWorld = functions.region('europe-west2').https.onRequest((req, res) => {
  let message = req.query.message || req.body.message || 'Hello World!';
  res.status(200).send(message);
});

注意在创建函数时要指定区域,否则会在us-central1中创建。

之后,您就可以在 iOS 应用中使用 Firebase 访问该功能。

lazy var functions = Functions.functions(region:"europe-west2")

functions.httpsCallable("helloWorld").call() { (result, error) in
    // code
}

此方法强制您在 Firebase 项目上部署 Firebase 函数,它不适用于 GCP-only 项目。

HTTP 触发器

如果您打算继续使用 GCP,您可以使用他们的HTTP trigger 访问您部署的函数。在这种情况下,它将类似于以下内容,但具有正确的项目 ID:

https://europe-west2-PROJECT_ID.cloudfunctions.net/helloWorld

此方法也适用于使用Firebase Function

【讨论】:

    【解决方案2】:
    1. 检查函数名是否正确

    2. 要调用在默认us-central1 以外的任何位置运行的函数,您必须在初始化时设置适当的值。例如,在 Android 上,您将使用 getInstance(FirebaseApp app, String region) 进行初始化。

    例如,假设 europe-west3 您的函数部署在哪里;调用这个函数

     functions('europe-west3').httpsCallable('testFunction')(/* ... */)
    

    有用的参考:

    【讨论】: