Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

Remote Config'i programlı olarak değiştirin

Bu belge programlama yoluyla okuyup olarak bilinen JSON biçimli parametreler ve koşullar kümesi nasıl değiştirebileceğinizi anlatmaktadır Uzaktan Yapılandırma şablonunda . Bu, istemci uygulamasının istemci kitaplığını kullanarak getirebileceği arka uçta şablon değişiklikleri yapmanıza olanak tanır.

Kullanılması Uzaktan Yapılandırma DİNLENME API veya Yönetici SDK'larını Bu kılavuzda açıklanan yapmanız Firebase konsolunda şablonu yönetme baypas doğrudan Yapılandırma kendi süreçleri dönüşür Uzaktan entegre edebilirsiniz. Örneğin, Remote Config arka uç API'leri ile şunları yapabilirsiniz:

  • Uzaktan Yapılandırma güncelleştirmeleri zamanlama. API çağrılarını bir cron işi ile birlikte kullanarak, Remote Config değerlerini düzenli bir zamanlamaya göre değiştirebilirsiniz.
  • Uzaktan Firebase kendi özel bir sistemde Yapılandırma dan verimli Geçiş için Toplu ithalat yapılandırma değerleri.
  • Sunucu tarafında meydana olaylara çerçevesinde uygulamayı değerlerini değiştiriyor Firebase için Bulut Fonksiyonlar ile Uzaktan Yapılandırma kullanın. Örneğin, uygulamanızda yeni bir özelliği tanıtmak için Remote Config'i kullanabilir ve ardından yeterli sayıda kişinin yeni özellikle etkileşim kurduğunu tespit ettiğinizde bu promosyonu otomatik olarak kapatabilirsiniz.

Bu kılavuzun aşağıdaki bölümleri, Remote Config arka uç API'leriyle yapabileceğiniz işlemleri açıklar. Bu görevleri REST API aracılığıyla gerçekleştiren bazı kodları incelemek için şu örnek uygulamalardan birine bakın:

Firebase Admin SDK'sını kullanarak Remote Config'i değiştirin

Yönetici SDK'sı, ayrıcalıklı ortamlardan Firebase ile etkileşim kurmanıza izin veren bir dizi sunucu kitaplığıdır. Admin SDK, Remote Config için güncellemeler gerçekleştirmenin yanı sıra, Firebase kimlik doğrulama belirteçlerinin oluşturulmasına ve doğrulanmasına, Gerçek Zamanlı Veritabanından okuma ve yazmaya vb. olanak tanır. Daha Yönetici SDK önkoşullar ve kurulumu hakkında bilgi almak için bkz sunucunuza Firebase Yönetici SDK'yı ekleyin .

Tipik bir Remote Config akışında, geçerli şablonu alabilir, bazı parametreleri veya parametre gruplarını ve koşullarını değiştirebilir, şablonu doğrulayabilir ve ardından yayınlayabilirsiniz. Bu API çağrılarını yapmadan önce SDK'dan gelen istekleri yetkilendirmelisiniz.

SDK'yı başlatın ve API isteklerini yetkilendirin

Eğer hiçbir parametrelerle Yönetici SDK'yı hazrlarken SDK kullanan Google Uygulaması Varsayılan Kimlik ve gelen seçenekler okur FIREBASE_CONFIG ortam değişkeni. İçeriği ise FIREBASE_CONFIG değişkeni bir ile başlar { bir JSON nesnesi olarak ayrıştırılır. Aksi takdirde SDK, dizenin seçenekleri içeren bir JSON dosyasının adı olduğunu varsayar.

Örneğin:

Node.js

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

Java

FileInputStream serviceAccount = new FileInputStream("service-account.json");
FirebaseOptions options = FirebaseOptions.builder()
        .setCredentials(GoogleCredentials.fromStream(serviceAccount))
        .build();
FirebaseApp.initializeApp(options);

Geçerli Remote Config Şablonunu alın

Remote Config şablonlarıyla çalışırken, bunların sürümlendirildiğini ve her sürümün, oluşturulduğu andan bir güncelleme ile değiştirdiğiniz zamana kadar sınırlı bir ömrü olduğunu unutmayın: 90 gün, toplam 300 depolanmış sürüm sınırı. Bkz şablonları ve sürüm daha fazla bilgi için.

Remote Config şablonunun geçerli etkin sürümünü JSON biçiminde almak için arka uç API'lerini kullanabilirsiniz. Şablonu almak için:

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

Remote Config parametrelerini değiştir

Remote Config parametrelerini ve parametre gruplarını programlı olarak değiştirebilir ve ekleyebilirsiniz. Örneğin, "new_menu" adlı mevcut bir parametre grubuna mevsimsel bilgilerin görüntülenmesini kontrol etmek için bir parametre ekleyebilirsiniz:

Node.js

function addParameterToGroup(template) {
  template.parameterGroups['new_menu'].parameters['spring_season'] = {
    defaultValue: {
      useInAppDefault: true
    },
    description: 'spring season menu visibility.',
  };
}

Java

template.getParameterGroups().get("new_menu").getParameters()
        .put("spring_season", new Parameter()
                .setDefaultValue(ParameterValue.inAppDefault())
                .setDescription("spring season menu visibility.")
        );

API, yeni parametreler ve parametre grupları oluşturmanıza veya varsayılan değerleri, koşullu değerleri ve açıklamaları değiştirmenize olanak tanır. Her durumda, değişiklik yaptıktan sonra şablonu açıkça yayınlamanız gerekir.

Remote Config koşullarını değiştirin

Remote Config koşullarını ve koşullu değerleri programlı olarak değiştirebilir ve ekleyebilirsiniz. Örneğin, yeni bir koşul eklemek için:

Node.js

function addNewCondition(template) {
  template.conditions.push({
    name: 'android_en',
    expression: 'device.os == \'android\' && device.country in [\'us\', \'uk\']',
    tagColor: 'BLUE',
  });
}

Java

template.getConditions().add(new Condition("android_en",
        "device.os == 'android' && device.country in ['us', 'uk']", TagColor.BLUE));

Her durumda, değişiklik yaptıktan sonra şablonu açıkça yayınlamanız gerekir.

Remote Config arka uç API'leri, uygulamanızın davranışını ve görünümünü değiştirmek için kullanabileceğiniz çeşitli koşullar ve karşılaştırma işleçleri sağlar. Koşulları ve bu koşullar için desteklenen operatörleri hakkında daha fazla bilgi edinmek için koşullu ifade referansı .

Remote Config şablonunu doğrulayın

İsteğe bağlı olarak, güncellemelerinizi yayınlamadan önce gösterildiği gibi doğrulayabilirsiniz:

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

Bu 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ş etiketler gibi hataları kontrol eder. Örneğin, daha fazla izin verilen sayıdan daha içeren bir istek tuşları-2000-cekti hata iletisini döndürür, Param count too large .

Remote Config şablonunu yayınlayın

Bir şablonu alıp istediğiniz güncellemelerle revize ettikten sonra yayınlayabilirsiniz. Bu bölümde açıklandığı gibi bir şablon yayınlamak, mevcut yapılandırma şablonunun tamamını güncellenmiş dosyayla değiştirir ve yeni etkin şablona, ​​değiştirdiği şablondan bir numara daha büyük bir sürüm numarası atanır.

Gerekirse, hiç DİNLENME API kullanabilirsiniz önceki sürüme rulo arkasına . Bir güncellemede hata riskini azaltmak için şunları yapabilirsiniz yayınlamadan önce doğrulamak .

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 API kullanarak Remote Config'i değiştirin

Bu bölüm Uzaktan Yapılandırma REST API ana yeteneklerini tarif eder https://firebaseremoteconfig.googleapis.com . Tam ayrıntı için bkz API başvurusu .

API isteklerinin kimliğini doğrulamak ve yetkilendirmek için bir erişim belirteci alın

Firebase projeler hakkında destekleyen hizmet hesaplarını uygulamanızın sunucu veya güvenilen ortamdan Firebase sunucu API'leri çağırmaya kullanabilirsiniz. Yerel olarak kod geliştiriyorsanız veya uygulamanızı şirket içinde dağıtıyorsanız, sunucu isteklerini yetkilendirmek için bu hizmet hesabı aracılığıyla elde edilen kimlik bilgilerini kullanabilirsiniz.

Bir hizmet hesabının kimliğini doğrulamak ve ona Firebase hizmetlerine erişim yetkisi vermek için JSON biçiminde bir özel anahtar dosyası oluşturmanız gerekir.

Hizmet hesabınız için bir özel anahtar dosyası oluşturmak için:

  1. Firebase konsolunda, açık Ayarlar> olarak hizmet hesapları .

  2. Yeni Özel Anahtar üret tıklayın ve ardından tıklayarak onaylayın Anahtarı oluşturun.

  3. Anahtarı içeren JSON dosyasını güvenli bir şekilde saklayın.

Bir hizmet hesabı aracılığıyla yetki verirken, uygulamanıza kimlik bilgilerini sağlamak için iki seçeneğiniz vardır. Ya ayarlayabilirsiniz GOOGLE_APPLICATION_CREDENTIALS ortam değişkeni veya açıkça kodunda Hizmet hesabı anahtarına yolunu iletebilirsiniz. İlk seçenek daha güvenlidir ve şiddetle tavsiye edilir.

Ortam değişkenini ayarlamak için:

Ortam değişkeni Set GOOGLE_APPLICATION_CREDENTIALS servis hesabı anahtarı içeren JSON dosyasının dosya yoluna. Bu değişken yalnızca mevcut kabuk oturumunuz için geçerlidir, bu nedenle yeni bir oturum açarsanız değişkeni yeniden ayarlayın.

Linux veya macOS

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

pencereler

PowerShell ile:

$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

Yukarıdaki adımları tamamladıktan sonra, Uygulama Varsayılan Kimlik Bilgileri (ADC), kimlik bilgilerinizi dolaylı olarak belirleyebilir ve Google dışı ortamlarda test ederken veya çalıştırırken hizmet hesabı kimlik bilgilerini kullanmanıza olanak tanır.

İle birlikte Firebase kimlik bilgilerini kullan Google Kimlik Doğrulama Kütüphanesi belirteç kısa ömürlü OAuth 2.0 erişimini almak için tercih ettiğiniz dil için:

düğüm.js

 function getAccessToken() {
  return admin.credential.applicationDefault().getAccessToken()
      .then(accessToken => {
        return accessToken.access_token;
      })
      .catch(err => {
        console.error('Unable to get access token');
        console.error(err);
      });
}

Bu örnekte, Google API istemci kitaplığı, isteği bir JSON web belirteci veya JWT ile doğrular. Daha fazla bilgi için, bkz JSON web belirteçleri .

piton

def _get_access_token():
  """Retrieve a valid access token that can be used to authorize requests.

  :return: Access token.
  """
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      'service-account.json', SCOPES)
  access_token_info = credentials.get_access_token()
  return access_token_info.access_token

Java

private static String getAccessToken() throws IOException {
  GoogleCredentials googleCredentials = GoogleCredentials
          .fromStream(new FileInputStream("service-account.json"))
          .createScoped(Arrays.asList(SCOPES));
  googleCredentials.refreshAccessToken();
  return googleCredentials.getAccessToken().getTokenValue();
}

Erişim belirtecinizin süresi dolduktan sonra, güncelleştirilmiş bir erişim belirtecini almak için belirteç yenileme yöntemi otomatik olarak çağrılır.

Kapsamını talep Uzaktan Konfig'teki erişimi yetkilendirmek için https://www.googleapis.com/auth/firebase.remoteconfig .

Remote Config şablonunu değiştirin

Remote Config şablonlarıyla çalışırken, bunların sürümlendirildiğini ve her sürümün, oluşturulduğu andan bir güncellemeyle değiştirdiğiniz zamana kadar sınırlı bir ömrü olduğunu unutmayın: 90 gün, toplam 300 depolanmış sürüm sınırı. Bkz şablonları ve sürüm daha fazla bilgi için.

Geçerli Remote Config Şablonunu alın

Remote Config şablonunun geçerli etkin sürümünü JSON biçiminde almak için arka uç API'lerini kullanabilirsiniz. Aşağıdaki komutları kullanın:

cURL

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 ve başlıkları (Etag dahil) ayrı bir dosyaya çıkarır.

Ham HTTP isteği

Host: firebaseremoteconfig.googleapis.com

GET /v1/projects/my-project-id/remoteConfig HTTP/1.1
Authorization: Bearer token
Accept-Encoding: gzip

Bu API çağrısı içeren ayrı başlıkla birlikte aşağıdaki JSON döndüren ETag Eğer sonraki isteği kullandıkları.

Remote Config şablonunu doğrulayın

İsteğe bağlı olarak, güncellemelerinizi yayınlamadan önce doğrulayabilirsiniz. Senin yayınlama isteğine URL parametresi ekleyerek doğrula şablonu güncellemeleri ?validate_only=true . Buna karşılık, bir durum kodu 200 ve sonek ile güncelleştirilmiş etag -0 vasıta Güncellemenizin başarıyla doğrulandı olduğunu. 200 olmayan herhangi bir yanıt, JSON verilerinin yayınlamadan önce düzeltmeniz gereken hatalar içerdiğini gösterir.

Remote Config şablonunu güncelleyin

Bir şablon alıp JSON içeriğini istediğiniz güncellemelerle revize ettikten sonra yayınlayabilirsiniz. Bu bölümde açıklandığı gibi bir şablon yayınlamak, mevcut yapılandırma şablonunun tamamını güncellenmiş dosyayla değiştirir ve yeni etkin şablona, ​​değiştirdiği şablondan bir numara daha büyük bir sürüm numarası atanır.

Gerekirse, hiç DİNLENME API kullanabilirsiniz önceki sürüme rulo arkasına . Bir güncellemede hata riskini azaltmak için şunları yapabilirsiniz yayınlamadan önce doğrulamak .

cURL

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

Bunun için curl komutu, dosya isminin ardından "@" karakteri kullanılarak içeriği belirtebilirsiniz.

Ham HTTP isteği

Host: firebaseremoteconfig.googleapis.com
PUT /v1/projects/my-project-id/remoteConfig HTTP/1.1
Content-Length: size
Content-Type: application/json; UTF8
Authorization: Bearer token
If-Match: expected ETag
Accept-Encoding: gzip
JSON_HERE

Bu bir yazma isteği olduğu için, ETag bu komut tarafından değiştirildiğinde ve güncelleştirilmiş ETag sonraki tepkisi başlıklarında sağlanan PUT komutu.

Remote Config koşullarını değiştirin

Remote Config koşullarını ve koşullu değerleri programlı olarak değiştirebilirsiniz. REST API ile, şablonu yayınlamadan önce koşulları değiştirmek için şablonu doğrudan düzenlemeniz gerekir.

{
  "conditions": [{
    "name": "android_english",
    "expression": "device.os == 'android' && device.country in ['us', 'uk']",
    "tagColor": "BLUE"
  }, {
    "name": "tenPercent",
    "expression": "percent <= 10",
    "tagColor": "BROWN"
  }],
  "parameters": {
    "welcome_message": {
      "defaultValue": {
        "value": "Welcome to this sample app"
      },
      "conditionalValues": {
        "tenPercent": {
          "value": "Welcome to this new sample app"
        }
      },
      "description": "The sample app's welcome message"
    },
    "welcome_message_caps": {
      "defaultValue": {
        "value": "false"
      },
      "conditionalValues": {
        "android_english": {
          "value": "true"
        }
      },
      "description": "Whether the welcome message should be displayed in all capital letters."
    }
  }
}

Modifikasyonlar, yukarıda ilk olarak bir dizi şartı tanımlar ve daha sonra her bir parametre için, varsayılan değerler ve koşullara bağlı parametre (koşullu değerler) değerlerini tanımlar. Ayrıca her öğe için isteğe bağlı bir açıklama ekler; kod yorumları gibi, bunlar geliştirici kullanımı içindir ve uygulamada görüntülenmez. Bir ETag ayrıca sürüm kontrolü amacıyla sağlanmıştır.

Remote Config arka uç API'leri, uygulamanızın davranışını ve görünümünü değiştirmek için kullanabileceğiniz çeşitli koşullar ve karşılaştırma işleçleri sağlar. Koşulları ve bu koşullar için desteklenen operatörleri hakkında daha fazla bilgi edinmek için koşullu ifade referansı .

HTTP Hata kodları

Durum kodu Anlam
200 Başarıyla güncellendi
400 Bir doğrulama hatası oluştu. Örneğin, daha fazla izin verilen sayıdan daha içeren bir istek tuşları-2000-cekti hata iletisiyle 400 (Bad Request) dönmek Param count too large . Ayrıca, bu HTTPS Durum Kodu şu iki durumda ortaya çıkabilir:
  • Bir ETag değeri aldığınızdan bu yana değerler ve koşullar kümesi güncellendiğinden bir sürüm uyuşmazlığı hatası oluştu. Bu sorunu çözmek için, bir kullanmalısınız GET , taze bir şablon ve ETag değeri elde şablonu güncellemek ve sonra bu şablonu ve taze ETag değerini kullanarak göndermek için komut.
  • Bir PUT komutu (Güncelleme Uzaktan Yapılandırma şablon isteği) bir belirtmeden yapıldığı If-Match başlığı.
401 Bir yetkilendirme hatası oluştu (erişim belirteci sağlanmadı veya Cloud Developer Console'da projenize Firebase Remote Config REST API eklenmedi)
403 Bir kimlik doğrulama hatası oluştu (yanlış erişim belirteci sağlandı)
500 Dahili bir hata oluştu. Bu hata oluşursa, bir Firebase destekleyici bir rapor kaydedin

200 durum kodu, Remote Config şablonunun (proje için parametreler, değerler ve koşullar) güncellendiği ve artık bu projeyi kullanan uygulamalar tarafından kullanılabilir olduğu anlamına gelir. Diğer durum kodları, daha önce var olan Remote Config şablonunun hala yürürlükte olduğunu gösterir.

Şablonunuz için güncellemeler gönderdikten sonra, değişikliklerinizin beklendiği gibi göründüğünü doğrulamak için Firebase konsoluna gidin. Koşulların sipariş onlar nasıl değerlendirildiğini etkiler, çünkü bu (değerlendirir ilk durumu kritik true yürürlüğe girecek).

ETag kullanımı ve zorunlu güncellemeler

Remote Config REST API, yarış koşullarını ve kaynaklarda çakışan güncellemeleri önlemek için bir varlık etiketi (ETag) kullanır. Daha ETAGların hakkında bilgi almak için bkz HTTP - ETag .

REST API, Google bu ETag En son tarafından sağlanan önbelleğe önerir GET komutu ve içinde ETag değeri kullanan If-Match istek başlığında veren PUT komutları. Senin Eğer PUT bir HTTPS Durumu Kod 409 komut sonuçları, taze bir düzenlemelidir GET sonraki kullanılmak üzere yeni bir ETag edinme komuta ve şablonu PUT komutu.

Aşağıdaki gibi ETag ve güncellenmesi Uzaktan Yapılandırma şablonunu zorlayarak, sağladığı korunmayı atlatmak yapabilirsiniz: If-Match: * Ancak, bu yaklaşım tavsiye edilmez sizin Uzaktan Config'de güncellemeleri kaybına sebep olma riski nedeniyle birden fazla istemci Remote Config şablonunu güncelliyorsa şablon. Bu tür bir çakışma, API'yi kullanan birden çok istemciyle veya API istemcileri ve Firebase konsolu kullanıcılarından gelen çakışan güncellemelerle ortaya çıkabilir.

Uzaktan Yapılandırma şablon sürümlerini yönetme konusunda bilgi için bkz Uzaktan Yapılandırma şablonlar ve sürüm .