【发布时间】:2020-07-10 15:49:04
【问题描述】:
我对通过我的 webGL Unity 应用程序访问的 Cloud Functions 感到有些沮丧。我收到 2 个请求而不是一个,第一个请求始终未定义。因此,我的数据库向我的数组添加了 2 个元素,每次调用它们,一个完全为空,一个有效。
这是我的云功能,在 Unity 中测试时效果很好,但在我的托管站点运行时效果不佳。
export const addSavedMission = functions.https.onRequest(
(request, response) => {
response.set(
"Access-Control-Allow-Origin",
"https://myunity.web.app"
);
response.set("Access-Control-Allow-Headers", "*");
response.set("Accept", "application/json");
// update the array data
admin
.firestore()
.doc("data/missionData")
.update({
missions: admin.firestore.FieldValue.arrayUnion(request.body),
})
.then(() => {
response.status(200).json({ message: `Success` });
})
.catch((error) => {
console.error(error);
response.status(500).json({
message: error,
});
});
});
这是我调用它的 Unity 代码
IEnumerator PostSavedData()
{
string data = JsonUtility.ToJson(thisMission);
string url = $"https://us-central1-app.cloudfunctions.net/addSavedMission";
var request = new UnityWebRequest(url, "POST");
byte[] bodyRaw = Encoding.UTF8.GetBytes(data);
request.uploadHandler = new UploadHandlerRaw(bodyRaw);
request.downloadHandler = new DownloadHandlerBuffer();
request.SetRequestHeader("Access-Control-Allow-Methods", "POST");
request.SetRequestHeader("Content-Type", "application/json");
request.SetRequestHeader("Access-Control-Allow-Headers", "*");
request.SetRequestHeader("Access-Control-Allow-Origin", "https://myunity.web.app");
yield return request.SendWebRequest();
if (request.isNetworkError)
{
Debug.Log("Error: " + request.error);
}
else
{
Debug.Log("Status Code: " + request.responseCode);
}
}
当我从我的托管应用程序中发出此 POST 请求时,我会注销传入的 request.rawBody,第一个始终未定义,但第二个有效。
我在这里缺少什么?我确定 1 个 POST 有 2 个传入请求。
我尝试检查 request.rawBody !== 是否未定义,并且仅当它没有处理 firestore 更新但它永远不会处理第二个有效请求
【问题讨论】:
标签: javascript firebase unity3d google-cloud-firestore google-cloud-functions