Я немного разочарован облачными функциями, доступными через мое приложение webGL Unity. Я получаю 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 из своего размещенного приложения, я выхожу из входящего запроса. RawBody и первый всегда не определен, но второй действителен.
Что мне здесь не хватает? Я уверен, что есть 2 входящих запроса от 1 POST.
Я пытался проверить, не определено ли request.rawBody! == undefined, и только если он не обрабатывает обновление firestore, но тогда это просто никогда обрабатывает 2-й действительный запрос