Firebase is back at Google I/O on May 10! Register now

Özel olay tetikleyicileri oluşturun ve yönetin

Koleksiyonlar ile düzeninizi koruyun İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.

Cloud Functions (2. nesil) ile, özel olaylara yanıt olarak işlevleri tetikleyebilirsiniz. Bunlar, Firebase SDK for Cloud Functions tarafından yerel olarak desteklenen Firebase olaylarının aksine, özel veya ek olay sağlayıcıları tarafından sağlanan olaylardır. Özel olay tetikleyicileri aracılığıyla, uygulamanız Firebase Uzantıları tarafından sağlanan olaylara yanıt verebilir veya kendi özel olaylarınızı yayınlayabilir ve bunlara yanıt olarak işlevleri tetikleyebilirsiniz.

Tüm özel olaylar, CloudEvents JSON olay formatına uygundur ve Eventarc'ta yayınlanır. Eventarc kullanım ücretleri geçerlidir.

İşlevleri özel etkinliklerle tetikleyin

Bu temel akışı uygulayarak özel etkinlikler yayınlayabilir (veya Firebase uzantılarından etkinlikler edinebilir) ve bu olaylara yanıt olarak işlevleri tetikleyebilirsiniz:

  1. İstenen olayları bir Eventarc kanalında yayınlayın veya kurduğunuz bir uzantı tarafından sağlanan mevcut olayları belirleyin.
  2. İşlev kodunuzda, bir onCustomEventPublished işleyicisi ile Eventarc kanalındaki olaylara abone olun.
  3. İşlevde, CloudEvent nesnesinde döndürülen yükü ayrıştırın ve uygulamanızın gerektirdiği özel mantığı gerçekleştirin.

Örneğin, bir oyun uygulaması, kullanıcılara ilk on rakibin lider tablosuna girerken veya bu tablodan çıkarken bildirim göndermek isteyebilir. Bu uygulama, lider panosu olaylarını varsayılan kanalda yayınlayabilir ve ardından olayı, kullanıcılara hedefli anında iletme bildirimleri gönderen bir işlevde işleyebilir.

Başka bir örnekte, uygulamaların büyük resimleri işlemesine yardımcı olmak için tasarlanmış bir uzantı, resmin yeniden boyutlandırılması tamamlandığında bir olay yayınlayabilir. Bu uzantının yüklü olduğu uygulamalar, uygulamadaki bağlantıları görüntünün yeniden boyutlandırılmış sürümlerine işaret edecek şekilde güncelleyerek tamamlama olayını işleyebilir.

Bir kanalda etkinlik yayınlayın

Eventarc olayları kanallarda yayınlanır. Kanallar, ilgili etkinlikleri gruplamanın ve erişim izinlerini yönetmenin bir yoludur. Bir uzantı yüklediğinizde veya özel olayları tüketen bir işlev dağıttığınızda Firebase, us-central1 bölgesinde otomatik olarak firebase adlı bir varsayılan kanal oluşturur. Firebase Admin SDK, kanallara yayınlamak için bir eventarc alt paketi sağlar.

Varsayılan kanalı kullanarak güvenilir bir sunucudan (veya başka bir işlevden) bir etkinlik yayınlamak için:

import {getEventarc} from 'firebase-admin/eventarc';

getEventarc().channel().publish({
    type: 'achieved-leaderboard',
    subject: 'Welcome to the top 10',
    data: {
      message: 'You have achieved the nth position in our leaderboard!  To see . . .'
    }
});

Firebase, varsayılan kanalı otomatik olarak oluşturmaya ek olarak, olayın kaynağını belirten EVENTARC_CLOUD_EVENT_SOURCE ortam değişkenini ayarlar. Olayları Firebase için Cloud Functions'ın dışında yayınlıyorsanız source alanını olay yükünüze açıkça eklemeniz gerekir.

Olayları onCustomEventPublished ile yönetin

onCustomEventPublished işleyicisi ile uzantı olayları dahil tüm özel olayları işleyebilirsiniz. İlk olarak, bu işleyiciyi Eventarc SDK'dan, özel mantığınız için Node.js için Firebase Admin SDK'sı ve hataları işlemek için logger SDK'sı ile içe aktarın:

const {onCustomEventPublished} = require("firebase-functions/v2/eventarc");
const logger = require("firebase-functions/logger");
const {initializeApp} = require("firebase-admin/app");
const {getFirestore} = require("firebase-admin/firestore");

İşlev kodunuzda, onimageresized örnek işlev için gösterildiği gibi olay adını iletin:

exports.onimageresized = onCustomEventPublished(
    "firebase.extensions.storage-resize-images.v1.complete",
    (event) => {
      logger.info("Received image resize completed event", event);
      // For example, write resized image details into Firestore.
      return getFirestore()
          .collection("images")
          .doc(event.subject.replace("/", "_")) // original file path
          .set(event.data); // resized images paths and sizes
    });

Her belirli uzantı için, olay nesnesinde döndürülen yük, uygulama akışınız için özel mantık gerçekleştirmek üzere kullanabileceğiniz veriler sağlar. Bu durumda işlev, yeniden boyutlandırılan görüntü hakkındaki meta verileri Cloud Firestore'daki bir koleksiyona kopyalamak, dosya adını olay tarafından sağlanan subject almak ve olay tarafından sağlanan data meta verileri kaydetmek için Admin SDK'yı kullanır.

Varsayılan olmayan kanallarda etkinlikleri yayınlayın ve yönetin

Özel kanallar, özel izin ihtiyaçlarınız veya diğer gereksinimleriniz olduğu ve tüm etkinlikler için aynı düzeyde görünürlük ve erişim istemediğiniz durumlarda yararlı olabilir. Google Cloud konsolunu kullanarak kendi kanallarınızı oluşturabilirsiniz. Etkinlikleri yayınlamak ve etkinliklere abone olmak aynı kanaldan yapılmalıdır.

Özel bir etkinliğin varsayılan olmayan bir kanalda yayınlandığı durumlarda, kanalı işlev kodunuzda belirtmeniz gerekir. Örneğin, us-west1 konumu için varsayılan olmayan bir kanalda yayınlanan olayları işlemek istiyorsanız, kanalı aşağıda gösterildiği gibi belirtmeniz gerekir:

import { onCustomEventPublished } from "firebase-functions/v2/eventarc";

export const func = onCustomEventPublished(
    {
      eventType: "firebase.extensions.storage-resize-images.v1.complete",
      channel: "locations/us-west1/channels/firebase",
      region: "us-west1",
    },
    (event) => { ... });