Google Siyah toplulukları için ırksal eşitlik ilerleyen kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

Bulut Fonksiyonlar yükseltme rehberi Firebase SDK: sürüm 1.0 veya daha yüksek beta

Bulut Fonksiyonlar için Firebase SDK Sürüm 1.0.0 API bazı önemli değişiklikler yapılmıştır. En önemli değişiklik, bir yedek event.data ile formatında data ve context parametreleri, tüm asenkron (HTTP) fonksiyonlarını etkiler. Güncellenmiş SDK ile kullanılabilir firebase-functions-test , bir birim test arkadaşı SDK. Bkz Birim Testi İşlevleri fazla bilgi için.

Bulut Fonksiyonlar için Firebase SDK'nın Versiyon 2.0.0 için kırılma değişiklik getirmiştir Firestore tetiklenen fonksiyonlarda damgaları .

son sürüme güncelleme SDK'larıyla için, klasör fonksiyonları aşağıdaki çalıştırın:

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

Ayrıca, en son sürüme Firebase CLI güncellemek gerekir:

 npm install -g firebase-tools
 

Tüm asenkron (HTTP) fonksiyonlarını etkileyen SDK değişiklikleri

SDK tetik tipine göre değişir

İşlevleri öykünme yapılan değişiklikler

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

veri ve bağlam içine etkinlik parametresi, split

Bulut Fonksiyonlar için Firebase SDK v 1.0 itibariyle event asenkron fonksiyonlar için parametre kullanılmıyor. İki yeni parametreleri ile değiştirilmiştir: data ve context .

data parametresi fonksiyonu devreye verileri temsil eder. Alanları data parametresi tetikleyici türü tarafından belirlenir ve buna göre değişmektedir. Örneğin, Gerçek Zamanlı Veritabanı, data parametresi olan DataSnapshot . Bkz tetikleyici türü değişiklikleri hakkında daha fazla bilgi için data parametresi.

context parametresi ise yürütme 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ı Veri Tabanı fonksiyonları işlevini tetikleyen kullanıcı için kimlik doğrulama bilgilerini sağlar. İşte Gerçek Zamanlı Veri Tabanı yazma tetiklediği bir fonksiyonu tanımlanan bağlam alanlarının 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.
  // ...
});
 

Yeni başlatma sözdizimi firebase-admin

firebase-admin Bulut Fonksiyonlar runtime içinde artık 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();
 

Artık içinde geçirebilmesi Not functions.config().firebase başlatırken. v1.0.0 erişim yapılandırması ile ilgili ayrıntılar için aşağıdaki bölüme bakın.

functions.config().firebase çıkarıldı

functions.config().firebase kaldırıldı. Eğer Firebase projesinden yapılandırma değerlerini erişmek isterseniz, kullanmak process.env.FIREBASE_CONFIG yerine:

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

SDK tetik tipine göre değişir

Birçok desteklenen fonksiyon tetikleyiciler için v 1.0 veri alanlarının ve yöntemleri için adlandırma yenilikler getirdi. Bu bölüm tetikleyici türüne göre değişiklikleri listeler.

Gerçek zamanlı Veri Tabanı

Şimdi Olay verileri bir DataSnapshot

Daha eski sürümlerde event.data bir oldu DeltaSnapshot ; v 1.0 ileriye bir olduğunu DataSnapshot .

İçin onWrite ve onUpdate olaylar, veri parametresi vardır before ve after alanları. Bunların her biri bir DataSnapshot kullanılan aynı yöntemlerle admin.database.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
});
 

İçin onCreate , veri parametresi olan DataSnapshot sadece ilave edildi verileri temsil etmektedir:

Ö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
});
 

İçin onDelete , veri parametresi bir olduğunu DataSnapshot sadece silindi verileri temsil eder:

Ö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 doğrulama bilgisi için yeni özellikler

EventContext.auth V1.0.0 bir işlev tetikleyen kullanıcı için, izinleri dahil kullanıcı bilgilerini erişmek için iki yeni özelliklerini tanıttı.

  • EventContext.auth . Gibi bilgileri içerir uid ve yetkilendirilmiş kullanıcıların kimlik doğrulama belirteci.
  • EventContext.authType . Kullanıcı örneğin, bir yönetici kullanıcının olup olmadığını algılamak için izin izinleri seviyelerini içerir.

Belgesiz kullanan geliştiriciler event.auth alanları bu yeni özelliklerini kullanmak için herhangi bir ilgili kodu güncellemeniz gerekir.

adminRef yerini ref

.adminRef referans lehine çıkarıldı .ref şimdi yönetici ayrıcalıklarına sahip yetkilidir referans. Kullanarak eski yol .ref tetiklenen kullanıcı yetki değişimi için bir referans gibi- değişiklik-olduğu artık desteklenir.

Ö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
});
 

Hala yönetici SDK kullanarak gerçek zamanlı Veritabanı için kullanıcı tarafından yetkilendirilmiş değişiklikleri gerçekleştirebilir:

 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));
      });
    });
 

Bulut Firestore

Gerçek Zamanlı Veri Tabanı v 1.0 değiştirir Çok gibi onWrite ve onUpdate olan bir veri parametresine sahip before ve after alanları. İç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 içinde Breaking Değişikliği

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 geçerli snapshot.createTime , snapshot.updateTime , snapshot.readTime ve herhangi bir zaman damgası değerleri snapshot.data()

Ş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

Daha eski sürümlerde event.data.metadata kaldırılan alanları içerdiği createdAt ve lastSignedInAt . Sürüm 1.0 tamamen kaldırır bu alanları ve deÄŸiÅŸtirecektir onları creationTime ve lastSignInTime alanlar userRecord.metadata parametresi.

Ö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, yeni bir sorun oluşursa her zaman ateşler olay işleyicisi olan onNew . Adlı önceki işleyici onNewDetected kaldırılmıştır.

Ö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, 1.0 destekleri bu olaylar v:

  • onArchive bir kova sağladı Yalnızca gönderilen sürüm nesneyi . Bu olay aynı adı taşıyan bir nesnenin yükleme yazıldıysa çünkü bir nesnenin canlı versiyonu arşivlendiğinde çünkü ya arşivlenmiş sürümüdür olmayı ya da gösterir.
  • onDelete bir nesne kalıcı olarak silindi zaman gönderilir. Bu üzerine yazılır veya kovanın bir parçası olarak silinir nesneleri içeren yaşam döngüsü yapılandırması . İle kovalar için nesnenin sürümlendirmesini etkin bir nesne (bkz arşivlenirse, bu gönderilmez onArchive arşiv aracılığıyla gerçekleşse bile) storage.objects.delete yöntemiyle.
  • onFinalize yeni bir nesne (veya mevcut nesnenin yeni nesil) başarıyla kova oluşturulduğunda gönderilir. Bu kopyalama ya da var olan bir nesne yeniden içerir. Başarısız bir yükleme bu olayı tetiklemez.
  • onMetadataUpdate gönderildiğinde varolan nesne değişikliklerinin meta.

Ö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

altta yatan tetik tipi değiştiği için, yeniden adlandırmak ve yeniden dağıtım pub / alt fonksiyonları olmalıdır. fonksiyon kodunda değişiklik gereklidir.

pub / alt fonksiyonları güncellemek için:

  1. fonksiyonunu yeniden adlandırın. Örneğin, 'myPubSubFunction' için 'myNewPubSubFunction' adlandırın.
  2. kısmi dağıtım kullanarak sadece bu fonksiyonu dağıtmak:

    firebase deploy --only functions:myNewPubSubFunction

  3. Başarıyla 'myNewPubSubFunction' dağıtımını yaptıktan sonra, tüm fonksiyonları dağıtarak eskimiş ön v.1.0.0 fonksiyonunu silin:

    firebase deploy --only functions

Bu dağıtım komutları arasında kısa dönemde, yinelenen tetikleyiciler alabilirsiniz. Bu davayı ve normal çalışması için işlemek için, emin olun yazma İdempotent fonksiyonları .

Daha fazla bilgi için bkz API başvurusu .

işlevleri öykünme yapılan değişiklikler

  • firebase serve artık HTTP fonksiyonları ve varsayılan olarak barındırma hizmet vermektedir.
  • firebase experimental:functions:shell , tüm fonksiyonları öykünür, yeniden adlandırıldı firebase functions:shell .

Söz dizimi işlevleri kabuk için değiştirir

fonksiyonlar aracılığıyla fonksiyonlarını çağırmak için sözdizimi Firebase-fonksiyonları v1.0.0 + için sözdizimi yansıtacak şekilde güncellendi shell.

 // 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’)