Bu sayfada, basit bir Firebase hesabı oluşturmak için gerekli adımlar açıklanmaktadır. Projelerinize yükleyebileceğiniz veya başkalarıyla paylaşabileceğiniz uzantı. Bu basit bir Firebase uzantısı örneğiyle birlikte Realtime Database'inizi büyük harfe dönüştürür.
1. Ortamınızı kurma ve projeyi başlatma
Uzantı oluşturmaya başlamadan önce sağlamak bizim açımızdan önem taşıyor.
Node.js 16 veya daha yeni bir sürümü yükleyin. Düğümü yüklemenin bir yolu da nvm (veya nvm-windows) oluşturun.
Firebase CLI'ı yükleyin veya en son sürümüne güncelleyin. Alıcı:
npm
kullanarak yüklemek veya güncellemek için şu komutu çalıştırın:npm install -g firebase-tools
Şimdi yeni bir uzantı projesini başlatmak için Firebase CLI'ı kullanın:
Uzantınız için bir dizin oluşturun ve bu dizin içine
cd
ekleyin:mkdir rtdb-uppercase-messages && cd rtdb-uppercase-messages
Firebase CLI'ın
ext:dev:init
komutunu çalıştırın:firebase ext:dev:init
İstendiğinde, işlevler için dil olarak JavaScript'i seçin (ancak şunu unutmayın: (TypeScript'i kendi uzantınızı geliştirirken de kullanabilirsiniz) ve Bağımlılıkları yüklemeniz istendiğinde "evet" yanıtını verin. (Şunun için varsayılanları kabul edin: başka seçenekler de kullanabilirsiniz.) Bu komut, komut dosyası için iskelet kod tabanı oluşturmaya başlayabileceğiniz yeni bir uzantıdır.
2. Emülatörü kullanarak örnek uzantıyı deneyin
Firebase CLI, yeni uzantı dizinini başlattığında
basit örnek fonksiyonu ve şunu içeren bir integration-tests
dizini:
bir uzantıyı çalıştırmak için gereken dosyaları içerir.
Emülatörde örnek uzantıyı çalıştırmayı deneyin:
integration-tests
dizinine geçin:cd functions/integration-tests
Emülatörü bir demo projeyle başlatın:
firebase emulators:start --project=demo-test
Emülatör, uzantıyı önceden tanımlanmış bir "sahte" içine yükler proje (
demo-test
). Şu ana kadar uzantı, tek bir HTTP tetiklenmiş "hello world" değerini döndürengreetTheWorld
işlevi mesaj gönder: erişilebilir.Emülatör hâlâ çalışıyorken uzantının
greetTheWorld
komutunu deneyin işlevini başlatarak yazdırdığı URL'yi ziyaret edebilirsiniz.Tarayıcınızda "Hello World from selet-the-world" mesajı gösterilir.
Bu işlevin kaynak kodu, uzantının
functions
içindedir dizin. Kaynağı seçtiğiniz düzenleyicide veya IDE'de açın:functions/index.js
const functions = require("firebase-functions/v1"); exports.greetTheWorld = functions.https.onRequest((req, res) => { // Here we reference a user-provided parameter // (its value is provided by the user during installation) const consumerProvidedGreeting = process.env.GREETING; // And here we reference an auto-populated parameter // (its value is provided by Firebase after installation) const instanceId = process.env.EXT_INSTANCE_ID; const greeting = `${consumerProvidedGreeting} World from ${instanceId}`; res.send(greeting); });
Emülatör çalışırken, yaptığınız değişiklikleri otomatik olarak kolayca uygulayabilirsiniz. Belgenizde küçük bir değişiklik yapmayı deneyin:
greetTheWorld
işlevi:functions/index.js
const greeting = `${consumerProvidedGreeting} everyone, from ${instanceId}`;
Yaptığınız değişiklikleri kaydedin. Emülatör kodunuzu yeniden yükler. Şimdi, işlev URL'sini ziyaret ettiğinizde güncellenmiş karşılama mesajını görürsünüz.
3. uzantı.yaml dosyasına temel bilgileri ekleyin
Artık kurduğunuz bir geliştirme ortamı olduğuna ve uzantıları emülatörü kullanıyorsanız kendi uzantınızı yazmaya başlayabilirsiniz.
Mütevazı bir ilk adım olarak, önceden tanımlanmış uzantı meta verilerini
greet-the-world
yerine yazmak istediğiniz uzantı var. Bu meta veri
extension.yaml
dosyasında depolanır.
Düzenleyicinizde
extension.yaml
dosyasını açın ve dosyası oluşturun:name: rtdb-uppercase-messages version: 0.0.1 specVersion: v1beta # Firebase Extensions specification version; don't change # Friendly display name for your extension (~3-5 words) displayName: Convert messages to upper case # Brief description of the task your extension performs (~1 sentence) description: >- Converts messages in RTDB to upper case author: authorName: Your Name url: https://your-site.example.com license: Apache-2.0 # Required license # Public URL for the source code of your extension sourceUrl: https://github.com/your-name/your-repo
name
alanında kullanılan adlandırma kuralına dikkat edin: Resmi Firebase Uzantılar, birincil Firebase ürününü belirten bir ön ekle adlandırılır Önce uzantının ne üzerinde çalıştığı ve ardından uzantının yapıyor. Aynı kuralı kendi uzantılarınızda da kullanmalısınız.Uzantınızın adını değiştirdiğiniz için emülatör yapılandırması:
functions/integration-tests/firebase.json
içindegreet-the-world
değerini değiştirin alıcı:rtdb-uppercase-messages
.functions/integration-tests/extensions/greet-the-world.env
adlı cihazın adını şu şekilde değiştir:functions/integration-tests/extensions/rtdb-uppercase-messages.env
.
greet-the-world
uzantının bazı kalıntıları hâlâ var:
ama şimdilik bunlarda kalsın. Önümüzdeki birkaç gün içinde bu ayarları güncelleyeceksiniz
bölümlerini kontrol edin.
4. Cloud Functions işlevi yazma ve bunu uzantı kaynağı olarak tanımlama
Artık kod yazmaya başlayabilirsiniz. Bu adımda bir Cloud Uzantınızın temel görevini yerine getiren mesajları için Realtime Database'inizi izleyin ve bunları büyük harfe dönüştürün.
Uzantının işlevlerine ait kaynağı açın (uzantının
functions
dizini) kullanabilirsiniz. Değiştir şu içeriğe sahip:functions/index.js
import { database, logger } from "firebase-functions/v1"; const app = initializeApp(); // Listens for new messages added to /messages/{pushId}/original and creates an // uppercase version of the message to /messages/{pushId}/uppercase // for all databases in 'us-central1' export const makeuppercase = database .ref("/messages/{pushId}/uppercase") .onCreate(async (snapshot, context) => { // Grab the current value of what was written to the Realtime Database. const original = snapshot.val(); // Convert it to upper case. logger.log("Uppercasing", context.params.pushId, original); const uppercase = original.toUpperCase(); // Setting an "uppercase" sibling in the Realtime Database. const upperRef = snapshot.ref.parent.child("upper"); await upperRef.set(uppercase); });
Değiştirdiğiniz eski işlev, HTTP tetiklenmiş bir işlevdi. bir HTTP uç noktasına erişildiğinde çalıştırıldı. Yeni işlev, gerçek zamanlı veritabanı etkinlikleri: belirli bir yoldaki yeni öğeleri izler algılanırsa değerin büyük harfli sürümünü geri yazar ekler.
Bu arada, bu yeni dosyada ECMAScript modülü söz dizimi (
import
veexport
) içerir.require
Düğüm'de ES modüllerini kullanmak için:functions/package.json
içinde"type": "module"
belirtin:{ "name": "rtdb-uppercase-messages", "main": "index.js", "type": "module", … }
Uzantınızdaki her işlev,
extension.yaml
içinde tanımlanmalıdır dosyası olarak kaydedebilirsiniz. Örnek uzantı,greetTheWorld
öğesini uzantının tek Cloud Functions işlevi bunumakeuppercase
ile değiştirdiğinize göre beyanını güncellemeniz gerekiyor.extension.yaml
sayfasını açın ve birresources
alanı ekleyin:resources: - name: makeuppercase type: firebaseextensions.v1beta.function properties: eventTrigger: eventType: providers/google.firebase.database/eventTypes/ref.create # DATABASE_INSTANCE (project's default instance) is an auto-populated # parameter value. You can also specify an instance. resource: projects/_/instances/${DATABASE_INSTANCE}/refs/messages/{pushId}/original runtime: "nodejs18"
Uzantınız artık tetikleyici olarak Realtime Database kullandığından emülatör yapılandırmanızı güncelleyerek Cloud Functions emülatörü:
Emülatör hâlâ çalışıyorsa Ctrl-C tuşlarına basarak durdurun.
functions/integration-tests
dizininden aşağıdaki komutu çalıştırın komut:firebase init emulators
Sorulduğunda, varsayılan proje oluşturmayı atlayın, ardından İşlevleri seçin ve Veritabanı emülatörleri. Varsayılan bağlantı noktalarını kabul edin ve kuruluma izin verin aracını kullanın.
Emülatörü yeniden başlatın:
firebase emulators:start --project=demo-test
Güncellenen uzantınızı deneyin:
Yazdırılan emülatörün bağlantısını kullanarak Database emülatör kullanıcı arayüzünü açın. bazı bilgiler verelim.
Veritabanının kök düğümünü düzenleyin:
- Alan:
messages
- Tür:
json
- Değer:
{"11": {"original": "recipe"}}
Her şey doğru şekilde ayarlanmışsa veritabanı değişikliklerinizi kaydettiğinizde uzantının
makeuppercase
işlevi tetiklenmeli ve bir alt öğe eklemelidir"upper": "RECIPE"
içeriğini içeren mesaj 11'e kaydı. Bir göz atın emülatör kullanıcı arayüzünün günlüklerde ve veritabanı sekmelerinde beklenen sonuçlar.- Alan:
messages
düğümüne birkaç alt öğe daha eklemeyi deneyin ({"original":"any text"}
). Her yeni kayıt eklediğinizde uzantısı, büyük harfliuppercase
alanı eklemelidiroriginal
alanının içeriği.
Artık RTDB üzerinde çalışan eksiksiz ancak basit bir uzantınız var kullanır. Sonraki bölümlerde, bu uzantıyı sunuyor. Ardından uzantıyı ve son olarak uzantılarınızı Extensions Hub'da nasıl yayınlayacağınızı öğrenin.
5. API'leri ve rolleri tanımlama
Firebase, yüklü bir uzantının her bir örneğine proje ve verilerini kullanır. Her hesapta izin sayısını artırmak için tamamlanması zor olmalıdır. Bu nedenle, Uzantınızın gerektirdiği tüm IAM rollerini açıkça bildirin; Kullanıcılar yüklediğinde uzantınızı ayarladığınızda, Firebase bu rollerin verildiği bir hizmet hesabı oluşturur ve uzantıyı çalıştırmak için bunu kullanır.
Bir ürünün etkinliklerini tetiklemek için rolleri tanımlamanız gerekmez, ancak
etkileşimde bulunabilmek için bir rol beyan etmesi gerekir. Çünkü kullandığınız fonksiyon
Realtime Database'e yazma aşamasında olduğundan,
extension.yaml
adresine aşağıdaki beyan:
roles:
- role: firebasedatabase.admin
reason: Allows the extension to write to RTDB.
Benzer şekilde, uzantıların kullandığı Google API'lerini apis
içinde açıklarsınız.
girin. Kullanıcılar uzantınızı yüklediklerinde, uygulamanızı yüklemek isteyip istemedikleri sorulur.
projelerinde bu API'leri otomatik olarak etkinleştirmelerini isteyebilir. Bu genellikle yalnızca
Firebase dışı Google API'leri için gereklidir ve bu kılavuzda gerekli değildir.
6. Kullanıcı tarafından yapılandırılabilen parametreleri tanımlayın
Son iki adımda oluşturduğunuz işlev, belirli bir RTDB konumunu izledi seçeneğini tıklayın. Bazen, belirli bir konumu izlemek, Örneğin, uzantınızın istediğiniz bir veritabanı yapısında çalıştığında Yalnızca uzantınız için kullanın. Ancak çoğu zaman bu değerleri, uzantılarınızı bilgi edinmenizi sağlar. Böylece, kullanıcılar uzantınızı kullanarak Mevcut veritabanı kurulumu.
Uzantının yeni mesajlar için izlediği yolu kullanıcı tarafından yapılandırılabilir hale getirin:
extension.yaml
dosyasına birparams
bölümü ekleyin:- param: MESSAGE_PATH label: Message path description: >- What is the path at which the original text of a message can be found? type: string default: /messages/{pushId}/original required: true immutable: false
Bu, uzantıyı yüklemelerine yardımcı olur.
extension.yaml
dosyasındaykenmakeuppercase
dosyanıza geri dönün beyanını ekleyin veresource
alanını aşağıdaki şekilde değiştirin:resource: projects/_/instances/${DATABASE_INSTANCE}/refs/${param:MESSAGE_PATH}
${param:MESSAGE_PATH}
jetonu, az önce kullandığınız parametreye referanstır tanımlanmıştır. Uzantınız çalıştığında bu jetonun yerini kullanıcının söz konusu parametre için yapılandırdığı değere sahiptir. Bunun sonucundamakeuppercase
işlevi, kullanıcının belirttiği yolu dinler. Şunları yapabilirsiniz:extension.yaml
(vePOSTINSTALL.md
içinde bunun hakkında daha fazla bilgi bulabilirsiniz).Kullanıcı tanımlı parametrelere işlev kodunuzdan da erişebilirsiniz.
Son bölümde yazdığınız fonksiyonda, görebilirsiniz. Şuna referans verecek şekilde tetikleyici tanımını değiştirin: kullanıcı tanımlı bir değer kullanın:
functions/index.js
export const makeuppercase = database.ref(process.env.MESSAGE_PATH).onCreate
Firebase Extensions'da bu değişikliğin tamamen belgeler: Bir Cloud Functions işlevi uzantının parçası olarak dağıtıldığında
extension.yaml
dosyasındaki tetikleyici tanımını kullanır ve işlev tanımında belirtilen değer. Yine de iletişim kurmak için bu değerin nereden geldiğini kodunuzda belgeleyin.Çalışma zamanı olmayan bir kod değişikliği yapmak sizi hayal kırıklığına uğratabilir. ancak bundan çıkarmamız gereken önemli ders şu: kullanıcı tanımlı parametreyi kullanabilir ve bu parametreyi normal bir değer olarak kullanabilirsiniz. fonksiyonunun mantığında yer alır. Bu özelliği hatırlatmak için aşağıdaki günlüğü ekleyin Bu ifade, sizin için faydalı olan değere eriştiğinizi, kullanıcı tanımlı:
functions/index.js
export const makeuppercase = database.ref(process.env.MESSAGE_PATH).onCreate( async (snapshot, context) => { logger.log("Found new message at ", snapshot.ref); // Grab the current value of what was written to the Realtime Database. ...
Normalde, rastgele bir yapılandırma oluşturduklarında kullanıcılardan parametreler için değer bir uzantı yükleyebilirsiniz. Test ve geliştirme için emülatörü kullandığınızda ancak yükleme işlemini atlarsınız ve onun yerine kullanıcı tanımlı parametreler için
env
dosyası kullanın.functions/integration-tests/extensions/rtdb-uppercase-messages.env
uygulamasını aç veGREETING
tanımını aşağıdakiyle değiştirin:MESSAGE_PATH=/msgs/{pushId}/original
Yukarıdaki yolun, varsayılan yoldan ve daha önce tanımladığınız yol; Bunu kendinize ve tanımlamanızı öneririz.
Şimdi emülatörü yeniden başlatın ve veritabanı emülatörü kullanıcı arayüzünü tekrar ziyaret edin.
Yukarıda tanımladığınız yolu kullanarak veritabanının kök düğümünü düzenleyin:
- Alan:
msgs
- Tür:
json
- Değer:
{"11": {"original": "recipe"}}
Veritabanı değişikliklerinizi kaydettiğinizde uzantının
makeuppercase
fonksiyonunun önceden olduğu gibi tetiklenmesi gerekir, ancak şimdi kullanıcı tanımlı parametreyi içerebilir.- Alan:
7. Kullanıcı tanımlı mantık için etkinlik kancaları sağlama
Uzantı yazarı olarak, Firebase ürününün,
uzantının sağladığı mantık: Realtime Database'de yeni kayıtların oluşturulması
makeuppercase
işlevinizi tetikler. Uzantınız,
olan, uzantıyı yükleyen kullanıcılarla ilişki kurmaktır: uzantınız
kullanıcının tanımladığı tetikleyici mantığını kullanın.
Uzantı, eşzamanlı kancalar, eşzamansız kancalar veya her ikisini de sağlayabilir. Eşzamanlı kancalar, kullanıcılara tamamlanmalarını engelleyen görevleri yerine getirmelerini uzantının işlevlerinden biri. Bu, örneğin kullanıcılara bir uzantı çalışmadan önce özel ön işlemenin bir yolunu sunar.
Bu kılavuzda, uzantınıza eşzamansız bir kanca ekleyerek kullanıcıların, uzantınızdan sonra çalıştırılacak kendi işleme adımlarını tanımlamalarını sağlar. büyük harfli mesajı Realtime Database'e yazar. Eşzamansız kanca kullanımı Tetiklemek için Eventarc kullanıcı tanımlı işlevler. Uzantılar, yayınladıkları etkinlik türlerini bildirir ve Kullanıcılar uzantıyı yüklediklerinde emin olabilirsiniz. Kullanıcılar en az bir etkinlik seçerse Firebase, kullanıcıları Uzantının, yükleme işleminin bir parçası olarak Eventarc kanalı. Kullanıcı Sayısı o kanaldaki içerikleri izleyen kendi Cloud Functions işlevlerini dağıtabilir ve Uzantı yeni etkinlikler yayınladığında tetiklenir.
Eşzamansız kanca eklemek için şu adımları izleyin:
extension.yaml
dosyasına uzantının yayınladığı bir etkinlik türü:events: - type: test-publisher.rtdb-uppercase-messages.v1.complete description: >- Occurs when message uppercasing completes. The event subject will contain the RTDB URL of the uppercase message.
Etkinlik türleri evrensel olarak benzersiz olmalıdır; benzersiz olması için her zaman şu biçimi kullanarak etkinliklerinizi:
<publisher-id>.<extension-id>.<version>.<description>
( yayıncı kimliğini henüz doğrulamadıysanız, şimdilik yalnızcatest-publisher
kullanın.)makeuppercase
işlevinin sonuna, bir etkinliğinden birini seçin:functions/index.js
// Import the Eventarc library: import { initializeApp } from "firebase-admin/app"; import { getEventarc } from "firebase-admin/eventarc"; const app = initializeApp(); // In makeuppercase, after upperRef.set(uppercase), add: // Set eventChannel to a newly-initialized channel, or `undefined` if events // aren't enabled. const eventChannel = process.env.EVENTARC_CHANNEL && getEventarc().channel(process.env.EVENTARC_CHANNEL, { allowedEventTypes: process.env.EXT_SELECTED_EVENTS, }); // If events are enabled, publish a `complete` event to the configured // channel. eventChannel && eventChannel.publish({ type: "test-publisher.rtdb-uppercase-messages.v1.complete", subject: upperRef.toString(), data: { "original": original, "uppercase": uppercase, }, });
Bu örnek kod,
EVENTARC_CHANNEL
öğesinin ortam değişkeni yalnızca kullanıcı en az bir ortam değişkeni etkinleştirdiğinde etkinlik türü.EVENTARC_CHANNEL
tanımlanmamışsa kod tıklayın.Bir Eventarc etkinliğine daha fazla bilgi ekleyebilirsiniz. Yukarıdaki örnekte, bu etkinlikte,
subject
ve orijinal ile birlikte oluşturulan birdata
yükünü içeren büyük harfle yazılmış mesajlar. Etkinliği tetikleyen kullanıcı tanımlı işlevler uygun şekilde düzenlemelisiniz.Normalde,
EVENTARC_CHANNEL
veEXT_SELECTED_EVENTS
ortamı değişkenler, kullanıcının dönüşüm sırasında belirlediği seçeneklere göre teşekkür ederiz. Emülatörle test yapmak için bu değişkenleri manuel olarak tanımlayınrtdb-uppercase-messages.env
dosyasında:EVENTARC_CHANNEL=locations/us-central1/channels/firebase EXT_SELECTED_EVENTS=test-publisher.rtdb-uppercase-messages.v1.complete
Bu noktada, eşzamansız etkinlik eklemek için gereken adımları tamamladınız ilgi çekici hale getirin.
Az önce uyguladığınız bu yeni özelliği denemek için adımlarında, uzantıyı yükleyen bir kullanıcının rolünü üstlenin:
functions/integration-tests
dizininden yeni bir Firebase başlatın proje:firebase init functions
İstendiğinde, varsayılan proje oluşturmayı reddetmeyin, Cloud Functions'ın dilini ve gerekli bağımlılıkları yükleyin. Bu projesi, uzantınızın yüklü olduğu bir kullanıcı projesini temsil eder.
integration-tests/functions/index.js
dosyasını düzenleyin ve aşağıdaki kodu yapıştırın:import { logger } from "firebase-functions/v1"; import { onCustomEventPublished } from "firebase-functions/v2/eventarc"; import { initializeApp } from "firebase-admin/app"; import { getDatabase } from "firebase-admin/database"; const app = initializeApp(); export const extraemphasis = onCustomEventPublished( "test-publisher.rtdb-uppercase-messages.v1.complete", async (event) => { logger.info("Received makeuppercase completed event", event); const refUrl = event.subject; const ref = getDatabase().refFromURL(refUrl); const upper = (await ref.get()).val(); return ref.set(`${upper}!!!`); } );
Bu, kullanıcının yazabileceği bir işleme sonrası işlevi örneğidir. Burada bu durumda işlev, uzantıyı dinleyerek bir
complete
etkinliği yayınlar. tetiklendiğinde, yeni başlayanlara üç ünlem işareti ekler. mesajını alırsınız.Emülatörü yeniden başlatın. Emülatör, uzantının işlevlerini "user" ise işleme sonrası tanımlanmıştır.
Veritabanı emülatörü kullanıcı arayüzünü ziyaret edin ve yukarıda tanımladığınız yol:
- Alan:
msgs
- Tür:
json
- Değer:
{"11": {"original": "recipe"}}
Veritabanı değişikliklerinizi kaydettiğinizde uzantının
makeuppercase
işlevi ve kullanıcınınextraemphasis
işlevi sırayla tetiklenmelidir. Bunun sonucunda,upper
alanıRECIPE!!!
değerini alır.- Alan:
8. Yaşam döngüsü etkinlik işleyicileri ekleyin
Şu ana kadar yazdığınız uzantı, mesajları oluşturuldukları anda işler. Ama Kullanıcılarınız Gmail'i yüklediğinde bir ileti veritabanına sahipse ne olur? uzantısı nedir? Firebase Extensions, yaşam döngüsü olay kancaları adlı bir özelliğe sahiptir. Uzantınız yüklendiğinde, güncellendiğinde veya yeniden yapılandırıldı. Bu bölümde, yaşam döngüsü etkinlik kancalarını kullanarak projenin mevcut mesaj veritabanını kullanır. Bir kullanıcı uzantınızı yükler.
Firebase Extensions, yaşam döngüsü etkinlik işleyicilerinizi çalıştırmak için Cloud Tasks'ı kullanır. Siz Cloud Functions'ı kullanarak etkinlik işleyiciler tanımlayabilirsiniz. örneğinizin her zaman bir veya daha fazla dönüşüm elde etmek için desteklenen yaşam döngüsü olaylarından birine işleyiciyi bir Cloud Tasks sırasına ekler. Cloud Tasks bu durumda işleyiciyi eşzamansız olarak çalıştırabilir. Bir yaşam döngüsü etkinlik işleyicisi çalışırken Firebase konsolu kullanıcıya, uzantı örneğinin mevcut bir devam ediyor. Devam eden işlemleri bildirmek için işleyici işlevinize bağlıdır kullanıcıya göstermeden önce değerlendirmelisiniz.
Mevcut mesajları dolduran bir yaşam döngüsü etkinlik işleyicisi eklemek için şunu yapın: takip etmek için:
Görev sırası etkinlikleri tarafından tetiklenen yeni bir Cloud Functions işlevi tanımlayın:
functions/index.js
import { tasks } from "firebase-functions/v1"; import { getDatabase } from "firebase-admin/database"; import { getExtensions } from "firebase-admin/extensions"; import { getFunctions } from "firebase-admin/functions"; export const backfilldata = tasks.taskQueue().onDispatch(async () => { const batch = await getDatabase() .ref(process.env.MESSAGE_PATH) .parent.parent.orderByChild("upper") .limitToFirst(20) .get(); const promises = []; for (const key in batch.val()) { const msg = batch.child(key); if (msg.hasChild("original") && !msg.hasChild("upper")) { const upper = msg.child("original").val().toUpperCase(); promises.push(msg.child("upper").ref.set(upper)); } } await Promise.all(promises); if (promises.length > 0) { const queue = getFunctions().taskQueue( "backfilldata", process.env.EXT_INSTANCE_ID ); return queue.enqueue({}); } else { return getExtensions() .runtime() .setProcessingState("PROCESSING_COMPLETE", "Backfill complete."); } });
İşlevin kendini eklemeden önce yalnızca birkaç kayıt işlediğine dikkat edin. görev sırasına alınır. Bu strateji, proje yöneticilerinin bir Cloud'un zaman aşımı aralığında tamamlanamayan görevleri işleme işlev. Bir kullanıcının önceden kaç ileti gönderebileceğini ve veri tabanında tutmak yerine, uzantıyı yüklediklerinde uygun.
extension.yaml
dosyasında, dolgu işlevinizi uzantı olarak bildirintaskQueueTrigger
özelliğine sahip kaynak:resources: - name: makeuppercase ... - name: backfilldata type: firebaseextensions.v1beta.function description: >- Backfill existing messages with uppercase versions properties: runtime: "nodejs18" taskQueueTrigger: {}
Ardından, işlevi
onInstall
yaşam döngüsü için işleyici olarak tanımlayın etkinlik:lifecycleEvents: onInstall: function: backfilldata processingMessage: Uppercasing existing messages
Mevcut mesajların tekrar doldurulması güzel olsa da olmadan da çalışmaya devam etmesini sağlar. Bu gibi durumlarda makyaj sırasında yaşam döngüsü etkinlik işleyicileri isteğe bağlıdır.
Bunu yapmak için
extension.yaml
öğesine yeni bir parametre ekleyin:- param: DO_BACKFILL label: Backfill existing messages description: >- Generate uppercase versions of existing messages? type: select required: true options: - label: Yes value: true - label: No value: false
Ardından dolgu işlevinin başında,
DO_BACKFILL
parametresini kullanın ve ayarlanmazsa erkenden çıkın:functions/index.js
if (!process.env.DO_BACKFILL) { return getExtensions() .runtime() .setProcessingState("PROCESSING_COMPLETE", "Backfill skipped."); }
Yukarıdaki değişikliklerle birlikte, uzantı artık mevcut mesajları büyük harfle yazılır.
Bu noktaya kadar uzantınızı geliştirmek için uzantı emülatörünü kullandınız.
ve sürekli değişiklikleri test etmektir. Ancak uzantı emülatörü, yükleme işlemini atlar
işlemi gerçekleştirebilir. Bu nedenle, onInstall
etkinlik işleyicinizi test etmek için
bir uzantıya sahip olacaksınız. Ama bu iyi, çünkü yeni metin ve
eğitim uzantısı artık kodla tamamlandı.
9. Gerçek bir Firebase projesine dağıtın
Uzantılar emülatörü, bir uzantıda hızla yineleme yapmak için sırasında uzantıları kullanmayı deniyorsanız, bir noktada bunu gerçekten belirler.
Bunu yapmak için önce bazı hizmetlerin etkin olduğu yeni bir proje oluşturun:
- Firebase konsolunda yeni bir belirler.
- Projenizi yükseltme kullanmaya başlayın. Cloud Functions for Firebase için projenin faturalandırma hesabı olabilir; dolayısıyla, bir uzantı yükleyebilirsiniz.
- Yeni projenizde Real-time Database'i etkinleştirin.
- Uzantınızın mevcut verileri doldurma özelliğini test etmek için
kurulumu sırasında birkaç örnek veriyi gerçek zamanlı veritabanı örneğinize aktarın:
- Bazı çekirdek RTDB verileri indirin.
- Firebase konsolunun Real-time Database sayfasında (diğer) > JSON'u içe aktarın ve az önce indirdiğiniz dosyayı seçin.
Dolgu işlevini
orderByChild
yöntemini kullanacak şekilde etkinleştirmek için şunları yapılandırın: aşağıdaki veritabanını kullanarakupper
değerindeki iletileri dizine ekleyin:{ "rules": { ".read": false, ".write": false, "messages": { ".indexOn": "upper" } } }
Şimdi, uzantınızı yerel kaynaktan yeni projeye yükleyin:
Firebase projeniz için yeni bir dizin oluşturun:
mkdir ~/extensions-live-test && cd ~/extensions-live-test
Çalışma dizininde bir Firebase projesini başlatın:
firebase init database
İstendiğinde yeni oluşturduğunuz projeyi seçin.
Uzantıyı yerel Firebase projenize yükleyin:
firebase ext:install /path/to/rtdb-uppercase-messages
Burada, aşağıdaki gibi bir şema yüklemek için kullanıcı deneyiminin Firebase CLI aracını kullanabilirsiniz. "Evet"i seçtiğinizden emin olun yapılandırma aracı mevcut veritabanınızı doldurmak isteyip istemediğinizi sorar.
Yapılandırma seçeneklerini belirlemenizin ardından Firebase CLI, verilerinizi yapılandırmasını
extensions
dizininize ekleyin ve uzantı kaynağını kaydedin konumufirebase.json
dosyasıdır. Bu iki kayıt, toplu olarak uzantılar manifesti olarak adlandırılır. Kullanıcılar, verilerini kaydetmek için manifest'i uzantıları yapılandırmanızı ve farklı projelere dağıtmanızı sağlar.Uzantı yapılandırmanızı yayındaki projenize dağıtın:
firebase deploy --only extensions
Her şey yolunda giderse Firebase CLI, uzantınızı projenize yüklemelidir yükleyin. Yükleme tamamlandıktan sonra dolgu görevi çalıştırılır ve birkaç dakika içinde veritabanınız büyük harfli iletilerle güncellenecektir. Birkaç tane ekle yeni düğümler ekleyin ve uzantının da çalıştığından emin olun. yeni mesajlar için e-posta gönderin.
10. Belge yazma
Uzantınızı kullanıcılarla paylaşmadan önce, yeterli düzeyde uzantı sağladığınızdan emin olun. gerekli belgeleri hazırlar.
Uzantı projesini başlattığınızda Firebase CLI, saplama oluşturdu ve gerekli minimum belgelerin tam sürümleri. Bu dosyaları doğru şekilde güncelleyin ve oluşturduğunuz uzantıyı yansıtmalıdır.
uzantı.yaml
Bu uzantıyı geliştirdiğiniz için dosyayı zaten güncelliyorsunuz. şu anda başka güncelleme yapmanız gerekmiyor.
Bununla birlikte, bu belgede yer alan belgelerin önemini de göz ardı etmeyin.
dosyası olarak kaydedebilirsiniz. Uzantının önemli tanımlayıcı bilgilerine ek olarak,
açıklama, yazar, resmi depo konumu—extension.yaml
dosyası, her kaynak ve kullanıcı tarafından yapılandırılabilen her kaynak için kullanıcılara yönelik belgeler içerir.
parametresinden sonra bir değer girin. Bu bilgiler Firebase konsolunda kullanıcılara gösterilir.
Extensions Hub ve Firebase CLI arasında geçiş yapın.
PREINSTALL.md
Bu dosyada, kullanıcıların uygulamanızı yüklemeden önce ihtiyaç duydukları bilgileri uzantı: uzantının ne yaptığını kısaca açıklayın, ön koşulları açıklayın, ve kullanıcıya bu tür yüklemelerin faturalandırmayla ilgili sonuçları hakkında bilgi vermek uzantısına sahip olur. Ek bilgiler içeren bir web siteniz varsa bu da iyi bir yer hâline getiriyorsunuz.
Bu dosyanın metni, kullanıcıya Extensions Hub'da ve
firebase ext:info
komutudur.
Aşağıda bir ÖN YÜKLEME dosyası örneği verilmiştir:
Use this extension to automatically convert strings to upper case when added to
a specified Realtime Database path.
This extension expects a database layout like the following example:
"messages": {
MESSAGE_ID: {
"original": MESSAGE_TEXT
},
MESSAGE_ID: {
"original": MESSAGE_TEXT
},
}
When you create new string records, this extension creates a new sibling record
with upper-cased text:
MESSAGE_ID: {
"original": MESSAGE_TEXT,
"upper": UPPERCASE_MESSAGE_TEXT,
}
#### Additional setup
Before installing this extension, make sure that you've
[set up Realtime Database](https://firebase.google.com/docs/database/quickstart)
in your Firebase project.
#### Billing
To install an extension, your project must be on the
[Blaze (pay as you go) plan](https://firebase.google.com/pricing).
- This extension uses other Firebase and Google Cloud Platform services, which
have associated charges if you exceed the service's no-cost tier:
- Realtime Database
- Cloud Functions (Node.js 10+ runtime)
[See FAQs](https://firebase.google.com/support/faq#extensions-pricing)
- If you enable events,
[Eventarc fees apply](https://cloud.google.com/eventarc/pricing).
POSTINSTALL.md
Bu dosya, başarılı bir şekilde geçiş yapan kullanıcılar için yararlı bilgiler içerir yükleyin: Örneğin, izleme kurulumu adımları, yeni bir ve bu şekilde devam eder.
POSTINSTALL.md içeriği, komut yüklendikten sonra Firebase konsolunda uzantısı yapılandırılıp yüklendi. Bu dosyası oluşturur. Bu dosyalar, yapılandırılmış değerlerle değiştirilir.
Aşağıda, eğitim uzantısı için örnek bir yükleme sonrası dosya örneği verilmiştir:
### See it in action
You can test out this extension right away!
1. Go to your
[Realtime Database dashboard](https://console.firebase.google.com/project/${param:PROJECT_ID}/database/${param:PROJECT_ID}/data) in the Firebase console.
1. Add a message string to a path that matches the pattern `${param:MESSAGE_PATH}`.
1. In a few seconds, you'll see a sibling node named `upper` that contains the
message in upper case.
### Using the extension
We recommend adding data by pushing -- for example,
`firebase.database().ref().push()` -- because pushing assigns an automatically
generated ID to the node in the database. During retrieval, these nodes are
guaranteed to be ordered by the time they were added. Learn more about reading
and writing data for your platform (iOS, Android, or Web) in the
[Realtime Database documentation](https://firebase.google.com/docs/database/).
### Monitoring
As a best practice, you can
[monitor the activity](https://firebase.google.com/docs/extensions/manage-installed-extensions#monitor)
of your installed extension, including checks on its health, usage, and logs.
CHANGELOG.md
Bir uzantının sürümleri arasında yaptığınız değişiklikleri de belgelemelisiniz.
CHANGELOG.md
dosyasında bulabilirsiniz.
Örnek uzantı daha önce hiç yayınlanmadığı için, değişiklik günlüğü tek bir giriş var:
## Version 0.0.1
Initial release of the _Convert messages to upper case_ extension.
README.md
Çoğu uzantı, sayfayı ziyaret eden kullanıcıların yararına bir benioku dosyası da sağlar. uzantının deposudur. bu dosyayı elle yazabilir ya da beni oku oluşturabilirsin komutunu kullanabilirsiniz.
Bu kılavuzu kullanmak için, Benioku dosyası yazma adımını atlayın.
Ek belgeler
Yukarıda ele alınan dokümanlar, ihtiyacınız olan minimum belge grubudur sağlar. Birçok uzantı, kullanıcıların nasıl kullanacağınızı göstereceğim. Böyle bir durumda, dokümanları barındırın ve kullanıcıları yönlendirebileceğiniz bir yerde barındırın.
Bu kılavuzun amacı gereği, daha kapsamlı belgeler yazmayı atlayın.
11. Uzantı Merkezi'nde yayınla
Uzantınız artık kod tamamlandığına ve belgelendiğine göre, tüm dünyayla paylaşabilirsiniz. Ancak, bu yalnızca bir eğitim olduğundan yardımcı olamam. Yüklediğiniz öğeleri kullanarak kendi uzantınızı yazmaya başlayın Firebase Extensions yayıncı belgelerinin diğer kısımlarında öğrendik. ve Firebase tarafından yazılan resmi uzantıların kaynağını inceleyerek.
Çalışmanızı Extensions Hub'da yayınlamaya hazır olduğunuzda nasıl yapacağınız aşağıda açıklanmıştır şunları sağlar:
- İlk uzantınızı yayınlıyorsanız uzantı yayıncısı olarak kaydolmalıdır. Zaman bir uzantı yayıncısı olarak kaydediyorsanız Kullanıcıların sizi kısa süre içinde uzantılarınızın yazarı olarak tanımlamasını sağlar.
Uzantınızın kaynak kodunu herkes tarafından doğrulanabilecek bir konumda barındırın. Zaman kodunuzun doğrulanabilir bir kaynaktan alındığında, Firebase sizin uzantısını doğrudan bu yerden indirin. Bu sayede projede uzantınızın şu anda yayınlanan sürümünü yayınlamanıza yardımcı olur ve kendi projelerine yükledikleri kodu incelemelerini sağlayabilir.
Şu anda bunun için uzantınızın herkese açık bir GitHub'da kullanıma sunulması gerekiyor depodur.
firebase ext:dev:upload
kullanarak uzantınızı Uzantı Merkezi'ne yükleyin komutuna dokunun.Firebase konsolunda yayıncı kontrol panelinize gidin ve uzantıyı bulun yükleyin ve "Uzantılar Merkezi'nde Yayınla"yı tıklayın. Bu durumda birkaç gün sürebilir. Onaylandığı takdirde uzantı, Extensions Hub'da yayınlanacak. Reddedilirse size bir nedeni açıklayan mesaj Böylece bildirilen sorunları giderebilir tekrar incelemeye gönderin.