Remote Config Şablonları ve Sürüm Oluşturma


Remote Config şablonları, Firebase projeniz için oluşturduğunuz JSON biçimli parametre ve koşul kümeleridir. Uygulamanızın değer aldığı istemci şablonları ve sunucu istemcilerinin değer aldığı sunucu şablonları oluşturabilirsiniz.

Bu bölümde istemci şablonları ele alınmaktadır. Sunucuya özgü şablonlar hakkında bilgi edinmek için Sunucu şablonları'nı tıklayın.

Şablonu, Firebase konsolunu kullanarak değiştirir ve yönetirsiniz. Bu konsol, şablonun içeriğini Parametreler ve Koşullar sekmeleri.

İstemci şablonunuzu değiştirmek ve yönetmek için Remote Config REST API ve Admin SDK'yı ya da Firebase CLI'yi de kullanabilirsiniz.

Aşağıda bir istemci şablonu dosyası örneği verilmiştir:

      {
        "conditions": [
          {
            "name": "ios",
            "expression": "device.os == 'ios'"
          }
        ],
        "parameters": {
          "welcome_message": {
            "defaultValue": {
              "value": "Welcome to this sample app"
            },
            "conditionalValues": {
              "ios": {
                "value": "Welcome to this sample iOS app"
              }
            }
          },
          "welcome_message_caps": {
            "defaultValue": {
              "value": "false"
            }
          },
          "header_text": {
            "defaultValue": {
              "useInAppDefault": true
            }
          }
        },
        "version": {
          "versionNumber": "28",
          "updateTime": "2020-05-14T18:39:38.994Z",
          "updateUser": {
            "email": "user@google.com"
          },
          "updateOrigin": "CONSOLE",
          "updateType": "INCREMENTAL_UPDATE"
        }
      }

Firebase konsoluyla aşağıdaki sürüm yönetimi görevlerini gerçekleştirebilirsiniz:

  • Depolanan tüm şablon sürümlerini listeleme
  • Belirli bir sürümü alma
  • Belirli bir istemci sürümüne geri alma
  • Remote Config şablonunu Değişiklik geçmişi sayfasından silme

Firebase CLI ve Remote Config arka uç API'lerini kullanarak şablonları listeleyebilir, alabilir ve geri alabilirsiniz.

Şablon türü başına toplam 300 ömür boyu depolanan sürüm sınırı vardır (300 istemci şablonu ve 300 sunucu şablonu). Bu sınıra, silinen şablonların depolanan sürüm numaraları da dahildir. Bir projenin kullanım süresi boyunca şablon türü başına 300'den fazla şablon sürümü yayınlarsanız en eski sürümler silinir ve bu türde en fazla 300 sürüm saklanır.

Parametreleri her güncellediğinizde Remote Config, yeni sürümlü bir Remote Config şablonu oluşturur ve önceki şablonu, gerektiğinde geri alabileceğiniz veya geri dönebileceğiniz bir sürüm olarak depolar. Sürüm numaraları, Remote Config tarafından saklanan ilk değerden itibaren sırayla artırılır. Tüm şablonlar, gösterildiği gibi ilgili sürümle ilgili meta verileri içeren bir version alanı içerir.

Remote Config şablonlarını, Remote Config konsolundaki Değişiklik geçmişi sayfasından gerektiği gibi silebilirsiniz.

Remote Config şablon sürümlerini yönetme

Bu bölümde, Remote Configşablonunuzun sürümlerini nasıl yöneteceğiniz açıklanmaktadır.

Şablonları programatik olarak oluşturma, değiştirme ve kaydetme hakkında daha fazla bilgi için Remote Config'yi programatik olarak değiştirme başlıklı makaleyi inceleyin.

Remote Config şablonunun depolanan tüm sürümlerini listeleme

Remote Config şablonunun depolanan tüm sürümlerinin listesini alabilirsiniz. Bunun için:

Firebase konsol

Parametreler sekmesinde, sağ üstte gösterilen "saat" simgesini seçin. Bu işlem, sağdaki bir liste menüsünde depolanan tüm şablon sürümlerini listeleyen Değişiklik geçmişi sayfasını açar.

Her bir depolanan sürüm için gösterilen ayrıntılar, değişikliklerin Console'dan mı, REST API'den mi, geri alma işleminden mi yoksa şablonun zorunlu olarak kaydedilmesinden mi kaynaklandığına dair bilgileri içerir.

Firebase CLI

firebase remoteconfig:versions:list

Döndürülen sürüm sayısını sınırlamak için --limit seçeneğini kullanın. Tüm sürümleri getirmek için "0" değerini iletin.

Node.js

function listAllVersions() {
  admin.remoteConfig().listVersions()
    .then((listVersionsResult) => {
      console.log("Successfully fetched the list of versions");
      listVersionsResult.versions.forEach((version) => {
        console.log('version', JSON.stringify(version));
      });
    })
    .catch((error) => {
      console.log(error);
    });
}

Java

ListVersionsPage page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
while (page != null) {
  for (Version version : page.getValues()) {
    System.out.println("Version: " + version.getVersionNumber());
  }
  page = page.getNextPage();
}

// Iterate through all versions. This will still retrieve versions in batches.
page = FirebaseRemoteConfig.getInstance().listVersionsAsync().get();
for (Version version : page.iterateAll()) {
  System.out.println("Version: " + version.getVersionNumber());
}

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:listVersions

Şablon listesi, güncellemenin zamanı, güncellemeyi yapan kullanıcı ve güncellemenin nasıl yapıldığı dahil olmak üzere depolanan tüm sürümlerin meta verilerini içerir. Sürüm öğesine örnek:

```json
{
  "versions": [{
    "version_number": "6",
    "update_time": "2022-05-12T02:38:54Z",
    "update_user": {
      "name": "Jane Smith",
      "email": "jane@developer.org",
      "imageUrl": "https://lh3.googleusercontent.com/a-/..."
    },
    "description": "One small change on the console",
    "origin": "CONSOLE",
    "update_type": "INCREMENTAL_UPDATE"
  }]
}
```

Remote Config şablonunun belirli bir sürümünü alma

Remote Config şablonunun depolanan belirli bir sürümünü alabilirsiniz. Saklanan bir şablon sürümünü almak için:

Firebase konsol

Değişiklik geçmişi sekmesindeki ayrıntılar bölmesinde varsayılan olarak mevcut etkin şablon gösterilir. Listede başka bir sürümün ayrıntılarını görüntülemek için sağ menüden ilgili sürümü seçin.

Seçilmemiş bir sürümün bağlam menüsünün üzerine gelip Seçili sürümle karşılaştır'ı seçerek, seçili sürüm ile depolanan diğer sürümler arasındaki farkı ayrıntılı olarak görüntüleyebilirsiniz.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

İsteğe bağlı olarak, çıkışı -o, FILENAME ile belirli bir dosyaya yazabilirsiniz.

Node.js

Şablonun en son sürümünü almak için getTemplate() parametresini herhangi bir bağımsız değişken olmadan iletin veya belirli bir sürümü almak için getTemplateAtVersion() parametresini kullanın.

// Get template version: 6
admin.remoteConfig().getTemplateAtVersion('6')
  .then((template) => {
    console.log("Successfully fetched the template with ETag: " + template.etag);
  })
  .catch((error) => {
    console.log(error);
  });

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAtVersionAsync(versionNumber).get();
// See the ETag of the fetched template.
System.out.println("Successfully fetched the template with ETag: " + template.getETag());

REST

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig?version_number=6

?version_number URL parametresi yalnızca GET işlemleri için geçerlidir. Güncellemeler için sürüm numaralarını belirtmek üzere bu parametreyi kullanamazsınız. ?version_number parametresi olmadan benzer bir get isteği, mevcut etkin şablonu alır.

Remote Config şablonunun belirli bir depolanan sürümüne geri alma

Şablonun kayıtlı bir sürümüne geri dönebilirsiniz. Bir şablonu geri almak için:

Firebase konsol

Geri alma işlemine uygun önceki şablon sürümleri için Değişiklik geçmişi sayfasının sağ üst kısmında ilgili sürüme geri dönme seçeneği düğmesi gösterilir. Yalnızca ilgili sürüme geri dönmek ve bu değerleri tüm uygulamalar ve kullanıcılar için hemen kullanmak istediğinizden eminseniz bu seçeneği tıklayıp onaylayın.

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

Node.js

// Roll back to template version: 6
admin.remoteConfig().rollback('6')
  .then((template) => {
    console.log("Successfully rolled back to template version 6.");
    console.log("New ETag: " + template.etag);
  })
  .catch((error) => {
    console.log('Error trying to rollback:', e);
  })

Java

try {
  Template template = FirebaseRemoteConfig.getInstance().rollbackAsync(versionNumber).get();
  System.out.println("Successfully rolled back to template version: " + versionNumber);
  System.out.println("New ETag: " + template.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Error trying to rollback template.");
    System.out.println(rcError.getMessage());
  }
}

REST

Depolanan bir Remote Config şablonuna geri dönmek için :rollback özel yöntemini ve istek gövdesinde uygulanacak belirli sürümü içeren bir HTTP POST isteği gönderin. Örneğin:

curl --compressed -D headers -H "Authorization: Bearer <var>token</var>" -H "Content-Type: application/json" -X POST https://firebaseremoteconfig.googleapis.com/v1/projects/<var>my-project-id</var>/remoteConfig:rollback -d '{"version_number": 6}'

Yanıt, yeni sürüm meta verileriyle birlikte şu anda etkin olan depolanan şablonun içeriğini içerir.

Bu geri alma işleminin etkili bir şekilde yeni bir numaralı sürüm oluşturduğunu unutmayın. Örneğin, 10. sürümden 6. sürüme geri dönmek, 6. sürümün yeni bir kopyasını oluşturur. Bu kopya, orijinal sürümden yalnızca sürüm numarasının 11 olması bakımından farklıdır. Süresi dolmadığı varsayılarak orijinal 6. sürüm depolanmaya devam eder ve 11. sürüm etkin şablon olur.

Remote Config şablonu silme

Remote Config şablonlarını Firebase konsolundan silebilirsiniz. Remote Config şablonunu silmek için:

1. Remote Config Parametreler sayfasında Değişiklik geçmişi'ni tıklayın.
  1. Silmek istediğiniz şablona geçin, Diğer'i tıklayın ve Sil'i seçin.

  2. Silme işlemini onaylamanız istendiğinde Sil'i tıklayın.

Remote Config şablonlarını indirip yayınlama

Kaynak denetimi ve derleme sistemlerinize entegre etmek, yapılandırma güncellemelerini otomatikleştirmek ve parametreleri ile değerleri birden fazla projede senkronize tutmak için Remote Config şablonlarını indirip yayınlayın.

Şu anda etkin olan Remote Config şablonunu, programatik olarak veya Daha sonra, dışa aktarılan JSON dosyasını güncelleyip aynı projede veya yeni ya da mevcut bir projede yayınlayabilirsiniz.

Yazılım geliştirme yaşam döngünüzün farklı aşamalarını (ör. geliştirme, test, hazırlık ve üretim ortamları) temsil eden birden fazla projeniz olduğunu varsayalım. Bu durumda, tamamen test edilmiş bir şablonu, hazırlık projenizden indirip üretim projenizde yayınlayarak hazırlık ortamınızdan üretim ortamınıza tanıtabilirsiniz.

Bu yöntemi, yapılandırmaları bir projeden diğerine taşımak veya yeni bir projeyi mevcut bir projedeki parametre ve değerlerle doldurmak için de kullanabilirsiniz.

A/B Testing denemesinde özellikle varyant olarak oluşturulan parametreler ve parametre değerleri, dışa aktarılan şablonlara dahil edilmez.

Remote Config şablonlarını dışa ve içe aktarmak için:

  1. Mevcut Remote Config yapılandırma şablonunu indirin.
  2. Remote Config şablonunu doğrulayın.
  3. Remote Config şablonunu yayınlayın.

Mevcut Remote Config şablonunu indirme

Etkin Remote Config şablonunu JSON biçiminde indirmek için aşağıdakileri kullanın:

Firebase konsol

  1. Remote Config Parametreler veya Koşullar sekmesinde Menü'yü açın ve Mevcut yapılandırma dosyasını indir'i seçin.
  2. İstendiğinde Yapılandırma dosyasını indir'i tıklayın, dosyayı kaydetmek istediğiniz yeri seçin ve Kaydet'i tıklayın.

Firebase CLI

firebase remoteconfig:get -o filename

Node.js

function getTemplate() {
  var config = admin.remoteConfig();
  config.getTemplate()
      .then(function (template) {
        console.log('ETag from server: ' + template.etag);
        var templateStr = JSON.stringify(template);
        fs.writeFileSync('config.json', templateStr);
      })
      .catch(function (err) {
        console.error('Unable to get template');
        console.error(err);
      });
}

Java

Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get();
// See the ETag of the fetched template.
System.out.println("ETag from server: " + template.getETag());

REST

curl --compressed -D headers -H "Authorization: Bearer token" -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -o filename

Bu komut, JSON yükünü bir dosyaya, üstbilgileri (ETag dahil) ise ayrı bir headers dosyasına yazar.

Remote Config şablonunu doğrulama

Şablon güncellemelerinizi yayınlamadan önce Firebase Admin SDK veya REST API'yi kullanarak doğrulayabilirsiniz. Şablonlar, Firebase CLI veya Firebase konsolundan yayınlamaya çalıştığınızda da doğrulanır.

Şablon doğrulama işlemi, parametreler ve koşullar için yinelenen anahtarlar, geçersiz koşul adları veya var olmayan koşullar ya da yanlış biçimlendirilmiş ETags gibi hataları kontrol eder. Örneğin, izin verilen anahtar sayısından (2.000) fazla anahtar içeren bir istek, Param count too large hata mesajını döndürür.

Node.js

function validateTemplate(template) {
  admin.remoteConfig().validateTemplate(template)
      .then(function (validatedTemplate) {
        // The template is valid and safe to use.
        console.log('Template was valid and safe to use');
      })
      .catch(function (err) {
        console.error('Template is invalid and cannot be published');
        console.error(err);
      });
}

Java

try {
  Template validatedTemplate = FirebaseRemoteConfig.getInstance()
          .validateTemplateAsync(template).get();
  System.out.println("Template was valid and safe to use");
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Template is invalid and cannot be published");
    System.out.println(rcError.getMessage());
  }
}

REST

Yayın isteğinize ?validate_only=true URL parametresini ekleyerek şablon güncellemelerini doğrulayın:

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig?validate_only=true -d @filename

Şablonunuz başarıyla doğrulandıysa curl komutu, gönderdiğiniz JSON şablonunu döndürür ve kayıtlı headers dosyasında HTTP/2 200 durum kodu ile -0 son ekini içeren güncellenmiş bir ETag görürsünüz. Şablonunuz doğrulanmadıysa JSON yanıtında doğrulama hatası alırsınız ve headers dosyanız 200 olmayan bir yanıt (ve ETag) içerir.

Remote Config şablonunu yayınlama

Bir şablonu indirdikten, JSON içeriğinde gerekli değişiklikleri yaptıktan ve doğruladıktan sonra şablonu bir projede yayınlayabilirsiniz.

Bir şablonun yayınlanması, mevcut yapılandırma şablonunun tamamını güncellenmiş dosyayla değiştirir ve şablon sürümünü bir artırır. Yapılandırmanın tamamı değiştirildiğinden, JSON dosyasından sildiğiniz ve yayınladığınız bir parametre sunucudan silinir ve artık istemciler tarafından kullanılamaz.

Parametrelerde ve değerlerde yapılan değişiklikler, yayınlandıktan sonra uygulamalarınıza ve kullanıcılarınıza hemen sunulur. Gerekirse önceki bir sürüme geri dönebilirsiniz.

Şablonunuzu yayınlamak için aşağıdaki komutları kullanın:

Firebase konsol

  1. Remote Config Parametreler veya Koşullar sekmesinde Menü'yü açın ve Dosyadan yayınla'yı seçin.
  2. İstendiğinde Göz at'ı tıklayın, yayınlamak istediğiniz dosyaya gidin ve dosyayı seçin, ardından Seç'i tıklayın.Remote Config
  3. Dosya doğrulanır ve doğrulama başarılı olursa yapılandırmanızı uygulamalarınızda ve kullanıcılarınızda hemen kullanılabilir hale getirmek için Yayınla'yı tıklayabilirsiniz.

Node.js

function publishTemplate() {
  var config = admin.remoteConfig();
  var template = config.createTemplateFromJSON(
      fs.readFileSync('config.json', 'UTF8'));
  config.publishTemplate(template)
      .then(function (updatedTemplate) {
        console.log('Template has been published');
        console.log('ETag from server: ' + updatedTemplate.etag);
      })
      .catch(function (err) {
        console.error('Unable to publish template.');
        console.error(err);
      });
}

Java

try {
  Template publishedTemplate = FirebaseRemoteConfig.getInstance()
          .publishTemplateAsync(template).get();
  System.out.println("Template has been published");
  // See the ETag of the published template.
  System.out.println("ETag from server: " + publishedTemplate.getETag());
} catch (ExecutionException e) {
  if (e.getCause() instanceof FirebaseRemoteConfigException) {
    FirebaseRemoteConfigException rcError = (FirebaseRemoteConfigException) e.getCause();
    System.out.println("Unable to publish template.");
    System.out.println(rcError.getMessage());
  }
}

REST

curl --compressed -H "Content-Type: application/json; UTF8" -H "If-Match: last-returned-etag" -H "Authorization: Bearer token" -X PUT https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig -d @filename

Bu curl komutu için "@" karakterini ve ardından dosya adını kullanarak içeriği belirtebilirsiniz.

Remote Config kişiselleştirmeleri ve koşulları indirilen şablonlara dahil edilir. Bu nedenle, farklı bir projede yayınlamaya çalışırken aşağıdaki sınırlamaları göz önünde bulundurmanız önemlidir:

  • Kişiselleştirmeler projeden projeye aktarılamaz.

    Örneğin, projenizde kişiselleştirmeleri etkinleştirdiyseniz ve bir şablonu indirip düzenlediyseniz şablonu aynı projede yayınlayabilirsiniz ancak şablondaki kişiselleştirmeleri silmediğiniz sürece farklı bir projede yayınlayamazsınız.

  • Koşullar projeden projeye aktarılabilir ancak belirli koşullu değerlerin (ör. uygulama kimlikleri veya kitleler) yayınlanmadan önce hedef projede mevcut olması gerektiğini unutmayın.

    Örneğin, iOS platform değerini belirten bir koşul kullanan bir Remote Config parametreniz varsa platform değerleri her proje için aynı olduğundan şablon başka bir projede yayınlanabilir. Ancak hedef projede bulunmayan belirli bir uygulama kimliğine veya kullanıcı kitlesine dayanan bir koşul içeriyorsa doğrulama başarısız olur.

  • Yayınlamayı planladığınız şablon Google Analytics'e dayalı koşullar içeriyorsa Analytics hedef projede etkinleştirilmelidir.

Remote Config şablonu varsayılanlarını indirme

Uygulamanız her zaman internete bağlı olmayabileceğinden, tüm Remote Config parametreleri için istemci tarafı uygulama varsayılan değerlerini yapılandırmanız gerekir. Ayrıca, zaman içinde değişebilecekleri için uygulama istemci varsayılan değerlerinizi ve Remote Config arka uç varsayılan parametre değerlerinizi de düzenli olarak senkronize etmeniz gerekir.

Bu bölümün sonundaki platforma özel bağlantılarda açıklandığı gibi, bu varsayılan değerleri uygulamanızda manuel olarak ayarlayabilir veya etkin Remote Config şablonunda tüm parametrelerin anahtar/değer çiftlerini ve varsayılan değerlerini yalnızca içeren dosyaları indirerek bu süreci kolaylaştırabilirsiniz. Ardından bu dosyayı projenize ekleyebilir ve uygulamanızı bu değerleri içe aktaracak şekilde yapılandırabilirsiniz.

Bu dosyaları Android uygulamaları için XML, iOS uygulamaları için mülk listesi (plist) ve web uygulamaları için JSON biçiminde indirebilirsiniz.

Uygulamanızın ve Remote Config arka uçunun senkronize kalmasını sağlamak için yeni bir uygulama sürümü yayınlanmadan önce Remote Config varsayılan ayarlarını düzenli olarak indirmenizi öneririz.

Şablon varsayılanlarını içeren bir dosyayı indirmek için:

REST

curl --compressed -D headers -H "Authorization: Bearer token -X GET https://firebaseremoteconfig.googleapis.com/v1/projects/my-project-id/remoteConfig:downloadDefaults?format=file_format'

İndirmek istediğiniz dosya biçimine bağlı olarak format değeri olarak XML, PLIST veya JSON kullanın.

Firebase konsol

  1. Parametreler sekmesinde Menü'yü açın ve Varsayılan değerleri indir'i seçin.
  2. İstendiğinde, indirmek istediğiniz dosya biçimine karşılık gelen radyo düğmesini ve ardından Dosyayı indir'i tıklayın.

Remote Config varsayılan değerlerini uygulamanıza aktarma hakkında daha fazla bilgi için: