เมื่อใช้ Cloud Functions คุณจะติดตั้งใช้งานโค้ดเพื่อจัดการเหตุการณ์ที่ทริกเกอร์ จากการเปลี่ยนแปลงในฐานข้อมูล Cloud Firestore ได้ ซึ่งช่วยให้คุณเพิ่มฟังก์ชันการทำงานฝั่งเซิร์ฟเวอร์ลงในแอปได้อย่างง่ายดายโดยไม่ต้องเรียกใช้เซิร์ฟเวอร์ของคุณเอง
Cloud Functions (รุ่นที่ 2)
Cloud Run และ Eventarc Cloud Functions for Firebase (รุ่นที่ 2) ช่วยให้คุณมีโครงสร้างพื้นฐานที่ทรงพลังยิ่งขึ้น ควบคุมประสิทธิภาพและความสามารถในการปรับขนาดขั้นสูง และควบคุม รันไทม์ของฟังก์ชันได้มากขึ้น ดูข้อมูลเพิ่มเติมเกี่ยวกับรุ่นที่ 2 ได้ที่ Cloud Functions for Firebase (รุ่นที่ 2) หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับรุ่นที่ 1 โปรดดูขยาย Cloud Firestore ด้วย Cloud Functions
ทริกเกอร์ฟังก์ชัน Cloud Firestore
Cloud Functions for Firebase SDK จะส่งออกCloud Firestore ทริกเกอร์เหตุการณ์ต่อไปนี้เพื่อให้คุณสร้างตัวแฮนเดิลที่เชื่อมโยงกับCloud Firestore เหตุการณ์ที่เฉพาะเจาะจงได้
Node.js
ประเภทเหตุการณ์ | ทริกเกอร์ |
---|---|
onDocumentCreated |
ทริกเกอร์เมื่อมีการเขียนเอกสารเป็นครั้งแรก |
onDocumentUpdated |
ทริกเกอร์เมื่อมีเอกสารอยู่แล้วและมีการเปลี่ยนแปลงค่า |
onDocumentDeleted |
ทริกเกอร์เมื่อมีการลบเอกสาร |
onDocumentWritten |
ทริกเกอร์เมื่อมีการทริกเกอร์ onDocumentCreated , onDocumentUpdated หรือ onDocumentDeleted |
onDocumentCreatedWithAuthContext |
onDocumentCreated พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
onDocumentWrittenWithAuthContext |
onDocumentWritten พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
onDocumentDeletedWithAuthContext |
onDocumentDeleted พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
onDocumentUpdatedWithAuthContext |
onDocumentUpdated พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
Python
ประเภทเหตุการณ์ | ทริกเกอร์ |
---|---|
on_document_created |
ทริกเกอร์เมื่อมีการเขียนเอกสารเป็นครั้งแรก |
on_document_updated |
ทริกเกอร์เมื่อมีเอกสารอยู่แล้วและมีการเปลี่ยนแปลงค่า |
on_document_deleted |
ทริกเกอร์เมื่อมีการลบเอกสาร |
on_document_written |
ทริกเกอร์เมื่อมีการทริกเกอร์ on_document_created , on_document_updated หรือ on_document_deleted |
on_document_created_with_auth_context |
on_document_created พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
on_document_updated_with_auth_context |
on_document_updated พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
on_document_deleted_with_auth_context |
on_document_deleted พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
on_document_written_with_auth_context |
on_document_written พร้อมข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม |
Cloud Firestore เหตุการณ์จะทริกเกอร์เฉพาะ เมื่อมีการเปลี่ยนแปลงในเอกสาร การอัปเดตCloud Firestoreเอกสารที่ข้อมูล ไม่เปลี่ยนแปลง (การเขียนแบบไม่มีการดำเนินการ) จะไม่สร้างเหตุการณ์อัปเดตหรือเขียน เพิ่มเหตุการณ์ลงในฟิลด์ที่เฉพาะเจาะจงไม่ได้
หากยังไม่ได้เปิดใช้โปรเจ็กต์สำหรับ Cloud Functions for Firebase ให้อ่าน เริ่มต้นใช้งาน Cloud Functions for Firebase (รุ่นที่ 2) เพื่อกำหนดค่าและตั้งค่าโปรเจ็กต์ Cloud Functions for Firebase
การเขียนฟังก์ชันที่ทริกเกอร์โดย Cloud Firestore
กำหนดทริกเกอร์ฟังก์ชัน
หากต้องการกําหนดCloud Firestoreทริกเกอร์ ให้ระบุเส้นทางเอกสารและประเภทเหตุการณ์
Node.js
import {
onDocumentWritten,
onDocumentCreated,
onDocumentUpdated,
onDocumentDeleted,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("my-collection/{docId}", (event) => {
/* ... */
});
Python
from firebase_functions.firestore_fn import (
on_document_created,
on_document_deleted,
on_document_updated,
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_created(document="users/{userId}")
def myfunction(event: Event[DocumentSnapshot]) -> None:
เส้นทางเอกสารสามารถอ้างอิงเอกสารที่เฉพาะเจาะจง หรือรูปแบบไวลด์การ์ดก็ได้
ระบุเอกสารเดียว
หากต้องการทริกเกอร์เหตุการณ์เมื่อมีการเปลี่ยนแปลงใดๆ ในเอกสารที่เฉพาะเจาะจง ให้ใช้ฟังก์ชันต่อไปนี้
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("users/marie", (event) => {
// Your code here
});
Python
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/marie")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
ระบุกลุ่มเอกสารโดยใช้ไวลด์การ์ด
หากต้องการแนบทริกเกอร์กับกลุ่มเอกสาร เช่น เอกสารใดก็ตามในคอลเล็กชันหนึ่ง ให้ใช้ {wildcard}
แทนรหัสเอกสาร
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("users/{userId}", (event) => {
// If we set `/users/marie` to {name: "Marie"} then
// event.params.userId == "marie"
// ... and ...
// event.data.after.data() == {name: "Marie"}
});
Python
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# If we set `/users/marie` to {name: "Marie"} then
event.params["userId"] == "marie" # True
# ... and ...
event.data.after.to_dict() == {"name": "Marie"} # True
ในตัวอย่างนี้ เมื่อมีการเปลี่ยนแปลงฟิลด์ใดก็ตามในเอกสารใดก็ตามใน users
ระบบจะจับคู่กับ
อักขระไวด์การ์ดที่ชื่อ userId
หากเอกสารใน users
มีคอลเล็กชันย่อยและมีการเปลี่ยนแปลงฟิลด์ในเอกสารของคอลเล็กชันย่อยเหล่านั้น ระบบจะไม่ทริกเกอร์ไวลด์การ์ด userId
ระบบจะดึงข้อมูลการจับคู่ไวลด์การ์ดจากเส้นทางของเอกสารและจัดเก็บไว้ใน event.params
คุณกำหนดสัญลักษณ์แทนได้มากเท่าที่ต้องการเพื่อแทนที่คอลเล็กชันหรือรหัสเอกสารที่ชัดเจน เช่น
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.myfunction = onDocumentWritten("users/{userId}/{messageCollectionId}/{messageId}", (event) => {
// If we set `/users/marie/incoming_messages/134` to {body: "Hello"} then
// event.params.userId == "marie";
// event.params.messageCollectionId == "incoming_messages";
// event.params.messageId == "134";
// ... and ...
// event.data.after.data() == {body: "Hello"}
});
Python
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/{userId}/{messageCollectionId}/{messageId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# If we set `/users/marie/incoming_messages/134` to {body: "Hello"} then
event.params["userId"] == "marie" # True
event.params["messageCollectionId"] == "incoming_messages" # True
event.params["messageId"] == "134" # True
# ... and ...
event.data.after.to_dict() == {"body": "Hello"}
ทริกเกอร์ต้องชี้ไปยังเอกสารเสมอ แม้ว่าคุณจะใช้ไวลด์การ์ดก็ตาม
เช่น users/{userId}/{messageCollectionId}
ไม่ถูกต้องเนื่องจาก {messageCollectionId}
เป็นคอลเล็กชัน แต่ users/{userId}/{messageCollectionId}/{messageId}
is
ใช้ได้เนื่องจาก {messageId}
จะชี้ไปยังเอกสารเสมอ
ทริกเกอร์เหตุการณ์
เรียกใช้ฟังก์ชันเมื่อมีการสร้างเอกสารใหม่
คุณทริกเกอร์ฟังก์ชันให้ทำงานได้ทุกเมื่อที่มีการสร้างเอกสารใหม่ในคอลเล็กชัน ฟังก์ชันตัวอย่างนี้จะทริกเกอร์ทุกครั้งที่มีการเพิ่มโปรไฟล์ผู้ใช้ใหม่
Node.js
import {
onDocumentCreated,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.createuser = onDocumentCreated("users/{userId}", (event) => {
// Get an object representing the document
// e.g. {'name': 'Marie', 'age': 66}
const snapshot = event.data;
if (!snapshot) {
console.log("No data associated with the event");
return;
}
const data = snapshot.data();
// access a particular field as you would any JS property
const name = data.name;
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentCreatedWithAuthContext
Python
from firebase_functions.firestore_fn import (
on_document_created,
Event,
DocumentSnapshot,
)
@on_document_created(document="users/{userId}")
def myfunction(event: Event[DocumentSnapshot]) -> None:
# Get a dictionary representing the document
# e.g. {'name': 'Marie', 'age': 66}
new_value = event.data.to_dict()
# Access a particular field as you would any dictionary
name = new_value["name"]
# Perform more operations ...
เรียกใช้ฟังก์ชันเมื่อมีการอัปเดตเอกสาร
นอกจากนี้ คุณยังทริกเกอร์ฟังก์ชันให้เริ่มทำงานเมื่อมีการอัปเดตเอกสารได้ด้วย ฟังก์ชันตัวอย่างนี้จะทำงานหากผู้ใช้เปลี่ยนโปรไฟล์
Node.js
import {
onDocumentUpdated,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.updateuser = onDocumentUpdated("users/{userId}", (event) => {
// Get an object representing the document
// e.g. {'name': 'Marie', 'age': 66}
const newValue = event.data.after.data();
// access a particular field as you would any JS property
const name = newValue.name;
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentUpdatedWithAuthContext
Python
from firebase_functions.firestore_fn import (
on_document_updated,
Event,
Change,
DocumentSnapshot,
)
@on_document_updated(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get a dictionary representing the document
# e.g. {'name': 'Marie', 'age': 66}
new_value = event.data.after.to_dict()
# Access a particular field as you would any dictionary
name = new_value["name"]
# Perform more operations ...
เรียกใช้ฟังก์ชันเมื่อมีการลบเอกสาร
นอกจากนี้ คุณยังเรียกใช้ฟังก์ชันเมื่อมีการลบเอกสารได้ด้วย ตัวอย่างนี้ ฟังก์ชันจะทำงานเมื่อผู้ใช้ลบโปรไฟล์ผู้ใช้ของตนเอง
Node.js
import {
onDocumentDeleted,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.deleteuser = onDocumentDeleted("users/{userId}", (event) => {
// Get an object representing the document
// e.g. {'name': 'Marie', 'age': 66}
const snap = event.data;
const data = snap.data();
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentDeletedWithAuthContext
Python
from firebase_functions.firestore_fn import (
on_document_deleted,
Event,
DocumentSnapshot,
)
@on_document_deleted(document="users/{userId}")
def myfunction(event: Event[DocumentSnapshot|None]) -> None:
# Perform more operations ...
ทริกเกอร์ฟังก์ชันสำหรับการเปลี่ยนแปลงทั้งหมดในเอกสาร
หากไม่สนใจประเภทของเหตุการณ์ที่เริ่มทำงาน คุณสามารถรอฟังการเปลี่ยนแปลงทั้งหมดในCloud Firestoreเอกสารโดยใช้ทริกเกอร์เหตุการณ์ "เขียนเอกสาร" ฟังก์ชันตัวอย่างนี้จะทำงานหากมีการสร้าง อัปเดต หรือลบผู้ใช้
Node.js
import {
onDocumentWritten,
Change,
FirestoreEvent
} from "firebase-functions/v2/firestore";
exports.modifyuser = onDocumentWritten("users/{userId}", (event) => {
// Get an object with the current document values.
// If the document does not exist, it was deleted
const document = event.data.after.data();
// Get an object with the previous document values
const previousValues = event.data.before.data();
// perform more operations ...
});
หากต้องการข้อมูลการตรวจสอบสิทธิ์เพิ่มเติม ให้ใช้ onDocumentWrittenWithAuthContext
Python
from firebase_functions.firestore_fn import (
on_document_written,
Event,
Change,
DocumentSnapshot,
)
@on_document_written(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot | None]]) -> None:
# Get an object with the current document values.
# If the document does not exist, it was deleted.
document = (event.data.after.to_dict()
if event.data.after is not None else None)
# Get an object with the previous document values.
# If the document does not exist, it was newly created.
previous_values = (event.data.before.to_dict()
if event.data.before is not None else None)
# Perform more operations ...
การอ่านและการเขียนข้อมูล
เมื่อฟังก์ชันทริกเกอร์ ระบบจะแสดงสแนปชอตของข้อมูลที่เกี่ยวข้องกับ เหตุการณ์ คุณสามารถใช้สแนปชอตนี้เพื่ออ่านหรือเขียนไปยังเอกสารที่ทริกเกอร์เหตุการณ์ หรือใช้ Firebase Admin SDK เพื่อเข้าถึงส่วนอื่นๆ ของฐานข้อมูล
ข้อมูลเหตุการณ์
ข้อมูลการอ่าน
เมื่อฟังก์ชันทริกเกอร์ คุณอาจต้องการรับข้อมูลจากเอกสารที่
อัปเดตแล้ว หรือรับข้อมูลก่อนการอัปเดต คุณดูข้อมูลก่อนหน้าได้โดยใช้
event.data.before
ซึ่งมีสแนปชอตของเอกสารก่อนการอัปเดต
ในทำนองเดียวกัน event.data.after
จะมีสถานะสแนปชอตของเอกสารหลังจากอัปเดต
Node.js
exports.updateuser2 = onDocumentUpdated("users/{userId}", (event) => {
// Get an object with the current document values.
// If the document does not exist, it was deleted
const newValues = event.data.after.data();
// Get an object with the previous document values
const previousValues = event.data.before.data();
});
Python
@on_document_updated(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get an object with the current document values.
new_value = event.data.after.to_dict()
# Get an object with the previous document values.
prev_value = event.data.before.to_dict()
คุณเข้าถึงพร็อพเพอร์ตี้ได้เช่นเดียวกับในออบเจ็กต์อื่นๆ หรือคุณจะใช้ฟังก์ชัน get
เพื่อเข้าถึงฟิลด์ที่เฉพาะเจาะจงก็ได้
Node.js
// Fetch data using standard accessors
const age = event.data.after.data().age;
const name = event.data.after.data()['name'];
// Fetch data using built in accessor
const experience = event.data.after.data.get('experience');
Python
# Get the value of a single document field.
age = event.data.after.get("age")
# Convert the document to a dictionary.
age = event.data.after.to_dict()["age"]
การเขียนข้อมูล
การเรียกใช้ฟังก์ชันแต่ละครั้งจะเชื่อมโยงกับเอกสารที่เฉพาะเจาะจงในฐานข้อมูล Cloud Firestore คุณเข้าถึงเอกสารนั้นได้ใน สแนปชอตที่ส่งคืนไปยังฟังก์ชัน
การอ้างอิงเอกสารมีเมธอดต่างๆ เช่น update()
, set()
และ remove()
เพื่อให้คุณแก้ไขเอกสารที่ทริกเกอร์ฟังก์ชันได้
Node.js
import { onDocumentUpdated } from "firebase-functions/v2/firestore";
exports.countnamechanges = onDocumentUpdated('users/{userId}', (event) => {
// Retrieve the current and previous value
const data = event.data.after.data();
const previousData = event.data.before.data();
// We'll only update if the name has changed.
// This is crucial to prevent infinite loops.
if (data.name == previousData.name) {
return null;
}
// Retrieve the current count of name changes
let count = data.name_change_count;
if (!count) {
count = 0;
}
// Then return a promise of a set operation to update the count
return data.after.ref.set({
name_change_count: count + 1
}, {merge: true});
});
Python
@on_document_updated(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get the current and previous document values.
new_value = event.data.after
prev_value = event.data.before
# We'll only update if the name has changed.
# This is crucial to prevent infinite loops.
if new_value.get("name") == prev_value.get("name"):
return
# Retrieve the current count of name changes
count = new_value.to_dict().get("name_change_count", 0)
# Update the count
new_value.reference.update({"name_change_count": count + 1})
เข้าถึงข้อมูลการตรวจสอบสิทธิ์ผู้ใช้
หากใช้เหตุการณ์ประเภทใดประเภทหนึ่งต่อไปนี้ คุณจะเข้าถึง ข้อมูลการตรวจสอบสิทธิ์ผู้ใช้เกี่ยวกับผู้ที่ทําให้เกิดเหตุการณ์ได้ ข้อมูลนี้เป็นข้อมูลเพิ่มเติมจากข้อมูลที่ส่งคืนในเหตุการณ์ฐาน
Node.js
onDocumentCreatedWithAuthContext
onDocumentWrittenWithAuthContext
onDocumentDeletedWithAuthContext
onDocumentUpdatedWithAuthContext
Python
on_document_created_with_auth_context
on_document_updated_with_auth_context
on_document_deleted_with_auth_context
on_document_written_with_auth_context
ดูข้อมูลเกี่ยวกับข้อมูลที่มีอยู่ในบริบทการตรวจสอบสิทธิ์ได้ที่ บริบทการตรวจสอบสิทธิ์ ตัวอย่างต่อไปนี้แสดงวิธีเรียกข้อมูลการตรวจสอบสิทธิ์
Node.js
import { onDocumentWrittenWithAuthContext } from "firebase-functions/v2/firestore"
exports.syncUser = onDocumentWrittenWithAuthContext("users/{userId}", (event) => {
const snapshot = event.data.after;
if (!snapshot) {
console.log("No data associated with the event");
return;
}
const data = snapshot.data();
// retrieve auth context from event
const { authType, authId } = event;
let verified = false;
if (authType === "system") {
// system-generated users are automatically verified
verified = true;
} else if (authType === "unknown" || authType === "unauthenticated") {
// admin users from a specific domain are verified
if (authId.endsWith("@example.com")) {
verified = true;
}
}
return data.after.ref.set({
created_by: authId,
verified,
}, {merge: true});
});
Python
@on_document_updated_with_auth_context(document="users/{userId}")
def myfunction(event: Event[Change[DocumentSnapshot]]) -> None:
# Get the current and previous document values.
new_value = event.data.after
prev_value = event.data.before
# Get the auth context from the event
user_auth_type = event.auth_type
user_auth_id = event.auth_id
ข้อมูลภายนอกเหตุการณ์ทริกเกอร์
Cloud Functions ดำเนินการในสภาพแวดล้อมที่เชื่อถือได้ โดยจะได้รับอนุญาตเป็นบัญชีบริการในโปรเจ็กต์ของคุณ และคุณสามารถอ่านและเขียนได้โดยใช้ Firebase Admin SDK
Node.js
const { initializeApp } = require('firebase-admin/app');
const { getFirestore, Timestamp, FieldValue } = require('firebase-admin/firestore');
initializeApp();
const db = getFirestore();
exports.writetofirestore = onDocumentWritten("some/doc", (event) => {
db.doc('some/otherdoc').set({ ... });
});
exports.writetofirestore = onDocumentWritten('users/{userId}', (event) => {
db.doc('some/otherdoc').set({
// Update otherdoc
});
});
Python
from firebase_admin import firestore, initialize_app
import google.cloud.firestore
initialize_app()
@on_document_written(document="some/doc")
def myfunction(event: Event[Change[DocumentSnapshot | None]]) -> None:
firestore_client: google.cloud.firestore.Client = firestore.client()
firestore_client.document("another/doc").set({
# ...
})
ข้อจำกัด
โปรดทราบข้อจำกัดต่อไปนี้สำหรับทริกเกอร์ Cloud Firestore สำหรับ Cloud Functions
- Cloud Functions (รุ่นที่ 1) ต้องมีฐานข้อมูล "(default)" ที่มีอยู่แล้วในโหมดเนทีฟของ Firestore แต่ไม่รองรับCloud Firestoreฐานข้อมูลที่มีชื่อหรือโหมด Datastore โปรดใช้ Cloud Functions (รุ่นที่ 2) เพื่อกำหนดค่าเหตุการณ์ในกรณีดังกล่าว
- ไม่มีการรับประกันการสั่งซื้อ การเปลี่ยนแปลงอย่างรวดเร็วอาจทริกเกอร์การเรียกใช้ฟังก์ชันในลำดับที่ไม่คาดคิด
- ระบบจะส่งเหตุการณ์อย่างน้อย 1 ครั้ง แต่เหตุการณ์เดียวอาจทำให้เกิดการเรียกใช้ฟังก์ชันหลายครั้ง หลีกเลี่ยงการใช้กลไกการทำงานแบบส่งครั้งเดียวที่แน่นอน และเขียนฟังก์ชันที่ไม่มีผลข้างเคียง
- Cloud Firestore ในโหมด Datastore ต้องใช้ Cloud Functions (รุ่นที่ 2) Cloud Functions (รุ่นที่ 1) ไม่รองรับโหมด Datastore
- ทริกเกอร์จะเชื่อมโยงกับฐานข้อมูลเดียว คุณสร้างทริกเกอร์ที่ตรงกับฐานข้อมูลหลายรายการไม่ได้
- การลบฐานข้อมูลจะไม่ลบทริกเกอร์สำหรับฐานข้อมูลนั้นโดยอัตโนมัติ ทริกเกอร์จะหยุดส่งกิจกรรม แต่จะยังคงอยู่จนกว่าคุณจะลบทริกเกอร์
- หากเหตุการณ์ที่ตรงกันมีขนาดเกินขนาดคำขอสูงสุด ระบบอาจไม่ส่งเหตุการณ์ไปยัง Cloud Functions (รุ่นที่ 1)
- ระบบจะบันทึกเหตุการณ์ที่นำส่งไม่ได้เนื่องจากขนาดคำขอในบันทึกของแพลตฟอร์ม และนับรวมในการใช้งานบันทึกของโปรเจ็กต์
- คุณดูบันทึกเหล่านี้ได้ในตัวสำรวจบันทึกโดยมีข้อความ "ส่งเหตุการณ์ไปยังฟังก์ชัน Cloud ไม่ได้เนื่องจากขนาดเกินขีดจำกัดสำหรับรุ่นที่ 1..." ของ
error
ระดับความรุนแรง คุณจะดูชื่อฟังก์ชันได้ในช่องfunctionName
หากฟิลด์receiveTimestamp
ยังอยู่ภายใน 1 ชั่วโมงนับจากนี้ คุณจะอนุมาน เนื้อหาเหตุการณ์จริงได้โดยอ่านเอกสารที่เป็นปัญหาพร้อม สแนปชอตก่อนและหลังการประทับเวลา - หากต้องการหลีกเลี่ยงการส่งอีเมลในลักษณะนี้ ให้ทำดังนี้
- ย้ายข้อมูลและอัปเกรดเป็น Cloud Functions (รุ่นที่ 2)
- ลดขนาดเอกสาร
- ลบ Cloud Functions ที่มีปัญหา
- คุณปิดการบันทึกได้โดยใช้การยกเว้น แต่โปรดทราบว่าระบบจะไม่ส่งเหตุการณ์ที่ละเมิด