Firebase 실시간 데이터베이스 변경사항 수신 대기

이 함수는 Firebase 실시간 데이터베이스 참조 변경으로 트리거됩니다. 변경 소스, 데이터, 델타가 출력됩니다.

코드 샘플

Go

Cloud Run Functions에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.


// Package rtdb contains a Cloud Function triggered by a Firebase Realtime Database
// event.
package rtdb

import (
	"context"
	"fmt"
	"log"

	"github.com/GoogleCloudPlatform/functions-framework-go/functions"
	"github.com/cloudevents/sdk-go/v2/event"
	"github.com/googleapis/google-cloudevents-go/firebase/databasedata"
	"google.golang.org/protobuf/encoding/protojson"
)

func init() {
	functions.CloudEvent("HelloRTDB", HelloRTDB)
}

// HelloRTDB handles changes to a Firebase RTDB.
func HelloRTDB(ctx context.Context, e event.Event) error {
	unmarshalOptions := protojson.UnmarshalOptions{DiscardUnknown: true}

	var data databasedata.ReferenceEventData
	if err := unmarshalOptions.Unmarshal(e.Data(), &data); err != nil {
		return fmt.Errorf("Unmarshal: %w", err)
	}
	log.Printf("Function triggered by change to: %v", e.Source())
	log.Printf("Data: %+v", data.GetData())
	log.Printf("Delta: %+v", data.GetDelta())
	return nil
}

Java

Cloud Run Functions에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import com.google.cloud.functions.CloudEventsFunction;
import com.google.events.firebase.database.v1.ReferenceEventData;
import com.google.protobuf.util.JsonFormat;
import io.cloudevents.CloudEvent;
import java.nio.charset.StandardCharsets;
import java.util.logging.Logger;

public class FirebaseRtdb implements CloudEventsFunction {
  private static final Logger logger = Logger.getLogger(FirebaseRtdb.class.getName());

  @Override
  public void accept(CloudEvent event) throws Exception {
    if (event.getData() == null) {
      logger.info("No data found in event");
      return;
    }

    ReferenceEventData.Builder builder = ReferenceEventData.newBuilder();
    JsonFormat.Parser jsonParser = JsonFormat.parser().ignoringUnknownFields();
    jsonParser.merge(new String(event.getData().toBytes(), StandardCharsets.UTF_8), builder);
    ReferenceEventData data = builder.build();

    logger.info("Function triggered by change to: " + event.getSource().toString());

    if (data.hasDelta()) {
      logger.info("Delta: " + data.getDelta().toString());
    }

    if (data.hasData()) {
      logger.info("Data: " + data.getData().toString());
    }
  }
}

Node.js

Cloud Run Functions에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

/**
 * Cloud Event Function triggered by a change to a Firebase RTDB reference.
 *
 * @param {!Object} event The Cloud Functions event.
 */
const functions = require('@google-cloud/functions-framework');

functions.cloudEvent('helloRTDB', event => {
  console.log(`Function triggered by change to: ${event.source}`);
  console.log('Data:');
  console.log(JSON.stringify(event.data.data, null, 2));
  console.log('Delta:');
  console.log(JSON.stringify(event.data.delta, null, 2));
});

Python

Cloud Run Functions에 인증하려면 애플리케이션 기본 사용자 인증 정보를 설정합니다. 자세한 내용은 로컬 개발 환경의 인증 설정을 참조하세요.

import json

from cloudevents.http import CloudEvent
import functions_framework


@functions_framework.cloud_event
def hello_rtdb(event: CloudEvent) -> None:
    """Triggered by a change to a Firebase RTDB reference.
    Args:
        event: Cloud Event triggered by change to Firebase Real Time Database.
    """
    print(f"Function triggered by change to: {event['source']}")
    print("Data:")
    print(json.dumps(event.data["data"]))
    print("Delta:")
    print(json.dumps(event.data["delta"]))

다음 단계

다른 Google Cloud 제품의 코드 샘플을 검색하고 필터링하려면 Google Cloud 샘플 브라우저를 참조하세요.