我已经使用Firebase创建了可行的Cloud Function,并且可以使用我的浏览器运行。现在,我正在使用我的iOS Swift代码,并且已经成功安装了所有依赖项。
但是,我是iOS / Swift的新手,试图找出从Cloud Function调用URL的位置?这是Firebase提供的从iOS应用程序内调用的代码:
functions.httpsCallable("addMessage").call(["text": "test"]) { (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 text = (result?.data as? [String: Any])?["text"] as? String {
print(text) // WOULD EXPECT A PRINT OF THE CALLABLE FUNCTION HERE
}
}
这是可调用的云功能(已部署):
exports.addMessage = functions.https.onCall((data, context) => {
const text = data.text;
return {
firstNumber: 1,
secondNumber: 2,
operator: '+',
operationResult: 1 + 2,
};
});
到目前为止,我在XCode控制台中看不到任何内容,希望可以调用该函数。谢谢!
答案 0 :(得分:1)
听起来您可能正在使用HTTP请求Cloud Function。 HTTP callable Cloud Functions与HTTP request Cloud Functions不同。
注意HTTP可调用云功能的签名:
exports.addMessage = functions.https.onCall((data, context) => {
// ...
});
相对于HTTP请求云功能:
exports.date = functions.https.onRequest((req, res) => {
// ...
});
如果您使用的是onRequest
,则必须从客户端制作一个HTTP request。如果使用的是可调用函数,则只需传递函数名称和数据即可,如示例中所示。从您显示的链接来看,就像
functions.httpsCallable("testFunction").call(["foo": "bar"]) { (result, error) in
//...
}
答案 1 :(得分:0)
我想到了这个问题。我必须更新我的Cloud Function返回键以匹配我的Swift函数。这是TypeScript代码:
exports.addMessage = functions.https.onCall((data, context) => {
const text = data.text;
console.log(text)
return {
text: "100"
};
答案 2 :(得分:0)
希望这行得通。确保在可调用的Cloud Function的返回部分上添加一个'text'元素,例如:
exports.addMessage = functions.https.onCall((data,
context) => {
const text = data.text;
return {
text: text
firstNumber: 1,
secondNumber: 2,
operator: '+',
operationResult: 1 + 2,
};
});
在您的代码中,您将返回未使用的变量,例如“ firstNumber”,“ secondNumber”,“ operator”和“ operationResult”,而您忘记添加重要的变量,即“文字”。
答案 3 :(得分:0)
代替(result?.data as? [String: Any])?["text"] as? String
使用result?.data
最终看起来像这样
if let text = (result?.data) {
print(text) // WOULD EXPECT A PRINT OF THE CALLABLE FUNCTION HERE
}