Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用原始JSON调用Firebase云函数?_Ios_Firebase_Google Cloud Functions - Fatal编程技术网

Ios 如何使用原始JSON调用Firebase云函数?

Ios 如何使用原始JSON调用Firebase云函数?,ios,firebase,google-cloud-functions,Ios,Firebase,Google Cloud Functions,我有一个Firebase云功能checkUsers。在《邮递员》中的效果与所附的截图类似 这是云函数 app.post('/', (req, res) => { if (req.body.emails === undefined) { res.status(422).send("Missing email addresses input"); return; } const emailsToCheck = req.body.emails; if (ema

我有一个Firebase云功能
checkUsers
。在《邮递员》中的效果与所附的截图类似

这是云函数

app.post('/', (req, res) => {

  if (req.body.emails === undefined) {
    res.status(422).send("Missing email addresses input");
    return;
  }

  const emailsToCheck = req.body.emails;
  if (emailsToCheck.length == 0) {
    res.status(422).send("No email addresses provided");
    return;
  }

  var existingEmails = [];
  var emailsChecked = [];
  listAllUsers(function(page) {
    page.forEach(function(record) {
      existingEmails.push(record.toJSON()["email"].toLowerCase());
    });
  }, function(lastPage) {
    // Here, we should have all the users
    lastPage.forEach(function(record) {
      existingEmails.push(record.toJSON()["email"].toLowerCase());
    });

    // Iterating over emailsToCheck and checking if the email is in existingEmails
    emailsToCheck.forEach(function(record) {
      const exists = existingEmails.includes(record);
      emailsChecked.push({ email: record, exists: exists });
    });

    res.status(200).send(emailsChecked);
  });
});

exports.checkUsers = functions.https.onRequest(app);

当我尝试从iOS SDK调用相同的函数时,它不起作用

func checkEmails(
    _ contacts: [SIContact],
    _ completion: @escaping (([SIContact]) -> Void)
  ) {
    let data = ["aaa", "akshit.zaveri@gmail.com", "bbb"]
    let params = ["emails": data]
    self.functions.httpsCallable("checkUsers").call(params) { (result, error) in
      if let error = error {
        print("Error while checking emails \(error)")
        return completion(contacts)
      }

      guard let results = result?.data as? [[String: Any]] else {
        return completion(contacts)
      }

      print(results)
    }
  }
更新:

我收到422,缺少电子邮件地址输入错误。只有在请求中找不到emails参数时才应该返回,正如我们在上面的云函数代码中看到的那样


我已经试过调试它,我的结论是iOS代码没有正确地传递电子邮件数组。

你弄错了。它们的工作方式不同。不能使用Firebase SDK for callable函数调用某些HTTP端点。如果您想调用HTTP端点,则需要为您的平台使用HTTP库。

您正与之混淆。它们的工作方式不同。不能使用Firebase SDK for callable函数调用某些HTTP端点。如果您想调用HTTP端点,您需要为您的平台使用HTTP库。

请共享您的云函数代码。另外,您得到的错误是什么?“它不起作用”信息不足。请编辑问题以显示后端代码,并解释调试请求所做的工作。包括日志、错误和预期输出。我已经更新了问题。您可以分享您的云功能代码吗。另外,您得到的错误是什么?“它不起作用”信息不足。请编辑问题以显示后端代码,并解释调试请求所做的工作。包括日志、错误和预期输出。我已更新了问题。