āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻ—āϤāĻ­āĻžāĻŦ⧇ āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

āĻāχ āĻĻāĻ¸ā§āϤāĻžāĻŦ⧇āϜāϟāĻŋ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇ āϝ⧇ āφāĻĒāύāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§āϝāĻžāϟāĻŋāĻ•āĻ­āĻžāĻŦ⧇ JSON- āĻĢāĻ°ā§āĻŽā§āϝāĻžāϟ āĻ•āϰāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻāĻŦāĻ‚ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒāϰāĻŋāϚāĻŋāϤ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āϏ⧇āϟ āĻĒāĻĄāĻŧāϤ⧇ āĻāĻŦāĻ‚ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āĻāϟāĻŋ āφāĻĒāύāĻžāϕ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄā§‡ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧ āϝāĻž āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻ…ā§āϝāĻžāĻĒ āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āφāύāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

āĻāχ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāĻŋāĻ•āĻžāϝāĻŧ āĻŦāĻ°ā§āĻŖāĻŋāϤ Remote Config REST API āĻŦāĻž Admin SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āφāĻĒāύāĻŋ Firebase āĻ•āύāϏ⧋āϞ⧇ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒāϰāĻŋāϚāĻžāϞāύāĻž āĻŦāĻžāχāĻĒāĻžāϏ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋāϤ⧇ Remote Config āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋāϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āϏāĻ‚āĻšāϤ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, Remote Config āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ API āĻāϰ āϏāĻžāĻĨ⧇, āφāĻĒāύāĻŋ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

  • Remote Config āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€ āĨ¤ āĻāĻ•āϟāĻŋ āĻ•ā§āϰ⧋āύ āĻ•āĻžāĻœā§‡āϰ āϏāĻžāĻĨ⧇ API āĻ•āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āύāĻŋāϝāĻŧāĻŽāĻŋāϤ āϏāĻŽāϝāĻŧāϏ⧂āĻšā§€āϤ⧇ Remote Config āĻŽāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤
  • āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻŽāĻžāϞāĻŋāĻ•āĻžāύāĻž āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĨ⧇āϕ⧇ Firebase Remote Config āĻĻāĻ•ā§āώāĻ­āĻžāĻŦ⧇ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻžāϚ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻŽāĻžāύ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰ⧁āύ āĨ¤
  • Cloud Functions for Firebase āϏāĻžāĻĨ⧇ Remote Config āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ , āϏāĻžāĻ°ā§āĻ­āĻžāϰ-āϏāĻžāχāĻĄā§‡ āϘāĻŸā§‡ āϝāĻžāĻ“āϝāĻŧāĻž āχāϭ⧇āĻ¨ā§āϟāϗ⧁āϞāĻŋāϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āĻŽāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻĒā§āϰāϚāĻžāϰ āĻ•āϰāϤ⧇ Remote Config āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āύāϤ⧁āύ āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒāĻ°ā§āϝāĻžāĻĒā§āϤ āϞ⧋āϕ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰ⧇āϛ⧇ āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āϏ⧇āχ āĻĒā§āϰāϚāĻžāϰāϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻŦāĻ¨ā§āϧ āĻ•āϰ⧇ āĻĻāĻŋāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

    āϰ⧇āĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ— āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ āĻ•āĻžāĻ¸ā§āϟāĻŽ āϟ⧁āϞ āĻāĻŦāĻ‚ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇āϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰ⧇ āĻĄāĻžāϝāĻŧāĻžāĻ—ā§āϰāĻžāĻŽ

āĻāχ āĻ—āĻžāχāĻĄā§‡āϰ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻŦāĻŋāĻ­āĻžāĻ—āϗ⧁āϞāĻŋ āφāĻĒāύāĻŋ Remote Config āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ API-āĻāϰ āϏāĻžāĻĨ⧇ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŽāύ āĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϞāĻžāĻĒāϗ⧁āϞāĻŋ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇⧎ REST API-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻāχ āĻ•āĻžāϜāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰ⧇ āĻāĻŽāύ āĻ•āĻŋāϛ⧁ āϕ⧋āĻĄ āĻĒāĻ°ā§āϝāĻžāϞ⧋āϚāύāĻž āĻ•āϰāϤ⧇, āĻāχ āύāĻŽā§āύāĻž āĻ…ā§āϝāĻžāĻĒāϗ⧁āϞāĻŋāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ āĻĻ⧇āϖ⧁āύ:

Firebase āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ SDK āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

Admin SDK āĻšāϞ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ āϝāĻž āφāĻĒāύāĻžāϕ⧇ āĻŦāĻŋāĻļ⧇āώ āϏ⧁āĻŦāĻŋāϧāĻžāĻĒā§āϰāĻžāĻĒā§āϤ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĨ⧇āϕ⧇ Firebase-āĻāϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ Remote Config āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāĻžāϰ āĻĒāĻžāĻļāĻžāĻĒāĻžāĻļāĻŋ, Admin SDK āĻĢāĻžāϝāĻŧāĻžāϰāĻŦ⧇āϏ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻŸā§‹āϕ⧇āύ āϤ⧈āϰāĻŋ āĻāĻŦāĻ‚ āϝāĻžāϚāĻžāχāĻ•āϰāĻŖ, Realtime Database āĻĨ⧇āϕ⧇ āĻĒāĻĄāĻŧāĻž āĻāĻŦāĻ‚ āϞ⧇āĻ–āĻž āχāĻ¤ā§āϝāĻžāĻĻāĻŋ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇⧎ Admin SDK āĻĒā§‚āĻ°ā§āĻŦāĻļāĻ°ā§āϤ āĻāĻŦāĻ‚ āϏ⧇āϟāφāĻĒ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, āφāĻĒāύāĻžāϰ āϏāĻžāĻ°ā§āĻ­āĻžāϰ⧇ Firebase āĻ…ā§āϝāĻžāĻĄāĻŽāĻŋāύ SDK āϝ⧋āĻ— āĻ•āϰ⧁āύ āĻĻ⧇āϖ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ Remote Config āĻĢā§āϞ⧋āϤ⧇, āφāĻĒāύāĻŋ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻ•āĻŋāϛ⧁ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻŦāĻž āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ—ā§āϰ⧁āĻĒ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āϏ⧇āχ API āĻ•āϞāϗ⧁āϞāĻŋ āĻ•āϰāĻžāϰ āφāϗ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ SDK āĻĨ⧇āϕ⧇ āĻ…āύ⧁āϰ⧋āϧāϗ⧁āϞāĻŋ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇⧎

SDK āĻļ⧁āϰ⧁ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ API āĻ…āύ⧁āϰ⧋āϧ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āϝāĻ–āύ āϕ⧋āύ⧋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ›āĻžāĻĄāĻŧāĻžāχ Admin SDK āĻļ⧁āϰ⧁ āĻ•āϰ⧇āύ, āϤāĻ–āύ SDK Google āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻŦāĻ‚ FIREBASE_CONFIG āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āĻĨ⧇āϕ⧇ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ āĻĒāĻĄāĻŧ⧇⧎ āϝāĻĻāĻŋ FIREBASE_CONFIG āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ⧇āϰ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āĻāĻ•āϟāĻŋ { āĻĻāĻŋāϝāĻŧ⧇ āĻļ⧁āϰ⧁ āĻšāϝāĻŧ āϤāĻŦ⧇ āĻāϟāĻŋ JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĒāĻžāĻ°ā§āϏ āĻ•āϰāĻž āĻšāĻŦ⧇āĨ¤ āĻ…āĻ¨ā§āϝāĻĨāĻžāϝāĻŧ SDK āĻ…āύ⧁āĻŽāĻžāύ āĻ•āϰ⧇ āϝ⧇ āĻ¸ā§āĻŸā§āϰāĻŋāĻ‚āϟāĻŋ āĻāĻ•āϟāĻŋ JSON āĻĢāĻžāχāϞ⧇āϰ āύāĻžāĻŽ āϝ⧇āĻ–āĻžāύ⧇ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ āϰāϝāĻŧ⧇āϛ⧇⧎

āϝ⧇āĻŽāύ:

Node.js

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

āϜāĻžāĻ­āĻž

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

āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒāĻžāύ

Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϏ⧇āϗ⧁āϞāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋāϰ āϏāĻŽāϝāĻŧ āĻĨ⧇āϕ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻāĻ•āϟāĻŋ āϏ⧀āĻŽāĻŋāϤ āĻœā§€āĻŦāύāĻ•āĻžāϞ āϰāϝāĻŧ⧇āϛ⧇: 90 āĻĻāĻŋāύ, āĻŽā§‹āϟ 300āϟāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϏ⧀āĻŽāĻž āϏāĻšāĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĻ⧇āϖ⧁āύāĨ¤

āφāĻĒāύāĻŋ JSON āĻĢāĻ°ā§āĻŽā§āϝāĻžāĻŸā§‡ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒ⧇āϤ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻāĻŦāĻ‚ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻŽāĻžāύāϗ⧁āϞāĻŋ āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ A/B Testing āĻĒāϰ⧀āĻ•ā§āώāĻžāϝāĻŧ āĻŦ⧈āĻ•āĻ˛ā§āĻĒāĻŋāĻ• āĻšāĻŋāϏāĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϰāĻĒā§āϤāĻžāύāĻŋ āĻ•āϰāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϤ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āύāϝāĻŧ⧎

āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒ⧇āϤ⧇:

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

āϜāĻžāĻ­āĻž

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

āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻ—āϤāĻ­āĻžāĻŦ⧇ Remote Config āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻāĻŦāĻ‚ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ—ā§āϰ⧁āĻĒāϗ⧁āϞāĻŋ āϏāĻ‚āĻļā§‹āϧāύ āĻāĻŦāĻ‚ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, "new_menu" āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ—ā§āϰ⧁āĻĒ⧇ āφāĻĒāύāĻŋ āĻŽā§ŒāϏ⧁āĻŽā§€ āϤāĻĨā§āϝ āĻĒā§āϰāĻĻāĻ°ā§āĻļāύ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

Node.js

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

āϜāĻžāĻ­āĻž

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

API āφāĻĒāύāĻžāϕ⧇ āύāϤ⧁āύ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻāĻŦāĻ‚ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻ—ā§āϰ⧁āĻĒ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻŦāĻž āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŽāĻžāύ, āĻļāĻ°ā§āϤāĻžāϧ⧀āύ āĻŽāĻžāύ āĻāĻŦāĻ‚ āĻŦāĻŋāĻŦāϰāĻŖ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āϏāĻŦ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻĒāϰ āφāĻĒāύāĻžāϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§āϝāĻžāϟāĻŋāĻ•āĻ­āĻžāĻŦ⧇ Remote Config āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāĻžāϧ⧀āύ āĻŽāĻžāύāϗ⧁āϞāĻŋ āϏāĻ‚āĻļā§‹āϧāύ āĻāĻŦāĻ‚ āϝ⧋āĻ— āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻļāĻ°ā§āϤ āϝ⧋āĻ— āĻ•āϰāϤ⧇:

Node.js

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

āϜāĻžāĻ­āĻž

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

āϏāĻŦ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇, āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻžāϰ āĻĒāϰ āφāĻĒāύāĻžāϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

Remote Config āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ APIāϗ⧁āϞāĻŋ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻļāĻ°ā§āϤ āĻāĻŦāĻ‚ āϤ⧁āϞāύāĻž āĻ…āĻĒāĻžāϰ⧇āϟāϰ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇ āϝāĻž āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āφāϚāϰāĻŖ āĻāĻŦāĻ‚ āĻšā§‡āĻšāĻžāϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻāĻŦāĻ‚ āĻāχ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻ…āĻĒāĻžāϰ⧇āϟāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, āĻļāĻ°ā§āϤāϏāĻžāĻĒ⧇āĻ•ā§āώ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ— āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ

āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇, āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϝ⧇āĻŽāύ āĻĻ⧇āĻ–āĻžāύ⧋ āĻšāϝāĻŧ⧇āϛ⧇:

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

āϜāĻžāĻ­āĻž

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

āĻāχ āĻŦ⧈āϧāĻ•āϰāĻŖ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻ¤ā§āϰ⧁āϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āϝ⧇āĻŽāύ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻĄā§āĻĒā§āϞāĻŋāϕ⧇āϟ āϕ⧀, āĻ…āĻŦ⧈āϧ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāϰ āύāĻžāĻŽ āĻŦāĻž āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦāĻšā§€āύ āĻļāĻ°ā§āϤ, āĻŦāĻž āϭ⧁āϞ āĻĢāĻ°ā§āĻŽā§āϝāĻžāϟ āĻ•āϰāĻž āχāϟāĻžāĻ—āĨ¤ āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āϏāĻ‚āĻ–ā§āϝāĻ• āϕ⧀-2000-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āϏāĻŽāĻ¨ā§āĻŦāĻŋāϤ āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ āĻ¤ā§āϰ⧁āϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻžāϟāĻŋ āĻĢāĻŋāϰāĻŋāϝāĻŧ⧇ āĻĻ⧇āĻŦ⧇, Param count too large āĨ¤

āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻāϏāχ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻāϟāĻŋ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰ⧇, āφāĻĒāύāĻŋ āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋāϕ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻĢāĻžāχāϞ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āύāϤ⧁āύ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋāϕ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāϤ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻŽā§āĻŦāϰ āĻāĻ• āύāĻŽā§āĻŦāϰ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇, āφāĻĒāύāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āĻĢāĻŋāϰ⧇ āϝ⧇āϤ⧇ REST API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āĻŸā§‡ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻā§āρāĻ•āĻŋ āĻ•āĻŽāĻžāϤ⧇, āφāĻĒāύāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

Remote Config āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϤ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϏāĻšā§‡āϤāύ āĻšāĻ“āϝāĻŧāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ:

  • āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻž.

    āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻāĻŦāĻ‚ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰ⧇āύ, āφāĻĒāύāĻŋ āĻāĻ•āχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖāϗ⧁āϞāĻŋ āĻŽā§āϛ⧇ āύāĻž āĻĻ⧇āĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻĒāύāĻŋ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžā§ˇ

  • āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āĻŸā§‡ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϕ⧋āύ⧋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻļāĻ°ā§āϤāĻžāϧ⧀āύ āĻŽāĻžāύ (āϝ⧇āĻŽāύ āĻ…ā§āϝāĻžāĻĒ āφāχāĻĄāĻŋ āĻŦāĻž āĻļā§āϰ⧋āϤāĻž), āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āφāϗ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤

    āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ Remote Config āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĨāĻžāϕ⧇ āϝāĻž iOS āĻāϰ āĻāĻ•āϟāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻŽāĻžāύ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻļāĻ°ā§āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āĻ…āĻ¨ā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻžāϰāĻŖ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āĻŽāĻžāύ āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āχāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āϝāĻĻāĻŋ āĻāϟāĻŋāϤ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻļāĻ°ā§āϤ āĻĨāĻžāϕ⧇ āϝāĻž āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ…ā§āϝāĻžāĻĒ āφāχāĻĄāĻŋ āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĻāĻ°ā§āĻļāϕ⧇āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āϝāĻž āϞāĻ•ā§āĻˇā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύ⧇āχ, āϤāĻžāĻšāϞ⧇ āĻŦ⧈āϧāϤāĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇āĨ¤

  • āφāĻĒāύāĻŋ āϝ⧇ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰāϛ⧇āύ āϤāĻžāϤ⧇ āϝāĻĻāĻŋ āĻāĻŽāύ āĻļāĻ°ā§āϤ āĻĨāĻžāϕ⧇ āϝāĻž Google Analytics āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ Analytics āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āφāĻŦāĻļā§āϝāĻ•āĨ¤

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

āϜāĻžāĻ­āĻž

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 āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

āĻāχ āĻŦāĻŋāĻ­āĻžāĻ—āϟāĻŋ https://firebaseremoteconfig.googleapis.com āĻ Remote Config REST API-āĻāϰ āĻĒā§āϰāϧāĻžāύ āĻ•ā§āώāĻŽāϤāĻžāϗ⧁āϞāĻŋ āĻŦāĻ°ā§āĻŖāύāĻž āĻ•āϰ⧇āĨ¤ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻŦāϰāϪ⧇āϰ āϜāĻ¨ā§āϝ, API āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

API āĻ…āύ⧁āϰ⧋āϧāϗ⧁āϞāĻŋāϕ⧇ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻāĻŦāĻ‚ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒāĻžāύ⧎

Firebase āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϗ⧁āϞāĻŋ Google āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟāϗ⧁āϞāĻŋāϕ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧇, āϝāĻž āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻŦāĻž āĻŦāĻŋāĻļā§āĻŦāĻ¸ā§āϤ āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĨ⧇āϕ⧇ Firebase āϏāĻžāĻ°ā§āĻ­āĻžāϰ API āĻ•āϞ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ¸ā§āĻĨāĻžāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āϕ⧋āĻĄ āĻĄā§‡āϭ⧇āϞāĻĒ āĻ•āϰāϛ⧇āύ āĻŦāĻž āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻĒā§āϰāĻžāĻ™ā§āĻ—āύ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϛ⧇āύ, āφāĻĒāύāĻŋ āϏāĻžāĻ°ā§āĻ­āĻžāϰ āĻ…āύ⧁āϰ⧋āϧ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰāϤ⧇ āĻāχ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĒā§āϰāĻžāĻĒā§āϤ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻāϟāĻŋāϕ⧇ Firebase āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϗ⧁āϞāĻŋ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻĻāĻŋāϤ⧇, āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ JSON āĻĢāĻ°ā§āĻŽā§āϝāĻžāĻŸā§‡ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϕ⧀ āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇⧎

āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤ āϕ⧀ āĻĢāĻžāχāϞ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇:

  1. Firebase āĻ•āύāϏ⧋āϞ⧇, āϏ⧇āϟāĻŋāĻ‚āϏ > āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϖ⧁āϞ⧁āύāĨ¤

  2. āĻœā§‡āύāĻžāϰ⧇āϟ āύāĻŋāω āĻĒā§āϰāĻžāχāϭ⧇āϟ āϕ⧀ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧁āύ, āϤāĻžāϰāĻĒāϰ āĻœā§‡āύāĻžāϰ⧇āϟ āϕ⧀ āĻ•ā§āϞāĻŋāĻ• āĻ•āϰ⧇ āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧁āύāĨ¤

  3. āϕ⧀ āφāϛ⧇ āĻāĻŽāύ JSON āĻĢāĻžāχāϞāϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻĻ⧇ āϏāĻ‚āϰāĻ•ā§āώāĻŖ āĻ•āϰ⧁āύāĨ¤

āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āφāĻĒāύāĻžāϰ āφāĻŦ⧇āĻĻāύ⧇ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻĻ⧁āϟāĻŋ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ āϰāϝāĻŧ⧇āϛ⧇⧎ āφāĻĒāύāĻŋ āĻšāϝāĻŧ GOOGLE_APPLICATION_CREDENTIALS āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ āϏ⧇āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āĻ…āĻĨāĻŦāĻž āφāĻĒāύāĻŋ āϕ⧋āĻĄā§‡ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϕ⧀-āĻāϰ āĻĒāĻĨāϟāĻŋ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āĻĒāĻžāϏ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āĻĒā§āϰāĻĨāĻŽ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒāϟāĻŋ āφāϰ⧋ āύāĻŋāϰāĻžāĻĒāĻĻ āĻāĻŦāĻ‚ āĻĻ⧃āĻĸāĻŧāĻ­āĻžāĻŦ⧇ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻĒāϰāĻŋāĻŦ⧇āĻļ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāĻļā§€āϞ āϏ⧇āϟ āĻ•āϰāϤ⧇:

āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āϟ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞ GOOGLE_APPLICATION_CREDENTIALS JSON āĻĢāĻžāχāϞ⧇āϰ āĻĢāĻžāχāϞ āĻĒāĻžāĻĨ⧇ āϏ⧇āϟ āĻ•āϰ⧁āύ āϝāĻžāϤ⧇ āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āϟ āϕ⧀ āϰāϝāĻŧ⧇āϛ⧇āĨ¤ āĻāχ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϟāĻŋ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āφāĻĒāύāĻžāϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āĻļ⧇āϞ āϏ⧇āĻļāύ⧇ āĻĒā§āϰāϝ⧋āĻœā§āϝ, āϤāĻžāχ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āϏ⧇āĻļāύ āĻ–ā§‹āϞ⧇āύ, āϤāĻžāĻšāϞ⧇ āϭ⧇āϰāĻŋāϝāĻŧ⧇āĻŦāϞāϟāĻŋ āφāĻŦāĻžāϰ āϏ⧇āϟ āĻ•āϰ⧁āύāĨ¤

āϞāĻŋāύāĻžāĻ•ā§āϏ āĻŦāĻž āĻŽā§āϝāĻžāϕ⧋āϏ

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

āωāχāĻ¨ā§āĻĄā§‹āϜ

PowerShell āĻāϰ āϏāĻžāĻĨ⧇:

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

āφāĻĒāύāĻŋ āωāĻĒāϰ⧇āϰ āϧāĻžāĻĒāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ¨ā§āύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰ (ADC) āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻŽāĻžāĻŖāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋāϕ⧇ āĻ¸ā§āĻĒāĻˇā§āϟāĻ­āĻžāĻŦ⧇ āύāĻŋāĻ°ā§āϧāĻžāϰāĻŖ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻšāϝāĻŧ, āϝāĻž āφāĻĒāύāĻžāϕ⧇ āύāύ-Google āĻĒāϰāĻŋāĻŦ⧇āĻļ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻŦāĻž āϚāĻžāϞāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻĒāϰāĻŋāώ⧇āĻŦāĻž āĻ…ā§āϝāĻžāĻ•āĻžāωāĻ¨ā§āĻŸā§‡āϰ āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤

āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŦāĻ˛ā§āĻĒāĻ¸ā§āĻĨāĻžāϝāĻŧā§€ OAuth 2.0 āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻ⧇āϰ āĻ­āĻžāώāĻžāϰ āϜāĻ¨ā§āϝ Google Auth āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋāϰ āϏāĻžāĻĨ⧇ āĻāĻ•āϏāĻžāĻĨ⧇ āφāĻĒāύāĻžāϰ Firebase āĻļāĻ‚āϏāĻžāĻĒāĻ¤ā§āϰāϗ⧁āϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ:

node.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);
      });
}

āĻāχ āωāĻĻāĻžāĻšāϰāϪ⧇, Google API āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻāĻ•āϟāĻŋ JSON āĻ“āϝāĻŧ⧇āĻŦ āĻŸā§‹āϕ⧇āύ āĻŦāĻž JWT āĻĻāĻŋāϝāĻŧ⧇ āĻ…āύ⧁āϰ⧋āϧāϟāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ•āϰ⧇āĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ, JSON āĻ“āϝāĻŧ⧇āĻŦ āĻŸā§‹āϕ⧇āύ āĻĻ⧇āϖ⧁āύāĨ¤

āĻĒāĻžāχāĻĨāύ

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

āϜāĻžāĻ­āĻž

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

āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ⧇āϰ āĻŽā§‡āϝāĻŧāĻžāĻĻ āĻļ⧇āώ āĻšāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ⧇, āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāϤ⧇ āĻŸā§‹āϕ⧇āύ āϰāĻŋāĻĢā§āϰ⧇āĻļ āĻĒāĻĻā§āϧāϤāĻŋāϟāĻŋ āĻ¸ā§āĻŦāϝāĻŧāĻ‚āĻ•ā§āϰāĻŋāϝāĻŧāĻ­āĻžāĻŦ⧇ āĻ•āϞ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

Remote Config āĻ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ•āϰāϤ⧇, https://www.googleapis.com/auth/firebase.remoteconfig āĻ¸ā§āϕ⧋āĻĒ⧇āϰ āĻ…āύ⧁āϰ⧋āϧ āĻ•āϰ⧁āύāĨ¤

āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ— āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ, āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϏ⧇āϗ⧁āϞāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āĻāĻŦāĻ‚ āĻĒā§āϰāϤāĻŋāϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āϤ⧈āϰāĻŋāϰ āϏāĻŽāϝāĻŧ āĻĨ⧇āϕ⧇ āφāĻĒāύāĻŋ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻāĻ•āϟāĻŋ āϏ⧀āĻŽāĻŋāϤ āĻœā§€āĻŦāύāĻ•āĻžāϞ āϰāϝāĻŧ⧇āϛ⧇: 90 āĻĻāĻŋāύ, āĻŽā§‹āϟ 300āϟāĻŋ āϏāĻ‚āϰāĻ•ā§āώāĻŋāϤ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āϏ⧀āĻŽāĻž āϏāĻšāĨ¤ āφāϰāĻ“ āϤāĻĨā§āϝ⧇āϰ āϜāĻ¨ā§āϝ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĻ⧇āϖ⧁āύāĨ¤

āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒāĻžāύ

āφāĻĒāύāĻŋ JSON āĻĢāĻ°ā§āĻŽā§āϝāĻžāĻŸā§‡ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡āϰ āĻŦāĻ°ā§āϤāĻŽāĻžāύ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒ⧇āϤ⧇ āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻāĻŦāĻ‚ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ āĻŽāĻžāύāϗ⧁āϞāĻŋ āĻŦāĻŋāĻļ⧇āώāĻ­āĻžāĻŦ⧇ āĻāĻ•āϟāĻŋ A/B Testing āĻĒāϰ⧀āĻ•ā§āώāĻžāϝāĻŧ āĻŦ⧈āĻ•āĻ˛ā§āĻĒāĻŋāĻ• āĻšāĻŋāϏāĻžāĻŦ⧇ āϤ⧈āϰāĻŋ āĻ•āϰāĻž āϰāĻĒā§āϤāĻžāύāĻŋ āĻ•āϰāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϤ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āύāϝāĻŧ⧎

āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύ:

cURL

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

āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĢāĻžāχāϞ⧇ JSON āĻĒ⧇āϞ⧋āĻĄ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āĻĢāĻžāχāϞ⧇ āĻšā§‡āĻĄāĻžāϰ (Etag āϏāĻš) āφāωāϟāĻĒ⧁āϟ āĻ•āϰ⧇āĨ¤

āĻ•āĻžāρāϚāĻž HTTP āĻ…āύ⧁āϰ⧋āϧ

Host: firebaseremoteconfig.googleapis.com

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

āĻāχ API āĻ•āϞāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĒ⧃āĻĨāĻ• āĻļāĻŋāϰ⧋āύāĻžāĻŽ āϏāĻš āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ JSON āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āϝāĻžāϰ āĻŽāĻ§ā§āϝ⧇ āĻāĻ•āϟāĻŋ ETag āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āφāĻĒāύāĻŋ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ āĻ…āύ⧁āϰ⧋āϧ⧇āϰ āϜāĻ¨ā§āϝ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āύāĨ¤

āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ— āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ

āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇, āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āĻ…āύ⧁āϰ⧋āϧ⧇ URL āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧇ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋ āϝāĻžāϚāĻžāχ āĻ•āϰ⧁āύ ?validate_only=true āĨ¤ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϝāĻŧ, āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ 200 āĻāĻŦāĻ‚ āĻĒā§āϰāĻ¤ā§āϝāϝāĻŧ āϏāĻš āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āχāϟāĻžāĻ— -0 āĻāϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ āφāĻĒāύāĻžāϰ āφāĻĒāĻĄā§‡āϟāϟāĻŋ āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤ āϝ⧇āϕ⧋āύ-200 āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϝ⧇ JSON āĻĄā§‡āϟāĻžāϤ⧇ āĻ¤ā§āϰ⧁āϟāĻŋ āϰāϝāĻŧ⧇āϛ⧇ āϝāĻž āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āϰāĻŋāĻŽā§‹āϟ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ

āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰ⧇ āĻāĻŦāĻ‚ āφāĻĒāύāĻžāϰ āĻĒāĻ›āĻ¨ā§āĻĻāϏāχ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋāϰ āϏāĻžāĻĨ⧇ JSON āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āϏāĻ‚āĻļā§‹āϧāύ āĻ•āϰāĻžāϰ āĻĒāϰ⧇, āφāĻĒāύāĻŋ āĻāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāχ āĻŦāĻŋāĻ­āĻžāϗ⧇ āĻŦāĻ°ā§āĻŖāĻŋāϤ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ⧇āĻļāύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋāϕ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻĢāĻžāχāϞ⧇āϰ āϏāĻžāĻĨ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰ⧇, āĻāĻŦāĻ‚ āύāϤ⧁āύ āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋāϕ⧇ āĻĒā§āϰāϤāĻŋāĻ¸ā§āĻĨāĻžāĻĒāĻŋāϤ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡āϰ āĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻŽā§āĻŦāϰ āĻāĻ• āύāĻŽā§āĻŦāϰ āĻŦāϰāĻžāĻĻā§āĻĻ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧇, āφāĻĒāύāĻŋ āĻĒā§‚āĻ°ā§āĻŦāĻŦāĻ°ā§āϤ⧀ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇ āĻĢāĻŋāϰ⧇ āϝ⧇āϤ⧇ REST API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āĻŸā§‡ āĻ¤ā§āϰ⧁āϟāĻŋāϰ āĻā§āρāĻ•āĻŋ āĻ•āĻŽāĻžāϤ⧇, āφāĻĒāύāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇ āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎

Remote Config āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻ•āϰāĻž āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϗ⧁āϞāĻŋāϤ⧇ āĻ…āĻ¨ā§āϤāĻ°ā§āϭ⧁āĻ•ā§āϤ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇, āϤāĻžāχ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ āύāĻŋāĻŽā§āύāϞāĻŋāĻ–āĻŋāϤ āϏ⧀āĻŽāĻžāĻŦāĻĻā§āϧāϤāĻžāϗ⧁āϞāĻŋ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āϏāĻšā§‡āϤāύ āĻšāĻ“āϝāĻŧāĻž āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ:

  • āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āĻĨ⧇āϕ⧇ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻž āϝāĻžāĻŦ⧇ āύāĻž.

    āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖ āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇ āĻĨāĻžāϕ⧇āύ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĄāĻžāωāύāϞ⧋āĻĄ āĻāĻŦāĻ‚ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰ⧇āύ, āφāĻĒāύāĻŋ āĻāĻ•āχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ, āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĨ⧇āϕ⧇ āĻŦā§āϝāĻ•ā§āϤāĻŋāĻ—āϤāĻ•āϰāĻŖāϗ⧁āϞāĻŋ āĻŽā§āϛ⧇ āύāĻž āĻĻ⧇āĻ“āϝāĻŧāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āφāĻĒāύāĻŋ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŦ⧇āύ āύāĻžā§ˇ

  • āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āĻĒā§āϰ⧋āĻœā§‡āĻ•ā§āĻŸā§‡ āφāĻŽāĻĻāĻžāύāĻŋ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻŽāύ⧇ āϰāĻžāĻ–āĻŦ⧇āύ āϝ⧇ āϕ⧋āύ⧋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻļāĻ°ā§āϤāĻžāϧ⧀āύ āĻŽāĻžāύ (āϝ⧇āĻŽāύ āĻ…ā§āϝāĻžāĻĒ āφāχāĻĄāĻŋ āĻŦāĻž āĻļā§āϰ⧋āϤāĻž), āĻĒā§āϰāĻ•āĻžāĻļ⧇āϰ āφāϗ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĨāĻžāĻ•āĻž āωāϚāĻŋāϤāĨ¤

    āωāĻĻāĻžāĻšāϰāĻŖāĻ¸ā§āĻŦāϰ⧂āĻĒ, āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ āĻ•āĻžāϛ⧇ āĻāĻ•āϟāĻŋ Remote Config āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ āĻĨāĻžāϕ⧇ āϝāĻž iOS āĻāϰ āĻāĻ•āϟāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻŽāĻžāύ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻļāĻ°ā§āϤ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āĻ…āĻ¨ā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇, āĻ•āĻžāϰāĻŖ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽā§‡āϰ āĻŽāĻžāύ āϝ⧇āϕ⧋āύ⧋ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āχāĨ¤ āϝāĻžāχāĻšā§‹āĻ•, āϝāĻĻāĻŋ āĻāϟāĻŋāϤ⧇ āĻāĻŽāύ āĻāĻ•āϟāĻŋ āĻļāĻ°ā§āϤ āĻĨāĻžāϕ⧇ āϝāĻž āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ…ā§āϝāĻžāĻĒ āφāχāĻĄāĻŋ āĻŦāĻž āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀ āĻĻāĻ°ā§āĻļāϕ⧇āϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āϝāĻž āϞāĻ•ā§āĻˇā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ āύ⧇āχ, āϤāĻžāĻšāϞ⧇ āĻŦ⧈āϧāϤāĻž āĻŦā§āϝāĻ°ā§āĻĨ āĻšāĻŦ⧇āĨ¤

  • āφāĻĒāύāĻŋ āϝ⧇ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āĻĒāϰāĻŋāĻ•āĻ˛ā§āĻĒāύāĻž āĻ•āϰāϛ⧇āύ āϤāĻžāϤ⧇ āϝāĻĻāĻŋ āĻāĻŽāύ āĻļāĻ°ā§āϤ āĻĨāĻžāϕ⧇ āϝāĻž Google Analytics āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇, āϤāĻžāĻšāϞ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ Analytics āϏāĻ•ā§āϰāĻŋāϝāĻŧ āĻ•āϰāĻž āφāĻŦāĻļā§āϝāĻ•āĨ¤

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

āĻāχ curl āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āϜāĻ¨ā§āϝ, āφāĻĒāύāĻŋ āĻĢāĻžāχāϞ⧇āϰ āύāĻžāĻŽ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰ⧇ "@" āĻ…āĻ•ā§āώāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŦāĻŋāώāϝāĻŧāĻŦāĻ¸ā§āϤ⧁ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

āĻ•āĻžāρāϚāĻž HTTP āĻ…āύ⧁āϰ⧋āϧ

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

āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϞ⧇āĻ–āĻžāϰ āĻ…āύ⧁āϰ⧋āϧ, ETag āĻāχ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāĻŋāϤ āĻšāϝāĻŧ āĻāĻŦāĻ‚ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ PUT āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻĒā§āϰāϤāĻŋāĻ•ā§āϰāĻŋāϝāĻŧāĻž āĻļāĻŋāϰ⧋āύāĻžāĻŽā§‡ āĻāĻ•āϟāĻŋ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž ETag āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧁āύ

āφāĻĒāύāĻŋ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽā§āϝāĻžāϟāĻŋāĻ•āĻ­āĻžāĻŦ⧇ Remote Config āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāĻžāϧ⧀āύ āĻŽāĻžāύ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ REST API-āĻāϰ āϏāĻžāĻšāĻžāĻ¯ā§āϝ⧇, āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻĒā§āϰāĻ•āĻžāĻļ āĻ•āϰāĻžāϰ āφāϗ⧇ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϕ⧇ āĻ…āĻŦāĻļā§āϝāχ āϏāϰāĻžāϏāϰāĻŋ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

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

āωāĻĒāϰ⧇āϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻĒā§āϰāĻĨāĻŽā§‡ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āϏ⧇āϟ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ⧇ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻĒā§āϝāĻžāϰāĻžāĻŽāĻŋāϟāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻĄāĻŋāĻĢāĻ˛ā§āϟ āĻŽāĻžāύ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤ-āĻ­āĻŋāĻ¤ā§āϤāĻŋāĻ• āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ ( āĻļāĻ°ā§āϤāĻžāϧ⧀āύ āĻŽāĻžāύ ) āĻŽāĻžāύāϗ⧁āϞāĻŋ āϏāĻ‚āĻœā§āĻžāĻžāϝāĻŧāĻŋāϤ āĻ•āϰ⧇⧎ āĻāϟāĻŋ āĻĒā§āϰāϤāĻŋāϟāĻŋ āωāĻĒāĻžāĻĻāĻžāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϐāĻšā§āĻ›āĻŋāĻ• āĻŦāĻŋāĻŦāϰāĻŖ āϝ⧋āĻ— āĻ•āϰ⧇; āϕ⧋āĻĄ āĻŽāĻ¨ā§āϤāĻŦā§āϝ⧇āϰ āĻŽāϤ, āĻāϗ⧁āϞāĻŋ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀āϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻŦāĻ‚ āĻ…ā§āϝāĻžāĻĒ⧇ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāϝāĻŧ āύāĻžāĨ¤ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āύāĻŋāϝāĻŧāĻ¨ā§āĻ¤ā§āϰāϪ⧇āϰ āωāĻĻā§āĻĻ⧇āĻļā§āϝ⧇ āĻāĻ•āϟāĻŋ ETag āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤

Remote Config āĻŦā§āϝāĻžāĻ•āĻāĻ¨ā§āĻĄ APIāϗ⧁āϞāĻŋ āĻŦ⧇āĻļ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ āĻļāĻ°ā§āϤ āĻāĻŦāĻ‚ āϤ⧁āϞāύāĻž āĻ…āĻĒāĻžāϰ⧇āϟāϰ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇ āϝāĻž āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒ⧇āϰ āφāϚāϰāĻŖ āĻāĻŦāĻ‚ āĻšā§‡āĻšāĻžāϰāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀ āĻāĻŦāĻ‚ āĻāχ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāĻŋāϤ āĻ…āĻĒāĻžāϰ⧇āϟāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, āĻļāĻ°ā§āϤāϏāĻžāĻĒ⧇āĻ•ā§āώ āĻāĻ•ā§āϏāĻĒā§āϰ⧇āĻļāύ āϰ⧇āĻĢāĻžāϰ⧇āĻ¨ā§āϏ āĻĻ⧇āϖ⧁āύāĨ¤

HTTP āĻ¤ā§āϰ⧁āϟāĻŋ āϕ⧋āĻĄ

āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ āĻ…āĻ°ā§āĻĨ
200 āϏāĻĢāϞāĻ­āĻžāĻŦ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇
400 āĻāĻ•āϟāĻŋ āĻŦ⧈āϧāϤāĻž āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡āϛ⧇. āωāĻĻāĻžāĻšāϰāĻŖ āĻ¸ā§āĻŦāϰ⧂āĻĒ, āĻāĻ•āϟāĻŋ āĻ…āύ⧁āϰ⧋āϧ āϝāĻžāϤ⧇ āĻ…āύ⧁āĻŽā§‹āĻĻāĻŋāϤ āϏāĻ‚āĻ–ā§āϝāĻ• āϕ⧀-2000-āĻāϰ āĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻĨāĻžāϕ⧇ āϤāĻž āĻ¤ā§āϰ⧁āϟāĻŋ āĻŦāĻžāĻ°ā§āϤāĻž āϏāĻš 400 (āĻ–āĻžāϰāĻžāĻĒ āĻ…āύ⧁āϰ⧋āϧ) āĻĢ⧇āϰāϤ āĻĻ⧇āĻŦ⧇, Param count too large āĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“, āĻāχ HTTPS āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ āĻāχ āĻĻ⧁āϟāĻŋ āĻĒāϰāĻŋāĻ¸ā§āĻĨāĻŋāϤāĻŋāϤ⧇ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇:
  • āĻāĻ•āϟāĻŋ āϏāĻ‚āĻ¸ā§āĻ•āϰāϪ⧇āϰ āĻ…āĻŽāĻŋāϞ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡āϛ⧇ āĻ•āĻžāϰāĻŖ āφāĻĒāύāĻŋ āĻļ⧇āώāĻŦāĻžāϰ āĻāĻ•āϟāĻŋ ETag āĻŽāĻžāύ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āĻĒāϰ āĻĨ⧇āϕ⧇ āĻŽāĻžāύ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āϏ⧇āϟ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇⧎ āĻāϟāĻŋ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āĻāĻ•āϟāĻŋ āύāϤ⧁āύ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻāĻŦāĻ‚ ETag āĻŽāĻžāύ āĻĒ⧇āϤ⧇ āφāĻĒāύāĻžāϰ āĻāĻ•āϟāĻŋ GET āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āωāϚāĻŋāϤ, āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āϏ⧇āχ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻāĻŦāĻ‚ āύāϤ⧁āύ ETag āĻŽāĻžāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϜāĻŽāĻž āĻĻāĻŋāύ⧎
  • āĻāĻ•āϟāĻŋ PUT āĻ•āĻŽāĻžāĻ¨ā§āĻĄ (āφāĻĒāĻĄā§‡āϟ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻ…āύ⧁āϰ⧋āϧ) āĻāĻ•āϟāĻŋ If-Match āĻļāĻŋāϰ⧋āύāĻžāĻŽ āωāĻ˛ā§āϞ⧇āĻ– āύāĻž āĻ•āϰ⧇āχ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āĻ›āĻŋāϞ⧎
401 āĻāĻ•āϟāĻŋ āĻ…āύ⧁āĻŽā§‹āĻĻāύ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡āϛ⧇ (āϕ⧋āύāĻ“ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧāύāĻŋ āĻŦāĻž Firebase Remote Config REST API āĻ•ā§āϞāĻžāωāĻĄ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāϰ⧀ āĻ•āύāϏ⧋āϞ⧇ āφāĻĒāύāĻžāϰ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇ āϝ⧋āĻ— āĻ•āϰāĻž āĻšāϝāĻŧāύāĻŋ)
403 āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻŽāĻžāĻŖā§€āĻ•āϰāĻŖ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡āϛ⧇ (āϭ⧁āϞ āĻ…ā§āϝāĻžāĻ•ā§āϏ⧇āϏ āĻŸā§‹āϕ⧇āύ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇)
500 āĻāĻ•āϟāĻŋ āĻ…āĻ­ā§āϝāĻ¨ā§āϤāϰ⧀āĻŖ āĻ¤ā§āϰ⧁āϟāĻŋ āϘāĻŸā§‡āϛ⧇⧎ āĻāχ āĻ¤ā§āϰ⧁āϟāĻŋ āĻĻ⧇āĻ–āĻž āĻĻāĻŋāϞ⧇, āĻāĻ•āϟāĻŋ Firebase āϏāĻŽāĻ°ā§āĻĨāύ āϟāĻŋāĻ•āĻŋāϟ āĻĢāĻžāχāϞ āĻ•āϰ⧁āύ

200-āĻāϰ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄā§‡āϰ āĻ…āĻ°ā§āĻĨ āĻšāϞ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ (āĻĒā§āϰāĻ•āĻ˛ā§āĻĒ⧇āϰ āϜāĻ¨ā§āϝ āĻĒāϰāĻžāĻŽāĻŋāϤāĻŋ, āĻŽāĻžāύ āĻāĻŦāĻ‚ āĻļāĻ°ā§āϤāĻžāĻŦāϞ⧀) āφāĻĒāĻĄā§‡āϟ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ āĻāĻ–āύ āĻāχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻŽāύ āĻ…ā§āϝāĻžāĻĒāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧ⧎ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āϕ⧋āĻĄāϗ⧁āϞāĻŋ āύāĻŋāĻ°ā§āĻĻ⧇āĻļ āĻ•āϰ⧇ āϝ⧇ āĻĒā§‚āĻ°ā§āĻŦ⧇ āĻŦāĻŋāĻĻā§āϝāĻŽāĻžāύ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋ āĻāĻ–āύāĻ“ āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āϰāϝāĻŧ⧇āϛ⧇⧎

āφāĻĒāύāĻŋ āφāĻĒāύāĻžāϰ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋ āϜāĻŽāĻž āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āĻĒāϰ⧇, āφāĻĒāύāĻžāϰ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύāϗ⧁āϞāĻŋ āĻĒā§āϰāĻ¤ā§āϝāĻžāĻļāĻŋāϤāĻ­āĻžāĻŦ⧇ āĻĒā§āϰāĻĻāĻ°ā§āĻļāĻŋāϤ āĻšāĻšā§āϛ⧇ āĻ•āĻŋāύāĻž āϤāĻž āϝāĻžāϚāĻžāχ āĻ•āϰāϤ⧇ Firebase āĻ•āύāϏ⧋āϞ⧇ āϝāĻžāύ⧎ āĻāϟāĻŋ āĻ…āĻ¤ā§āϝāĻ¨ā§āϤ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻžāϰāĻŖ āĻļāĻ°ā§āϤāϗ⧁āϞāĻŋāϰ āĻ•ā§āϰāĻŽ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻŽā§‚āĻ˛ā§āϝāĻžāϝāĻŧāύ āĻ•āϰāĻž āĻšāϝāĻŧ āϤāĻž āĻĒā§āϰāĻ­āĻžāĻŦāĻŋāϤ āĻ•āϰ⧇ (āĻĒā§āϰāĻĨāĻŽ āĻļāĻ°ā§āϤ āϝāĻž true āĻŽā§‚āĻ˛ā§āϝāĻžāϝāĻŧāύ āĻ•āϰ⧇ āϤāĻž āĻ•āĻžāĻ°ā§āϝāĻ•āϰ āĻšāϝāĻŧ)āĨ¤

ETag āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāĻŦāĻ‚ āĻœā§‹āϰāĻĒā§‚āĻ°ā§āĻŦāĻ• āφāĻĒāĻĄā§‡āϟ

Remote Config REST API āϰ⧇āϏ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻāĻŦāĻ‚ āϏāĻŽā§āĻĒāĻĻ⧇āϰ āĻ“āĻ­āĻžāϰāĻ˛ā§āϝāĻžāĻĒāĻŋāĻ‚ āφāĻĒāĻĄā§‡āϟ āĻĒā§āϰāϤāĻŋāϰ⧋āϧ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āϏāĻ¤ā§āϤāĻž āĻŸā§āϝāĻžāĻ— (ETag) āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤ ETags āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύāϤ⧇, ETag - HTTP āĻĻ⧇āϖ⧁āύāĨ¤

REST API-āĻāϰ āϜāĻ¨ā§āϝ, Google āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰ⧇ āϝ⧇ āφāĻĒāύāĻŋ āϏāĻžāĻŽā§āĻĒā§āϰāϤāĻŋāĻ• GET āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻĻāĻ¤ā§āϤ ETag āĻ•ā§āϝāĻžāĻļ⧇ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ PUT āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āχāĻ¸ā§āϝ⧁ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ If-Match āĻ…āύ⧁āϰ⧋āϧ āĻļāĻŋāϰ⧋āύāĻžāĻŽā§‡ āϏ⧇āχ ETag āĻŽāĻžāύāϟāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧁āύāĨ¤ āϝāĻĻāĻŋ āφāĻĒāύāĻžāϰ PUT āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āĻĢāϞāĻžāĻĢāϞ āĻāĻ•āϟāĻŋ HTTPS āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ āϕ⧋āĻĄ 409 āĻšāϝāĻŧ, āϤāĻžāĻšāϞ⧇ āφāĻĒāύāĻžāϰ āĻĒāϰāĻŦāĻ°ā§āϤ⧀ PUT āĻ•āĻŽāĻžāĻ¨ā§āĻĄā§‡āϰ āϏāĻžāĻĨ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ ETag āĻāĻŦāĻ‚ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻ…āĻ°ā§āϜāύ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϕ⧇ āĻāĻ•āϟāĻŋ āύāϤ⧁āύ GET āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āχāĻ¸ā§āϝ⧁ āĻ•āϰāĻž āωāϚāĻŋāϤāĨ¤

āφāĻĒāύāĻŋ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟāϟāĻŋāϕ⧇ āύāĻŋāĻŽā§āύ⧋āĻ•ā§āϤāĻ­āĻžāĻŦ⧇ āφāĻĒāĻĄā§‡āϟ āĻ•āϰāϤ⧇ āĻŦāĻžāĻ§ā§āϝ āĻ•āϰāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ ETag āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻĨ⧇āϕ⧇ āϏ⧁āϰāĻ•ā§āώāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ: If-Match: * āϝāĻžāχāĻšā§‹āĻ•, āĻāχ āĻĒāĻĻā§āϧāϤāĻŋāϰ āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰāĻž āĻšāϝāĻŧ āύāĻž āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āĻŸā§‡āϰ āφāĻĒāĻĄā§‡āϟāϗ⧁āϞāĻŋ āĻšāĻžāϰāĻžāύ⧋āϰ āĻā§āρāĻ•āĻŋ āύāĻŋāϝāĻŧ⧇ āĻĨāĻžāϕ⧇ āϝāĻĻāĻŋ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āφāĻĒāĻĄā§‡āϟ āĻ•āϰ⧇āĨ¤ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻŦāĻž API āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻāĻŦāĻ‚ Firebase āĻ•āύāϏ⧋āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āĻĨ⧇āϕ⧇ āĻŦāĻŋāϰ⧋āϧāĻĒā§‚āĻ°ā§āĻŖ āφāĻĒāĻĄā§‡āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āĻāχ āϧāϰāύ⧇āϰ āĻĻā§āĻŦāĻ¨ā§āĻĻā§āĻŦ āϘāϟāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Remote Config āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĒāϰāĻŋāϚāĻžāϞāύāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āύāĻŋāĻ°ā§āĻĻ⧇āĻļāύāĻžāϰ āϜāĻ¨ā§āϝ, āĻĻā§‚āϰāĻŦāĻ°ā§āϤ⧀ āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻŸā§‡āĻŽāĻĒā§āϞ⧇āϟ āĻāĻŦāĻ‚ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ āĻĻ⧇āϖ⧁āύāĨ¤