Firebase Cloud function with Unity使用HTTP可调用函数.需要帮助



我的数据库层次结构。我正在使用Firebase实时数据库

我正在尝试向云函数发送字符串(名称(,使云函数在"中进行搜索;AllCharacterNames";节点,然后将找到的结果字符串返回给Unity(即使字符串为null或空(。

我的Unity功能:

private void CheckIfNameExists(string name)
{
var function = functions.GetHttpsCallable("checkName");
function.CallAsync().ContinueWithOnMainThread((response) =>
{
if (response.IsFaulted || response.IsCanceled)
{
Debug.LogError("Fault!");
}
else
{
string returnedName = response.Result.Data.ToString();
if(returnedName == name)
{
//Name already exists in database
}
else if (string.IsNullOrEmpty(returnedName))
{
//Name doesn't exist in database
}
}
});
}

我的云功能:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.checkName = functions.https.onCall(async (data) => {
if (!data.exists()) {
return null;
}
const name = data.val();
var dbRef = admin.database().ref("AllCharacterNames");
return dbRef.orderByValue().equalTo(name).once("value").then(function (snapshot)
{
return snap.val();
});
});

有人能解释一下我做错了什么吗?谢谢

试试这个

dbRef.orderByValue().equalTo(name).once("value").then(function (snapshot)
{
var exists = (snap.val() !== null);
if(exists){
snap.forEach(function(childSnapshot) {
var key = childSnapshot.key;
var childData = childSnapshot.val();
return childData;
})
}
return null;
});

或者尝试请求

exports.checkName = functions.https.onRequest(async(req, res) => {
let name = req.body.name;
dbRef.orderByValue().equalTo(name).once("value").then(function (snapshot)
{
var exists = (snapshot.val() !== null);
if(exists){
await snapshot.forEach(function(childSnapshot) {
var key = childSnapshot.key;
var childData = childSnapshot.val();
return res.status(200)
.type('application/json')
.json({ results: childData, success: true });
})
}
return res.status(401)
.type('application/json')
.json({ message: "ok", success: false });
});
})

最新更新