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ğerleri getirdiği istemci şablonları ve sunucu istemcilerinin değerleri getirebileceği sunucu şablonları oluşturabilirsiniz.

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

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

Ayrıca, istemci şablonunuzu değiştirmek ve yönetmek için Remote Config REST API ve Admin SDK veya Firebase CLI'yı da 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"
        }
      }

Bu sürüm yönetimi görevlerini Firebase konsoluyla gerçekleştirebilirsiniz:

  • Saklanan tüm şablon sürümlerini listeleme
  • Belirli bir sürümü alma
  • Belirli bir istemci sürümüne geri dönme
  • Değişiklik geçmişi sayfasından Remote Config şablonlarını silme

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

Şablon türü başına toplam 300 kullanıcı ömrü boyunca depolanmış sürüm sınırı vardır (300 istemci şablonu ve 300 sunucu şablonu). Bu sayıya, silinen şablonların depolanmış sürüm numaraları da dahildir. Bir projenin kullanım ömrü 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ürden en fazla 300 sürüm korunur.

Parametreleri her güncellediğinizde Remote Config, yeni bir sürüm oluşturulmuş Remote Config şablonu oluşturur ve önceki şablonu, gerektiğinde alabileceğiniz veya geri dönebileceğiniz bir sürüm olarak saklar. Sürüm numaraları, Remote Config tarafından depolanan ilk değerden başlayarak sırayla artırılır. Tüm şablonlarda, gösterildiği gibi, söz konusu sürümle ilgili meta verileri içeren bir version alanı bulunur.

Remote Config konsolundaki Değişiklik geçmişi sayfasından Remote Config şablonlarını 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 programatik olarak değiştirme başlıklı makaleyi inceleyin.

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

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

Firebase konsolu

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

Depolanan her sürüm için gösterilen ayrıntılar, değişikliklerin Konsol'dan mı, REST API'den mi, geri alma işleminden mi kaynaklandığı veya şablonun zorunlu olarak kaydedilmesinden kaynaklanan artımlı değişiklikler olup olmadığı hakkında bilgiler 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 listesinde, güncelleme zamanı, güncelleyen kullanıcı ve güncellemenin nasıl yapıldığı dahil olmak üzere depolanan tüm sürümlerin meta verileri yer alır. Aşağıda bir sürüm öğesi örneği verilmiştir:

```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 saklanan belirli bir sürümünü alabilirsiniz. Kayıtlı bir şablon sürümünü almak için:

Firebase konsolu

Değişiklik geçmişi sekmesindeki ayrıntılar bölmesinde varsayılan olarak etkin olan şablon gösterilir. Listedeki 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.

Şu anda seçili sürümün ve depolanmış diğer sürümlerin ayrıntılı farkını görüntülemek için seçili olmayan bir sürümün bağlam menüsünün üzerine gelip Seçili sürümle karşılaştır'ı seçebilirsiniz.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

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

Node.js

Şablonun en son sürümünü almak için getTemplate() işlevini herhangi bir bağımsız değişken olmadan iletin. Belirli bir sürümü almak için getTemplateAtVersion() işlevini 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 kullanamazsınız. ?version_number parametresi olmadan yapılan benzer bir get isteği, şu anda etkin olan şablonu alır.

Remote Config şablonunun belirli bir kayıtlı sürümüne geri dönme

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

Firebase konsolu

Geri döndürmeye uygun önceki şablon sürümleri için Değişiklik geçmişi sayfasının sağ üst kısmında bu sürüme geri döndürme seçeneği düğmesi gösterilir. Bu işlemi yalnızca söz konusu sürüme geri dönmek ve bu değerleri tüm uygulamalar ve kullanıcılar için hemen kullanmak istediğinizden eminseniz tıklayın ve 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

Kaydedilmiş bir Remote Config şablonuna geri dönmek için :rollback özel yöntemiyle bir HTTP POST isteği gönderin ve istek gövdesinde uygulanacak belirli sürümü belirtin. Ö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, artık etkin olan depolanmış şablonun içeriğini ve yeni sürüm meta verilerini içerir.

Bu geri alma işleminin aslında 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, orijinalinden yalnızca sürüm numarasının 11 olmasıyla farklıdır. Orijinal 6. sürüm, geçerlilik süresi dolmamışsa depolanmaya devam eder ve 11. sürüm etkin şablon haline gelir.

Remote Config şablonunu 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

Remote Config şablonlarını indirip yayınlayarak bunları kaynak kontrolü ve derleme sistemlerinize entegre edin, yapılandırma güncellemelerini otomatikleştirin ve parametrelerle değerleri birden fazla projede senkronize tutun.

Şu anda etkin olan Remote Configşablonu programatik olarak veya Ardından, 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ı temsil eden birden fazla projeniz olduğunu varsayalım (ör. geliştirme, test, hazırlık ve üretim ortamları). Bu durumda, hazırlık projenizden indirip üretim projenizde yayınlayarak hazırlık ortamınızdaki tam olarak test edilmiş bir şablonu üretim ortamınıza yükseltebilirsiniz.

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

Özellikle bir A/B Testing denemesindeki varyantlar 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 konsolu

  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 konumu 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 çıkarır.

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 sürecinde, parametreler ve koşullar için yinelenen anahtarlar, geçersiz koşul adları veya mevcut olmayan koşullar ya da yanlış biçimlendirilmiş ETag'ler gibi hatalar kontrol edilir. Örneğin, izin verilen anahtar sayısından (2.000) daha 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ınlama isteğinize URL parametresi ?validate_only=true 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 kaydedilen headers dosyasında, -0 sonekini içeren bir HTTP/2 durumu 200 ve güncellenmiş bir ETag bulursunuz. Şablonunuz doğrulanmadıysa JSON yanıtında doğrulama hatası alırsınız ve headers dosyanızda 200 olmayan bir yanıt (ve ETag yok) bulunur.

Remote Config şablonunu yayınlayın

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

Şablon yayınlamak, 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, bir parametreyi JSON dosyasından silip yayınlarsanız parametre sunucudan silinir ve artık istemciler tarafından kullanılamaz.

Yayınlama işleminden sonra parametrelerde ve değerlerde yapılan değişiklikler uygulamalarınızda ve kullanıcılarınızda hemen kullanılabilir. Gerekirse önceki bir sürüme geri dönebilirsiniz.

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

Firebase konsolu

  1. Remote ConfigParametreler 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 Remote Config dosyasına gidin ve bu dosyayı seçin, ardından Seç'i tıklayın.
  3. Dosya doğrulanır ve başarılı olursa yapılandırmayı 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 komutunda, içerik için dosya adından sonra "@" karakterini kullanabilirsiniz.

Remote Config kişiselleştirmeler 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 projeler arasında içe aktarılamaz.

    Örneğin, projenizde kişiselleştirmeler etkinse ve bir şablonu indirip düzenlerseniz 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 yayınlamadan önce hedef projede belirli koşullu değerlerin (ör. uygulama kimlikleri veya kitleler) bulunması gerektiğini unutmayın.

    Örneğin, Remote Config parametreniz varsa ve bu parametre, iOS platform değerini belirten bir koşul kullanıyorsa şablon başka bir projede yayınlanabilir. Bunun nedeni, platform değerlerinin tüm projeler için aynı olmasıdır. 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 koşullarına bağlıysa hedef projede Analytics etkinleştirilmelidir.

Remote Config şablon 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şebileceğinden uygulama istemcisi varsayılan değerlerinizi ve Remote Config arka uç varsayılan parametre değerlerinizi düzenli olarak senkronize etmeniz gerekir.

Bu bölümün sonundaki platforma özel bağlantılarda açıklandığı gibi, bu varsayılanları uygulamanızda manuel olarak ayarlayabilir veya etkin Remote Config şablonundaki tüm parametrelerin ve varsayılan değerlerinin yalnızca anahtar/değer çiftlerini 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 biçiminde, iOS uygulamaları için özellik listesi (plist) biçiminde ve web uygulamaları için JSON biçiminde indirebilirsiniz.

Uygulamanızın ve Remote Config arka ucunun senkronize kalmasını sağlamak için yeni bir uygulama sürümü yayınlamadan önce belirli aralıklarla Remote Config varsayılanlarını indirmenizi öneririz.

tüm parametreler için varsayılan değerleri yapılandırmanızı ö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 konsolu

  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 aşağıdaki makaleleri inceleyin: