Remote Config'i programatik olarak değiştirme

Bu dokümanda, programlı bir şekilde nasıl okuyabileceğiniz olarak bilinen JSON biçimli parametre ve koşul kümesini değiştirebilirsiniz. Remote Config şablonu. Bu da şablon değişiklikleri yapabilirsiniz. istemci uygulamasının istemci kitaplığını kullanarak alabileceği arka uç.

Remote Config REST API'yi kullanarak veya bu kılavuzda açıklanan Yönetici SDK'larını atlayabilirsiniz. Firebase konsolunu kullanarak şablonu doğrudan entegre ederek Remote Config, kendi süreçlerinize dönüşür. Örneğin, Remote Config arka uç API'lerini kullanarak:

  • Remote Config güncellemelerini planlama. API çağrılarını bir cron işiyle birlikte kullanarak Remote Config değerlerini düzenli olarak değiştirebilirsiniz.
  • Kendi özel sisteminizden Firebase Remote Config'e verimli bir şekilde geçiş yapmak için yapılandırma değerlerini toplu içe aktarın.
  • Sunucu tarafında gerçekleşen etkinliklere göre uygulamanızdaki değerleri değiştirerek Firebase için Cloud Functions ile Remote Config'i kullanın. Örneğin, uygulamanızdaki yeni bir özelliği tanıtmak için Remote Config'i kullanabilir ve yeterli sayıda kişinin yeni özellikle etkileşimde bulunduğunu tespit ettiğinizde bu tanıtımı otomatik olarak kapatabilirsiniz.

    Remote Config arka ucunun özel araçlar ve sunucularla etkileşimini gösteren şema

Bu kılavuzun aşağıdaki bölümlerinde, Remote Config arka uç API'lerini kullanın. Bu işlemleri gerçekleştiren bazı kodları incelemek için aşağıdaki örnek uygulamalardan birine göz atın:

Firebase Admin SDK'yı kullanarak Remote Config'i değiştirme

Yönetici SDK'si, etkileşimde bulunmanıza olanak tanıyan bir dizi sunucu kitaplığıdır. Firebase'i özelleştirerek. Proje yöneticisi olarak Remote Config'e geri dönerseniz, Yönetici SDK'sı her bir müşterinin Firebase kimlik doğrulama jetonları, Realtime Database'den okuma ve yazma vb. Yönetici SDK'sı ön koşulları ve ayarları hakkında daha fazla bilgi edinmek için Firebase Admin SDK'yı sunucunuza ekleyin.

Tipik bir Remote Config akışında geçerli şablonu alabilir, bazı parametrelerin veya parametre gruplarının ve koşullarının bazılarını geri getirdikçe, şablonu oluşturup yayınlayabilirsiniz. Bu API çağrılarını yapmadan önce SDK'dan gelen isteklerdir.

SDK'yı başlatma ve API isteklerini yetkilendirme

Admin SDK'yı herhangi bir parametre olmadan başlattığınızda SDK Google Uygulaması Varsayılan Kimlik Bilgileri FIREBASE_CONFIG ortam değişkenindeki seçenekleri okur. FIREBASE_CONFIG değişkeninin içeriği bir { ile başlıyorsa JSON nesnesi olarak ayrıştırılır. Aksi takdirde SDK, dizenin seçenekleri içeren JSON dosyasının adı.

Ö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, verilerin ve her sürümün, sunulduğu andan itibaren sınırlı bir kullanım ömrüne sahip olduğunu oluşturma süresi, güncellemeyle değiştirdiğiniz zamana kadar: 90 gün (toplam sınırla birlikte) depolanan sürüm. Şablonlar ve Sürüm Oluşturma başlıklı makaleyi inceleyin konulu videomuzu izleyin.

Etiketin mevcut etkin sürümünü almak için arka uç API'lerini kullanabilirsiniz. JSON biçiminde Remote Config şablonu.

Belirli bir A/B Testi denemesi, dışa aktarılan şablonlara dahil edilmez.

Ş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ştirin

Remote Config parametrelerini ve parametreleri parametre gruplarıyla tutarlıdır. Örneğin, "new_menu" adlı mevcut bir parametre grubuna mevsimsel bilgilerin görünümünü 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 parametreler oluşturmanızı sağlar veya varsayılan değerleri, koşullu değerleri ve açıklamaları değiştirebilir. Her durumda, şablonu yapmanızı sağlayan sorular.

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

Remote Config koşullarını programlı bir şekilde değiştirip ekleyebilirsiniz. koşullu değerlerdir. Ö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, şablonu yapmanızı sağlayan sorular.

Remote Config arka uç API'leri çeşitli koşullar ve karşılaştırmalar sağlar Uygulamanızın davranışını ve görünümünü değiştirmek için kullanabileceğiniz operatörler. Alıcı: koşullar ve bu koşullar için desteklenen operatörler hakkında daha fazla bilgi edinmek, koşullu ifade referansı bölümüne bakın.

Remote Config şablonunu doğrulayın

İsteğe bağlı olarak, güncellemelerinizi yayınlamadan önce aşağıda 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 süreci parametreler ve koşullar için yinelenen anahtarlar, geçersiz koşul adları, var olmayan koşullar veya yanlış biçimlendirilmiş etag'ler. Örneğin, izin verilen sayıdan daha fazla tuşlar (2000) Param count too large hata mesajını döndürür.

Remote Config şablonunu yayınlayın

Bir şablonu alıp istediğiniz şekilde revize ederek sonra yayınlayabilirsiniz. Bir şablonu bu makalede açıklandığı şekilde yayınlama bölümü, mevcut yapılandırma şablonunun tamamını güncellenmiş dosyayla değiştirir ve yeni etkin şablona yeni bir şablon bulmanız gerekir.

Gerekirse önceki sürüme dönmek için REST API'yi kullanabilirsiniz. Güncelleme sırasındaki hata riskini azaltmak için şunları yapabilirsiniz: yayınlanmadan önce doğrulayın.

Remote Config kişiselleştirmeleri ve koşulları, indirilmiş şablonlardan yararlanabilirsiniz. Bu nedenle, kullanabileceğiniz bazı kısıtlamalar vardır:

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

    Örneğin, projenizde kişiselleştirmeler etkinse ve bir şablon indirip düzenledikten sonra, oluşturduğunuz ama projeyi silmediğiniz sürece farklı bir projede yayınlayamazsınız bazı kişiselleştirmeler var.

  • Koşullar projeden projeye aktarılabilir ancak belirli koşullu değerler (ör. uygulama kimlikleri veya kitleler) önce hedef projeye odaklanacağız.

    Örneğin, koşul alan bir Remote Config parametreniz varsa iOS bir platform değeri belirtirse şablon, çünkü platform değerleri tüm projeler için aynıdır. Ancak belirli bir uygulama kimliğine veya kullanıcıya dayalı bir koşul içeriyorsa hedef projede yoksa doğrulama başarısız olur.

  • Yayınlamayı planladığınız şablon, Google Analytics'i kullanıyorsanız hedefte Analytics'in etkinleştirilmiş olması gerekir belirler.

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ştirme

Bu bölümde, projenizin temel yetenekleri https://firebaseremoteconfig.googleapis.com itibarıyla Remote Config REST API. Tüm ayrıntılar için API referansına bakın.

API isteklerinin kimliğini doğrulamak ve yetkilendirmek için erişim jetonu alma

Firebase projeleri Google'ı destekler hizmet hesapları kullanıyorsanız Firebase'i çağırmak için kullanabileceğiniz uygulama sunucunuzdaki veya güvenilir ortamınızdaki sunucu API'leri Proje yöneticisi olarak yerel olarak kodlayın veya uygulamanızı şirket içine dağıtın edinilen kimlik bilgilerini kullanabilir bu hizmet hesabını kullanarak sunucu isteklerini yetkilendirebilir.

Bir hizmet hesabının kimliğini doğrulama ve hesabı yetkilendirme Firebase hizmetlerine erişmek için JSON biçiminde bir özel anahtar dosyası oluşturmanız gerekir biçimindedir.

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

  1. Firebase konsolunda şu dosyayı açın: Ayarlar > Hizmet Hesapları.

  2. Yeni Özel Anahtar Oluştur'u tıklayın ve ardından Anahtar Oluştur'u tıklayarak onaylayın.

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

ziyaret edin.

Bir hizmet hesabı aracılığıyla yetkilendirme yaparken, uygulamanıza kimlik bilgisi ekleyin. İsterseniz GOOGLE_APPLICATION_CREDENTIALS ortam değişkeni kullanabilirsiniz. hizmet hesabı anahtarının yolunu kodda açıkça iletin. İlk seçenek daha güvenlidir ve kesinlikle önerilir.

Ortam değişkenini ayarlamak için:

GOOGLE_APPLICATION_CREDENTIALS ortam değişkenini ayarlayın hizmet hesabı anahtarınızı 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çmak istiyorsanız değişkeni tekrar ayarlayın.

Linux veya macOS

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

Windows

Powerpoint 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ı yoldan belirleyerek hesap kimlik bilgilerini ele alacağız.

Firebase kimlik bilgilerinizi Google Kimlik Doğrulama Kitaplığı kısa ömürlü bir OAuth 2.0 erişim jetonu almak için tercih ettiğiniz dile dokunun:

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ğin kimliğini JSON web jetonu veya JWT. Daha fazla bilgi için bkz. JSON web jetonları.

Python

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

public 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 jetonunuzun süresi dolduktan sonra jeton yenileme yöntemi çağrılır. otomatik olarak alır.

Remote Config'e erişimi yetkilendirmek için kapsamı isteyin https://www.googleapis.com/auth/firebase.remoteconfig

Remote Config şablonunu değiştirme

Remote Config şablonlarıyla çalışırken, verilerin ve her sürümün, sunulduğu andan itibaren sınırlı bir kullanım ömrüne sahip olduğunu oluşturma süresi, güncellemeyle değiştirdiğiniz zamana kadar: 90 gün (toplam sınırla birlikte) depolanan sürüm. Şablonlar ve Sürüm Oluşturma başlıklı makaleyi inceleyin konulu videomuzu izleyin.

Geçerli Remote Config şablonunu alın

Etiketin mevcut etkin sürümünü almak için arka uç API'lerini kullanabilirsiniz. JSON biçiminde Remote Config şablonu.

Belirli bir A/B Testi denemesi, dışa aktarılan şablonlara dahil edilmez.

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 çıkarır ve (Etag dahil) ayrı bir dosyaya yükleyebilirsiniz.

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ı, aşağıdaki JSON öğesini, Etiket Yöneticisi'ni içeren bir ETag'i talep edebilirsiniz.

Remote Config şablonunu doğrulayın

İsterseniz, güncellemelerinizi yayınlamadan önce doğrulayabilirsiniz. Şablon güncellemelerini ekleyerek doğrulayın ekleme isteğiniz için ?validate_only=true URL parametresini kullanın. Yanıtta, durum kodu 200 ve -0 son ekiyle güncellenmiş bir etag , güncellemenizin başarıyla doğrulandığı anlamına gelir. 200 olmayan tüm yanıtlar JSON verilerinin, hata ayıklamadan önce düzeltmeniz gereken hatalar içerdiğini gösterir yayıncılık.

Remote Config şablonunu güncelleyin

Bir şablon alma ve JSON içeriğini istediğiniz şekilde düzeltme sonra yayınlayabilirsiniz. Bir şablonu bu makalede açıklandığı şekilde yayınlama bölümü, mevcut yapılandırma şablonunun tamamını güncellenmiş dosyayla değiştirir ve yeni etkin şablona yeni bir şablon bulmanız gerekir.

Gerekirse önceki sürüme dönmek için REST API'yi kullanabilirsiniz. Güncelleme sırasındaki hata riskini azaltmak için şunları yapabilirsiniz: yayınlanmadan önce doğrulayın.

Remote Config kişiselleştirmeleri ve koşulları, indirilmiş şablonlardan yararlanabilirsiniz. Bu nedenle, kullanabileceğiniz bazı kısıtlamalar vardır:

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

    Örneğin, projenizde kişiselleştirmeler etkinse ve bir şablon indirip düzenledikten sonra, oluşturduğunuz ama projeyi silmediğiniz sürece farklı bir projede yayınlayamazsınız bazı kişiselleştirmeler var.

  • Koşullar projeden projeye aktarılabilir ancak belirli koşullu değerler (ör. uygulama kimlikleri veya kitleler) önce hedef projeye odaklanacağız.

    Örneğin, koşul alan bir Remote Config parametreniz varsa iOS bir platform değeri belirtirse şablon, çünkü platform değerleri tüm projeler için aynıdır. Ancak belirli bir uygulama kimliğine veya kullanıcıya dayalı bir koşul içeriyorsa hedef projede yoksa doğrulama başarısız olur.

  • Yayınlamayı planladığınız şablon, Google Analytics'i kullanıyorsanız hedefte Analytics'in etkinleştirilmiş olması gerekir belirler.

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

Bu curl komutu için "@" işaretini kullanarak içeriği belirtebilirsiniz. karakter, ve ardından dosya adı yazın.

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ğundan ETag, bu komut tarafından değiştirilir ve güncellenmiş bir ETag, sonraki PUT komutunun yanıt başlıkları

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

Remote Config koşullarını ve koşullu özellikleri değerler. REST API ile değiştirmek için doğrudan şablonu düzenlemeniz gerekir ve koşulları dikkate almalıdır.

{
  "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."
    }
  }
}

Yukarıdaki değişiklikler ilk olarak bir dizi koşul tanımlar, ardından varsayılan değerleri ve koşula dayalı parametreyi (koşullu değerler) tanımlar her parametrenin değerini öğrenebilirsiniz. Ayrıca her reklam öğesi için isteğe bağlı öğe; Bunlar geliştirici kullanımı içindir ve burada gösterilmez inceleyebilirsiniz. ETag, sürüm kontrolü amacıyla da sağlandığından emin olun.

Remote Config arka uç API'leri çeşitli koşullar ve karşılaştırmalar sağlar Uygulamanızın davranışını ve görünümünü değiştirmek için kullanabileceğiniz operatörler. Alıcı: koşullar ve bu koşullar için desteklenen operatörler hakkında daha fazla bilgi edinmek, koşullu ifade referansı bölümüne bakın.

HTTP Hata kodları

Durum Kodu Anlamı
200 Başarıyla Güncellendi
400 Doğrulama hatası oluştu. Örneğin, izin verilen anahtar sayısı (2000) için 400 (Hatalı İstek) Param count too large hata mesajı. Ayrıca, bu HTTPS Durum Kodu şu iki durumda da ortaya çıkabilir:
  • Son olarak bir ETag değeri almanızdan bu yana değer ve koşul grubu güncellendiği için sürüm uyuşmazlığı hatası oluştu. Bu sorunu çözmek için GET komutu kullanarak yeni bir şablon ve ETag değeri alıp şablonu güncellemeniz ve bu şablonu ve yeni ETag değerini kullanarak göndermeniz gerekir.
  • If-Match başlığı belirtilmeden bir PUT komutu (Remote Config şablonunu güncelleme isteği) yapıldı.
401 Bir yetkilendirme hatası oluştu (erişim jetonu sağlanmadı veya Firebase Remote Config REST API, şu konumda projenize eklenmedi: Cloud Developer Console)
403 Bir kimlik doğrulama hatası oluştu (yanlış erişim jetonu sağlandı)
500 Dahili bir hata oluştu. Bu hata oluşursa Firebase destek kaydı oluşturun

200 durum kodu, Remote Config şablonunun (parametreler, değerler, ve koşulları) güncellenmiştir ve artık uygulamalar tarafından kullanılabilir. iletişim kurabiliyorsunuz. Diğer durum kodları, Remote Config'in mevcut şablon yürürlükte kalmaya devam ediyor.

Şablonunuzda güncellemeleri gönderdikten sonra Firebase konsoluna giderek değişikliklerinizin beklendiği gibi göründüğünü doğrulayın. Bu son derece önemlidir çünkü koşulların sıralaması, bunların nasıl değerlendirileceğini etkiler (koşullar arasında, true'ın geçerli olacağını değerlendirir.

ETag kullanımı ve zorunlu güncellemeler

Remote Config REST API, yarış koşullarını önlemek için bir varlık etiketi (ETag) kullanır kaynaklarda yapılan çakışan güncellemeler. ETag'ler hakkında daha fazla bilgi için ETag - HTTP.

Google, REST API için en son GET komutu tarafından sağlanan ETag'i ayarlayın ve bu ETag değerini kullanın PUT komutları yayınlarken If-Match istek başlığında. PUT komutu HTTPS Durum Kodu 409 ile sonuçlanırsa yeni bir GET komutuna ekleyerek sonraki PUT komutunuzla kullanacağınız yeni bir ETag ve şablon edinebilirsiniz.

ETag'i ve sağladığı korumayı atlatmak için Remote Config şablonunun aşağıdaki şekilde güncellenmesini zorlayabilirsiniz: If-Match: * Ancak bu yaklaşım önerilmez çünkü kaybın birden fazla istemci tarafından güncelleniyorsa Remote Config şablonunuzdaki Remote Config şablonu. Bu tür çakışmalar birden fazla veya API istemcilerinden ve API istemcilerinden gelen çakışan güncellemelerle Firebase konsolu kullanıcıları.

Remote Config şablon sürümlerini yönetme hakkında yardım için bkz. Remote Config şablonları ve sürüm oluşturma.