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şullar gruplarıdır. Uygulamanızın değerleri getireceği istemci şablonları ve sunucu istemcilerinin değerleri getirebileceği sunucu şablonları oluşturabilirsiniz.

Şablonun içeriğini Parametreler ve Koşullar sekmelerinde grafik biçiminde gösteren Firebase konsolunu kullanarak değiştirir ve yönetirsiniz. İstemci şablonunuzu değiştirmek ve yönetmek için Remote Config REST API ve Admin SDK'yı veya Firebase CLI'yı da kullanabilirsiniz.

Aşağıda örnek bir istemci şablonu dosyası 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"
        }
      }

Aşağıda bir sunucu şablon dosyası örneği verilmiştir:

{
  "parameters": {
    "preamble_prompt": {
      "defaultValue": {
        "value": "You are a helpful assistant who knows everything there is to know about Firebase! "
      },
      "description": "Add this prompt to the user's prompt",
      "valueType": "STRING"
    },
    "model_name": {
      "defaultValue": {
        "value": "gemini-pro-test"
      },
      "valueType": "STRING"
    },
    "generation_config": {
      "defaultValue": {
        "value": "{\"temperature\": 0.9, \"maxOutputTokens\": 2048, \"topP\": 0.9, \"topK\": 20}"
      },
      "valueType": "JSON"
    },
  },
  "version": {
    "versionNumber": "19",
    "isLegacy": true
  }
}

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

  • Depolanan tüm şablon sürümlerini listele
  • Belirli bir sürümü alma
  • Belirli bir istemci sürümüne geri döndür
  • Değişiklik geçmişi sayfasından Remote Config şablonlarını silin

İstemci şablonlarını yönetiyorsanız Firebase CLI ve Remote Config arka uç API'lerini kullanarak şablonları listeleyebilir, şablonları alabilir ve şablonları geri alabilirsiniz.

Şablon türü (300 istemci şablonu ve 300 sunucu şablonu) başına toplam 300 ömür boyu depolanan sürüm sınırı vardır. Bu sınıra, silinen şablonlar için depolanan sürüm numaraları 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. Böylece, ilgili türün en fazla 300 sürümü korunur.

Parametreleri her güncellediğinizde Remote Config, sürümü yeni bir Remote Config şablonu oluşturur ve önceki şablonu gerektiğinde alıp geri alabileceğiniz bir sürüm olarak depolar. Sürüm numaraları, Remote Config tarafından depolanan ilk değerden itibaren 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.

Firebase konsolu, Firebase CLI veya Remote Config arka uç API'leri ile aşağıdaki sürüm yönetimi görevlerini gerçekleştirebilirsiniz:

  • Depolanan tüm şablon sürümlerini listele
  • Belirli bir sürümü alma
  • Belirli bir sürüme geri döndür

Remote Config şablonlarını, Remote Config konsolundaki Değişiklik geçmişi sayfasından gerektiğinde silebilirsiniz. Silinen şablonlar için depolanan sürüm numaraları dahil olmak üzere, ömür boyu depolanan toplam sürüm sınırı 300'dür. Bir projenin kullanım süresi boyunca 300'den fazla şablon sürümü yayınlarsanız en eski sürümler silinir. Böylece maksimum 300 sürüm korunur.

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

Bu bölümde Remote Config şablonunuzun sürümlerini nasıl yöneteceğiniz açıklanmaktadır. Programatik olarak şablon oluşturma, değiştirme ve kaydetme hakkında daha fazla bilgi için Remote Config'i programatik olarak değiştirme bölümüne bakın.

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

Remote Config şablonunun depolanan tüm sürümlerinin listesini alabilirsiniz. Örnek:

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

Firebase konsolu

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

Depolanan her sürüm için görüntülenen ayrıntılar, değişikliklerin Console'dan mı, REST API'den mi, bir geri alma işleminden mi yoksa şablonun zorunlu olarak kaydedilmesinden kaynaklanan artımlı değişiklikler mi olduğu ile ilgili bilgileri içerir.

Firebase CLI

firebase remoteconfig:versions:list

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

Şablon listesi, depolanan tüm sürümlerle ilgili meta verileri içerir. Bu meta veriler arasında güncelleme zamanı, işlemi yapan kullanıcı ve işlemin konsol üzerinden mi yoksa REST API üzerinden mi yapıldığı bilgisi yer alır. Aşağıda, bir sürüm öğesi örneği verilmiştir:

{
  "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 depolanmış herhangi bir sürümünü alabilirsiniz. Örnek:

Node.js

Şablonun en son sürümünü almak için getTemplate() öğesini bağımsız değişken olmadan geçirin veya belirli bir sürümü almak için getTemplateAtVersion() 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 amacıyla kullanılamaz. ?version_number parametresi olmayan benzer bir get isteği, geçerli etkin şablonu alır.

Firebase konsolu

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

Seçili olmayan sürümler için fareyle içerik menüsünün üzerine gelip Seçilen sürümle karşılaştır'ı seçerek o anda seçili olan sürümün ve depolanmış diğer sürümlerin ayrıntılı farkını görüntüleyebilirsiniz.

Firebase CLI

firebase remoteconfig:get -v VERSION_NUMBER

İsteğe bağlı olarak, -o, FILENAME kullanarak çıktıyı belirtilen bir dosyaya yazabilirsiniz.

Remote Config şablonunun depolanan belirli bir sürümüne geri döndür

Şablonun depolanan herhangi bir sürümüne geri dönebilirsiniz. Örnek:

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ü kullanarak bir HTTP POST yayınlayın. Örnek:

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, şu anda etkin olan depolanan şablonun içeriğini yeni sürüm meta verileriyle birlikte içerir.

Firebase konsolu

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

Firebase CLI

firebase remoteconfig:rollback -v VERSION_NUMBER

Bu geri alma işleminin, etkili bir şekilde yeni bir numaralı sürüm oluşturduğunu unutmayın. Örneğin, sürüm 10'dan sürüm 6'ya geri dönmek, sürüm 6'nın etkili bir şekilde yeni bir kopyasını oluşturur. Bu kopya, orijinal sürümden yalnızca sürüm numarasının 11 olmasıyla farklıdır. Orijinal sürüm 6, geçerlilik bitiş tarihine ulaşmadığı varsayılarak hâlâ depolanır ve sürüm 11, etkin şablon haline gelir.

Remote Config şablonu silme

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

  1. Remote Config Parametreleri sayfasında Değişiklik geçmişi'ni tıklayın.

  2. Silmek istediğiniz şablona geçin, Diğer'i tıklayın ve Sil'i seçin.

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

Remote Config şablonlarını indirin ve yayınlayın

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

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

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

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

Bir A/B testi denemesinde özel olarak 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. Geçerli Remote Config Config şablonunu indirin.
  2. Remote Config şablonunu doğrulayın.
  3. Remote Config şablonunu yayınlayın.

Mevcut Remote Config şablonunu indirin

Mevcut ve etkin Remote Config şablonunu programatik olarak veya Firebase konsolunu kullanarak indirebilirsiniz.

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

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, başlıkları (ETag dahil) ise ayrı bir headers dosyasına çıkarır.

Firebase konsolu

  1. Remote Config Parameters veya Koşullar (Uzak Yapılandırma Parametreleri veya Koşullar) sekmesinden Menü'yü açın ve Geçerli 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 ardından Kaydet'i tıklayın.

Firebase CLI

firebase remoteconfig:get -o filename

Remote Config şablonunu doğrulayın

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

Şablon doğrulama süreci; parametre ve koşullar için yinelenen anahtarlar, geçersiz koşul adları veya var olmayan koşullar ya da yanlış biçimlendirilmiş ETag'ler gibi hataları kontrol eder. Örneğin, izin verilen sayıdan fazla anahtar (2.000) 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 ?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 kaydedilen headers dosyasında -0 son ekine sahip HTTP/2 durumu 200 ve 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 içerir (ve ETag içermez).

Remote Config şablonunu yayınlayın

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

Şablon yayınladığınızda, mevcut yapılandırma şablonunun tamamı güncellenen dosyayla değiştirilir ve şablon sürümü bir birim artar. Yapılandırmanın tamamı değiştirildiği için JSON dosyasından bir parametreyi 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ız ve kullanıcılarınız için anında kullanıma sunulur. Gerekirse önceki sürüme dönebilirsiniz.

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

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.

Firebase konsolu

  1. Remote Config Parameters veya Koşullar (Uzak Yapılandırma Parametreleri veya Koşullar) sekmesinde Menü'yü açın ve Publish from a file (Dosyadan yayınla) seçeneğini belirleyin.
  2. İstendiğinde Browse'u (Göz at) tıklayın, yayınlamak istediğiniz Remote Config dosyasına gidip bu dosyayı seçin ve ardından Select'i (Seç) tıklayın.
  3. Dosya doğrulanır ve başarılı olursa yapılandırmayı uygulamalarınız ve kullanıcılarınız için hemen kullanılabilir hale getirmek için Yayınla'yı tıklayabilirsiniz.

Remote Config kişiselleştirmeleri ve koşulları, indirilen şablonlara dahil edilir. Bu nedenle, farklı bir projeye yayınlamayı denerken aşağıdaki sınırlamalara dikkat etmeniz önemlidir:

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

    Örneğin, projenizde kişiselleştirmeler etkinse bir şablon indirip düzenlerseniz bu şablonu aynı projede yayınlayabilirsiniz ancak kişiselleştirmeleri şablondan silmediğiniz sürece farklı bir projede yayınlayamazsınız.

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

    Örneğin, iOS platform değerini belirten bir koşulu kullanan Remote Config parametreniz varsa platform değerleri tüm projeler 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 dayalı bir koşul içeriyorsa doğrulama başarısız olur.

  • Yayınlamayı planladığınız şablon Google Analytics'e dayanan koşullar içeriyorsa hedef projede Analytics'in etkinleştirilmesi gerekir.

Remote Config şablon varsayılanlarını indirin

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

Bu bölümün sonundaki platforma özel bağlantılarda açıklandığı gibi, bu varsayılan ayarları uygulamanızda manuel olarak ayarlayabilir veya yalnızca tüm parametrelere ait anahtar/değer çiftlerini ve bunların etkin Remote Config şablonundaki varsayılan değerlerini içeren dosyaları indirerek bu işlemi kolaylaştırabilirsiniz. Daha sonra 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 özellik listesi (plist) ve web uygulamaları için JSON biçiminde indirebilirsiniz.

Uygulamanızın ve Remote Config arka ucunun senkronize durumda kalmasını sağlamak için yeni uygulama sürümlerinden önce Remote Config varsayılanlarını düzenli olarak indirmenizi öneririz.

Şablon varsayılanlarını içeren bir dosya 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 edinmek için şu sayfaya göz atın: