【问题标题】:Swift, Firebase Cloud Function - INVALID ARGUMENT errorSwift,Firebase Cloud Function - INVALID ARGUMENT 错误
【发布时间】:2021-03-02 09:11:42
【问题描述】:

我正在尝试使用以下代码从 firebase 调用云函数。

客户端代码 -

func checkUserStatus() {
    let functions = Functions.functions(region: "us-central1")
    
    let argument  = [
        "currentUser":
            [
                "email": "test@email.com",
                "uid": "LP8R4yZroyMTj"
            ]
    ]
    
    functions.httpsCallable("subscriptionStatus").call(argument) { (result, error) in
        if error != nil {
            print("FAILED")
            print(error)
        } else {
            print("PASSED")
           print(result)
        }
    }
}

云函数代码-

exports.subscriptionStatus = functions.https.onRequest(async (request: Request<RequestBody>, response) => {

    const {
        currentUser,
    } = request.body

 // Logic goes here

 }

但是运行时出现如下错误

Error Domain=com.firebase.functions Code=3 "INVALID ARGUMENT" UserInfo={NSLocalizedDescription=INVALID ARGUMENT}

该函数接受一个名为currentUser的参数,该参数进一步包括用户的电子邮件和uid。 任何线索都将受到高度赞赏。

【问题讨论】:

  • 我认为问题出在你的字典上。尝试只传入 '["email": "test@email.com","uid": "LP8R4yZroyMTj"]' 并查看错误是否持续存在。
  • 刚刚尝试过并收到相同的错误消息。
  • 哦,我明白了。您的云功能是“onRequest”。如果你要这样使用它,它必须是一个可调用的函数。您可以在以下文档中找到更多信息:firebase.google.com/docs/functions/…
  • 哦,有没有办法从客户端调用onRequest类型的函数?
  • 我相信你必须通过调用http url来调用该函数:https://us-central1-&lt;project-id&gt;.cloudfunctions.net/subscriptionStatus

标签: ios swift firebase google-cloud-functions


【解决方案1】:

只是为了让其他有类似问题的人回答这个问题。

要调用 onRequest() 云函数,您需要使用部署它的 URL,即 https://us-central1-&lt;project-id&gt;.cloudfunctions.net/&lt;function-name&gt;?&lt;var-name&gt;=&lt;var-value&gt;

如果您想在客户端应用程序中使用call 调用它,那么您需要使用onCall() 云函数。

Firebase 拥有关于其服务的最佳文档之一:https://firebase.google.com/docs/functions/get-started

OnCall 函数:
https://firebase.google.com/docs/functions/callable

onRequest 函数:
https://firebase.google.com/docs/functions/http-events

【讨论】:

  • 我只是按照文档进行操作,并能够通过 https 调用取回结果。