Ios 如何从云函数中的请求获取参数?火基
我制作了https云功能,并通过iOS应用程序向其发出请求。云函数被调用,因为我可以看到日志,但我无法从iOS应用程序发送的请求中获取参数。我尝试了几种不同的选择,但它们对我很有帮助,请告诉我如何才能达到效果Ios 如何从云函数中的请求获取参数?火基,ios,node.js,firebase,google-cloud-platform,google-cloud-functions,Ios,Node.js,Firebase,Google Cloud Platform,Google Cloud Functions,我制作了https云功能,并通过iOS应用程序向其发出请求。云函数被调用,因为我可以看到日志,但我无法从iOS应用程序发送的请求中获取参数。我尝试了几种不同的选择,但它们对我很有帮助,请告诉我如何才能达到效果 const functions = require('firebase-functions'); const admin = require('firebase-admin'); module.exports = functions.https.onRequest((req, res)
const functions = require('firebase-functions');
const admin = require('firebase-admin');
module.exports = functions.https.onRequest((req, res) => {
console.log("getChatGroupConversationAvatars start", req.params);
const requestDict = req.params;
console.log("requestDict", requestDict);
const queryFormat = req.query.format;
console.log("queryFormat", queryFormat);
const conversationID = requestDict["conversationID"];
const currentUserID = requestDict["currentUserID"];
console.log("conversationID", conversationID, "currentUserID", currentUserID);
return console.log("getChatGroupConversationAvatars");
});
iOS应用程序代码
class ChatAvatarsManager {
func getChatGroupConversationAvatars(_ conversationID: String) {
DispatchQueue.main.async {
guard let currentUserID = RealmManager().getCurrentUser()?.id else { return }
DispatchQueue.global(qos: .background).async {
let path = "https://us-central1-exampleapp.cloudfunctions.net/getChatGroupConversationAvatars"
guard let url = URL(string: path) else { return }
let parameters = ["conversationID" : conversationID, "currentUserID" : currentUserID]
AlamofireExampleManager.shared.request(url, method: .get, parameters: parameters, encoding: URLEncoding.default, headers: nil).responseJSON { (response) in
switch response.result {
case .success:
debugPrint("getChatGroupConversationAvatars success")
case .failure(let error):
if error._code == NSURLErrorTimedOut {
//timeout here
debugPrint("getChatGroupConversationAvatars timeOut")
}
debugPrint("getChatGroupConversationAvatars \(error)")
}
}
}
}
}
}
struct AlamofireExampleManager {
static let shared: SessionManager = {
let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 10
let sessionManager = Alamofire.SessionManager(configuration: configuration)
return sessionManager
}()
例如,我在日志中得到了这个结果
conversationID undefined currentUserID undefined
我也试过了
module.exports = functions.https.onRequest((req, res) => {
const conversationID = req.params.conversationID;
const currentUserID = req.params.currentUserID;
console.log("conversationID", conversationID, "currentUserID", currentUserID);
return console.log("getChatGroupConversationAvatars");
});
我读了这篇文章,重写了我的代码,所以它适合我
const functions = require('firebase-functions');
const admin = require('firebase-admin');
module.exports = functions.https.onRequest((req, res) => {
const conversationID = req.query.conversationID;
const currentUserID = req.query.currentUserID;
console.log("conversationID", conversationID, "currentUserID", currentUserID);
return console.log("getChatGroupConversationAvatars");
});
对于Web:(POST请求)
我们有:
export const myFunction = functions.https.onRequest((req, res) => {
const conversationID = req.body.conversationID;
const currentUserID = req.body.currentUserID;
return ;
});
参考:
iOS将数据放入request.body.data.key中,因此,如果您在查询中查找从iOS传入的数据,则查找的位置不正确。当您使用url中的?key=value参数从浏览器调用函数时,request.query.key会包含数据。但是,当从应用程序调用时,传递的数据位于request.body.data对象中-我检查了iOS SDK的源代码,是的,这就是它的实现方式。谢谢您的帮助!另外请注意,默认情况下调用HttpScalable会将参数放入名为data的json对象中,因此我必须执行req.body.data.conversationIDI必须将该对象包装在cors(请求、响应,()=>{}中,我已设置好。谢谢!
[[[FIRFunctions functions] HTTPSCallableWithName:@"functionName"] callWithObject:@{@"key": value}
completion:^(FIRHTTPSCallableResult * _Nullable result, NSError * _Nullable error) {