Google is committed to advancing racial equity for Black communities. See how.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Firebase SDK for Cloud Functions yükseltme kılavuzu: beta sürüm 1.0 veya üzeri

Firebase SDK for Cloud Functions'ın 1.0.0 sürümü API'de bazı önemli değişiklikler getirdi. event.data biçiminin data ve context parametreleriyle değiştirilmesiyle yapılan birincil değişiklik, tüm eşzamansız (HTTP olmayan) işlevleri etkiler. Güncellenmiş SDK, bir birim test arkadaşı SDK olan firebase-functions-test ile de kullanılabilir. Daha fazla bilgi için bkz. Birim Test İşlevleri .

Cloud Functions için Firebase SDK'sının 2.0.0 sürümü , Firestore tarafından tetiklenen işlevlerde zaman damgaları için bir sonlandırma değişikliği getirdi.

SDK'ları en son sürüme güncellemek için, işlevler klasöründe aşağıdakileri çalıştırın:

 npm install firebase-functions@latest --save
npm install firebase-admin@latest --save-exact
 

Ayrıca Firebase CLI'yı en son sürüme güncellemelisiniz:

 npm install -g firebase-tools
 

Tüm eşzamansız (HTTP olmayan) işlevleri etkileyen SDK değişiklikleri

SDK tetikleyici türüne göre değişir

İşlev öykünmesindeki değişiklikler

Tüm arka plan (HTTP olmayan) işlevlerini etkileyen SDK değişiklikleri

Olay parametresi verilere ve bağlama ayrılmıştır

Bulut İşlevleri için Firebase SDK'sının v 1.0 sürümünden itibaren, eşzamansız işlevler için event parametresi kullanılmıyor. İki yeni parametre ile değiştirildi: data ve context .

data parametresi, işlevi tetikleyen verileri temsil eder. data parametresinin alanları tetikleyici tipine göre belirlenir ve buna göre değişir. Örneğin, Gerçek Zamanlı Veritabanı için data parametresi bir DataSnapshot . data parametresi hakkında daha fazla bilgi için tetikleyici türüne göre değişikliklere bakın.

context parametresi işlevin yürütülmesi hakkında bilgi sağlar. Asenkron fonksiyonlar türleri arasında Özdeş, context alanları içeren eventId , timestamp , eventType , resource ve params . Ayrıca, Gerçek Zamanlı Veritabanı işlevleri, işlevi tetikleyen kullanıcı için kimlik doğrulama bilgileri sağlar. Gerçek Zamanlı Veritabanı yazımı tarafından tetiklenen bir işlevde tanımlanan bağlam alanlarına bir örnek:

 exports.dbWrite = functions.database.ref('/path/with/{id}').onWrite((data, context) => {
  const authVar = context.auth; // Auth information for the user.
  const authType = context.authType; // Permissions level for the user.
  const pathId = context.params.id; // The ID in the Path.
  const eventId = context.eventId; // A unique event ID.
  const timestamp = context.timestamp; // The timestamp at which the event happened.
  const eventType = context.eventType; // The type of the event that triggered this function.
  const resource = context.resource; // The resource which triggered the event.
  // ...
});
 

firebase-admin için yeni başlatma sözdizimi

firebase-admin artık Bulut İşlevleri çalışma zamanında herhangi bir parametre olmadan başlatılır.

Önce (<= v0.9.1)

 const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
 

Şimdi (> = v1.0.0)

 const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
 

Başlatma sırasında artık functions.config().firebase . Sürüm 1.0.0'da yapılandırmaya nasıl erişileceğiyle ilgili ayrıntılar için aşağıdaki bölüme bakın.

functions.config().firebase kaldırıldı

functions.config().firebase kaldırıldı. Firebase projenizden yapılandırma değerlerine erişmek istiyorsanız, bunun yerine process.env.FIREBASE_CONFIG kullanın:

 let firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG);
/* {  databaseURL: 'https://databaseName.firebaseio.com',
       storageBucket: 'projectId.appspot.com',
       projectId: 'projectId' }
*/
 

SDK tetikleyici türüne göre değişir

Desteklenen birçok işlev tetikleyicisi için v 1.0, veri alanları ve yöntemleri için adlandırmada değişiklikler getirdi. Bu bölüm değişiklikleri tetikleyici türüne göre listeler.

Gerçek Zamanlı Veritabanı

Etkinlik verileri artık bir DataSnapshot

Önceki sürümlerde event.data bir DeltaSnapshot ; v 1.0'dan itibaren bir DataSnapshot .

onWrite ve onUpdate olayları için data parametresinden before ve after alanlar bulunur. Bunların her biri, admin.database.DataSnapshot ile aynı yöntemlere sahip bir DataSnapshot . Örneğin:

Önce (<= v0.9.1)

 exports.dbWrite = functions.database.ref('/path').onWrite((event) => {
  const beforeData = event.data.previous.val(); // data before the write
  const afterData = event.data.val(); // data after the write
});
 

Şimdi (> = v1.0.0)

 exports.dbWrite = functions.database.ref('/path').onWrite((change, context) => {
  const beforeData = change.before.val(); // data before the write
  const afterData = change.after.val(); // data after the write
});
 

onCreate için data parametresi, yeni eklenen verileri temsil eden bir DataSnapshot :

Önce (<= v0.9.1)

 exports.dbCreate = functions.database.ref('/path').onCreate((event) => {
  const createdData = event.data.val(); // data that was created
});
 

Şimdi (> = v1.0.0)

 exports.dbCreate = functions.database.ref('/path').onCreate((snap, context) => {
  const createdData = snap.val(); // data that was created
});
 

onDelete için data parametresi, yeni silinen verileri temsil eden bir DataSnapshot :

Önce (<= v0.9.1)

 exports.dbDelete = functions.database.ref('/path').onDelete((event) => {
  const deletedData = event.data.previous.val(); // data that was deleted
});

 

Şimdi (> = v1.0.0)

 exports.dbDelete = functions.database.ref('/path').onDelete((snap, context) => {
  const deletedData = snap.val(); // data that was deleted
});
 

Kullanıcı kimlik bilgileri için yeni özellikler

EventContext.auth V1.0.0, bir işlevi tetikleyen kullanıcı için izinler de dahil olmak üzere kullanıcı bilgilerine erişmek için iki yeni özellik sundu.

  • EventContext.auth . uid ve kimliği doğrulanmış kullanıcının kimlik doğrulama jetonu gibi bilgileri içerir.
  • EventContext.authType . Örneğin, kullanıcının yönetici kullanıcı olup olmadığını algılamanıza izin veren izin düzeyleri içerir.

Belgelenmemiş event.auth alanlarını kullanan geliştiriciler, bu yeni özellikleri kullanmak için ilgili kodları güncellemelidir.

adminRef ref değiştirildi

.adminRef başvurusu , şimdi yönetici ayrıcalıklarıyla yetkilendirilen .ref başvurusu lehine kaldırıldı. Değişikliği tetikleyen kullanıcı olarak yetkilendirilen değişikliğe referans olarak .ref kullanmanın önceki yolu artık desteklenmemektedir.

Önce (<= v0.9.1)

 exports.dbCreate = functions.database.ref('/path/{uid}').onCreate((event) => {
  const parentRef = event.data.adminRef.parent; // The Database reference to the parent authorized with admin privileges.

  const parentRefAsUser = event.data.ref.parent; // The Database reference to the parent authorized as the user which triggered the change.
});
 

Şimdi (> = v1.0.0)

 exports.dbCreate = functions.database.ref('/path/{uid}').onCreate((snap, context) => {
  const parentRef = snap.ref.parent; // The Database reference to the parent authorized with admin privileges
});
 

Yönetici SDK'sını kullanarak Realtime Veritabanında kullanıcı tarafından yetkilendirilmiş değişiklikler yapmaya devam edebilirsiniz:

 const functions = require('firebase-functions');
const admin = require('firebase-admin');

exports.impersonateMakeUpperCase = functions.database.ref('/messages/{pushId}/original')
    .onCreate((snap, context) => {
      const appOptions = JSON.parse(process.env.FIREBASE_CONFIG);
      appOptions.databaseAuthVariableOverride = context.auth;
      const app = admin.initializeApp(appOptions, 'app');
      const uppercase = snap.val().toUpperCase();
      const ref = snap.ref.parent.child('uppercase');

      const deleteApp = () => app.delete().catch(() => null);

      return app.database().ref(ref).set(uppercase).then(res => {
        // Deleting the app is necessary for preventing concurrency leaks
        return deleteApp().then(() => res);
      }).catch(err => {
        return deleteApp().then(() => Promise.reject(err));
      });
    });
 

Cloud Firestore

V 1.0 için Gerçek Zamanlı Veritabanı değişiklikleri gibi, onWrite ve onUpdate before ve after alanları olan bir veri parametresine sahiptir. İçin Olaylar onCreate ve onDelete Bulut Firestore bir veri parametresine sahip hem DocumentSnapshot .

Önce (<= v0.9.1)

 exports.dbWrite = functions.firestore.document('/doc/path').onWrite((event) => {
  const beforeData = event.data.previous.data(); // data before the write
  const afterData = event.data.data(); // data after the write
});
 

Şimdi (> = v1.0.0)

 exports.dbWrite = functions.firestore.document('/doc/path').onWrite((change, context) => {
  const beforeData = change.before.data(); // data before the write
  const afterData = change.after.data(); // data after the write
});
 

İçin Olaylar onCreate ve onDelete bir bir veri parametresine sahip hem DocumentSnapshot .

Önce (<= v0.9.1)

 exports.dbDelete = functions.firestore.document('/doc/path').onDelete((event) => {
  const deletedData = event.data.previous.data(); // data that was deleted
});

 

Şimdi (> = v1.0.0)

 exports.dbDelete = functions.firestore.document('/doc/path').onDelete((snap, context) => {
  const deletedData = snap.data(); // data that was deleted
});
 

Firestore zaman damgaları için v2.0.0'daki Breaking Change

Bulut Fonksiyonlar için Firebase SDK v2.0.0 itibariyle bir Firestore içinde damgası değerleri bir işlev içinde olan alınan Snapshot Firestore Zaman Damgası nesnelerin. Bu, snapshot.createTime , snapshot.updateTime , snapshot.readTime ve snapshot.data() içindeki zaman damgası değerleri için geçerlidir

Şimdi (> = v2.0.0)

 exports.dbCreate = functions.firestore.document('/doc/path').onCreate((snap, context) => {
  //seconds of UTC time since Unix epoch
  console.log(snap.createTime.seconds);

  //fractions of a second at nanosecond resolution, 0 to 999,999,999
  console.log(snap.createTime.nanoseconds);
});
 

Kimlik Doğrulama

Önceki sürümlerde, event.data.metadata , createdAt ve lastSignedInAt createdAt kullanımdan kaldırılmış alanlarını lastSignedInAt . Sürüm 1.0, bu alanları tamamen kaldırır ve userRecord.metadata parametresindeki creationTime ve lastSignInTime alanlarıyla değiştirir.

Önce (<= v0.9.1)

 // This code won't work with Cloud Functions SDK 1.0 and higher!
exports.authAction = functions.auth.user().onCreate((event) => {
  const userMetadata = event.data.metadata;

  const creationTime = userMetadata.createdAt; // 2016-12-15T19:37:37.059Z
  const lastSignInTime = userMetadata.lastSignedInAt; // 2018-01-03T16:23:12.051Z
}
 

Şimdi (> = v1.0.0)

 exports.authAction = functions.auth.user().onCreate((userRecord, context) => {
  const creationTime = userRecord.metadata.creationTime; // 2016-12-15T19:37:37.059Z
  const lastSignInTime = userRecord.metadata.lastSignInTime; // 2018-01-03T16:23:12.051Z
}
 

Crashlytics

V 1.0 onNew , her yeni sorun ortaya onNew olay işleyicisi onNew . onNewDetected adlı önceki işleyici kaldırıldı.

Önce (<= v0.9.1)

 exports.newIssue = functions.crashlytics.issue().onNewDetected((event) => {
  const issue = event.data;

  const issueId = issue.issueId;
  const issueTitle = issue.issueTitle;
  const appName = issue.appInfo.appName;
  const appId = issue.appInfo.appId;
  const appPlatform = issue.appInfo.appPlatform;
  const latestAppVersion = issue.appInfo.latestAppVersion;
  const createTime = issue.createTime;
}
 

Şimdi (> = v1.0.0)

 exports.newIssue = functions.crashlytics.issue().onNew((issue, context) => {
  const issueId = issue.issueId;
  const issueTitle = issue.issueTitle;
  const appName = issue.appInfo.appName;
  const appId = issue.appInfo.appId;
  const appPlatform = issue.appInfo.appPlatform;
  const latestAppVersion = issue.appInfo.latestAppVersion;
  const createTime = issue.createTime;
}
 

Depolama

onChange olay işleyicisi kaldırıldı. Bunun yerine, v 1.0 şu olayları destekler:

  • onArchive Yalnızca bir grup nesne onArchive etkinleştirdiğinde gönderilir. Bu olay, bir nesnenin canlı sürümünün, arşivlendiğinden veya aynı adlı bir nesnenin yüklenmesi ile üzerine yazıldığından arşivlenmiş bir sürüm haline geldiğini gösterir.
  • onDelete Bir nesne kalıcı olarak silindiğinde gönderilir. Bu, üzerine yazılan veya grubun yaşam döngüsü yapılandırmasının bir parçası olarak silinen nesneleri içerir. Nesne sürümlendirmesi etkinleştirilmiş bölümler için, arşivleme storage.objects.delete yöntemiyle olsa bile, bir nesne arşivlendiğinde (bkz. onArchive ) gönderilmez.
  • onFinalize yeni bir nesne (veya var olan bir nesnenin yeni nesli) başarıyla oluşturulduğunda gönderilir. Bu, mevcut bir nesnenin kopyalanmasını veya yeniden yazılmasını içerir. Başarısız bir yükleme bu etkinliği tetiklemez.
  • onMetadataUpdate Mevcut bir nesnenin meta verileri değiştiğinde gönderilir.

Önce (<= v0.9.1)

 exports.processFile = functions.storage.object().onChange((event) => {
  const object = event.data;

  const filePath = object.name; // Path of the File
  const contentType = object.contentType; // Mime type of the file

  // Exit if this is a deletion event.
  if (object.resourceState === 'not_exists') {
    console.log('This file was deleted.');
    return null;
  }

  // Exit if file exists but is not new and is only being triggered
  // because of a metadata change.
  if (resourceState === 'exists' && metageneration > 1) {
    console.log('This is a metadata change event.');
    return null;
  }

  // ...
}
 

Şimdi (> = v1.0.0)

 exports.processFile = functions.storage.object().onFinalize((object, context) => {
  const filePath = object.name; // Path of the File
  const contentType = object.contentType; // Mime type of the file

  // ...
}

exports.fileDeleted = functions.storage.object().onDelete((object, context) => {
  console.log('This file was deleted.');
}

exports.metadataUpdated = functions.storage.object().onMetadataUpdate((object, context) => {
  console.log('This is a metadata change event.');
}
 

Pub / Sub

Temel tetikleyici türü değiştiği için pub / sub işlevlerini yeniden adlandırmanız ve yeniden konuşlandırmanız gerekir. İşlev kodunda değişiklik yapılması gerekmez.

Pub / alt işlevlerini güncellemek için:

  1. İşlevi yeniden adlandırın. Örneğin, 'myPubSubFunction' öğesini 'myNewPubSubFunction' olarak yeniden adlandırın.
  2. Bu işlevi yalnızca kısmi dağıtım kullanarak dağıtın:

    firebase deploy --only functions:myNewPubSubFunction

  3. 'MyNewPubSubFunction' uygulamasını başarıyla dağıttıktan sonra, tüm işlevleri dağıtarak eski v.1.0.0 öncesi işlevini silin:

    firebase deploy --only functions

Bu dağıtım komutları arasındaki kısa süre boyunca yinelenen tetikleyiciler alabilirsiniz. Bu durumu ele almak ve normal çalışma için, idempotent fonksiyonlar yazdığınızdan emin olun.

Daha fazla bilgi edinmek için API referansına bakın .

İşlev öykünmesindeki değişiklikler

  • firebase serve artık varsayılan olarak hem HTTP işlevlerine hem de barındırma hizmetine sahiptir.
  • firebase experimental:functions:shell tüm fonksiyonları taklit eden firebase experimental:functions:shell , firebase functions:shell olarak değiştirildi firebase functions:shell .

İşlev kabuğu için sözdizimi değişiklikleri

İşlevler, işlev kabuğu aracılığıyla çağırmak için sözdizimi, v1.0.0 + firebase işlevlerinin sözdizimini yansıtacak şekilde güncelleştirildi.

 // Inside functions shell

// To emulate database writes done by an administrative user:
myDbFunction(‘data’)

// To emulate database writes done by an authenticated user:
myDbFunction(‘data’, { auth: { uid: ‘abc’ }})

// To emulate database writes done by an unauthenticated user:
myDbFunction(‘data’, { authMode: ‘UNAUTHENTICATED’)