āĻāĻ āĻĻāϏā§āϤāĻžāĻŦā§āĻāĻāĻŋ āĻŦāϰā§āĻŖāύāĻž āĻāϰ⧠āϝ⧠āĻāĻĒāύāĻŋ āĻā§āĻāĻžāĻŦā§ āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϝāĻžāĻāĻŋāĻāĻāĻžāĻŦā§ 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-āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻ āĻāĻžāĻāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻāϰ⧠āĻāĻŽāύ āĻāĻŋāĻā§ āĻā§āĻĄ āĻĒāϰā§āϝāĻžāϞā§āĻāύāĻž āĻāϰāϤā§, āĻāĻ āύāĻŽā§āύāĻž āĻ ā§āϝāĻžāĻĒāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻĻā§āĻā§āύ:
- āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āϰāĻŋāĻŽā§āĻ āĻāύāĻĢāĻŋāĻ REST API āĻāĻžāĻāĻž āĻā§āĻāĻāϏā§āĻāĻžāϰā§āĻ
- Firebase Remote Config REST API Node.js Quickstart
- āĻĢāĻžāϝāĻŧāĻžāϰāĻŦā§āϏ āϰāĻŋāĻŽā§āĻ āĻāύāĻĢāĻŋāĻ 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 āĻĢāϰā§āĻŽā§āϝāĻžāĻā§ āĻāĻāĻāĻŋ āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āĻā§ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāϤ⧠āĻšāĻŦā§ā§ˇ
āĻāĻĒāύāĻžāϰ āĻĒāϰāĻŋāώā§āĻŦāĻž āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻā§āϰ āĻāύā§āϝ āĻāĻāĻāĻŋ āĻŦā§āϝāĻā§āϤāĻŋāĻāϤ āĻā§ āĻĢāĻžāĻāϞ āϤā§āϰāĻŋ āĻāϰāϤā§:
Firebase āĻāύāϏā§āϞā§, āϏā§āĻāĻŋāĻāϏ > āĻĒāϰāĻŋāώā§āĻŦāĻž āĻ ā§āϝāĻžāĻāĻžāĻāύā§āĻ āĻā§āϞā§āύāĨ¤
āĻā§āύāĻžāϰā§āĻ āύāĻŋāĻ āĻĒā§āϰāĻžāĻāĻā§āĻ āĻā§ āĻā§āϞāĻŋāĻ āĻāϰā§āύ, āϤāĻžāϰāĻĒāϰ āĻā§āύāĻžāϰā§āĻ āĻā§ āĻā§āϞāĻŋāĻ āĻāϰ⧠āύāĻŋāĻļā§āĻāĻŋāϤ āĻāϰā§āύāĨ¤
āĻā§ āĻāĻā§ āĻāĻŽāύ 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 āϏā§āĻā§āϝāĻžāĻāĻžāϏ āĻā§āĻĄ āĻāĻ āĻĻā§āĻāĻŋ āĻĒāϰāĻŋāϏā§āĻĨāĻŋāϤāĻŋāϤ⧠āĻāĻāϤ⧠āĻĒāĻžāϰā§:
|
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 āĻā§āĻŽāĻĒā§āϞā§āĻ āϏāĻāϏā§āĻāϰāĻŖ āĻĒāϰāĻŋāĻāĻžāϞāύāĻžāϰ āĻŦāĻŋāώāϝāĻŧā§ āύāĻŋāϰā§āĻĻā§āĻļāύāĻžāϰ āĻāύā§āϝ, āĻĻā§āϰāĻŦāϰā§āϤ⧠āĻāύāĻĢāĻŋāĻāĻžāϰ āĻā§āĻŽāĻĒā§āϞā§āĻ āĻāĻŦāĻ āϏāĻāϏā§āĻāϰāĻŖ āĻĻā§āĻā§āύāĨ¤