рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЬрд╝рд░рд┐рдП JSON рдлрд╝реЙрд░реНрдореИрдЯ рд╡рд╛рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрдиреНрд╣реЗрдВ Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ. рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдмреИрдХрдПрдВрдб рдкрд░ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдХреНрд▓рд╛рдЗрдВрдЯ рдРрдкреНрд▓рд┐рдХреЗрд╢рди, рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рдЗрди рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рдлрд╝реЗрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ.
рдЗрд╕ рдЧрд╛рдЗрдб рдореЗрдВ рдмрддрд╛рдП рдЧрдП Remote Config REST API рдпрд╛ Admin SDKs рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреА рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ, Remote Config рдореЗрдВ рдХрд┐рдП рдЧрдП рдмрджрд▓рд╛рд╡реЛрдВ рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреА рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдЗрдВрдЯрд┐рдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Remote Config рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ рдХреА рдорджрдж рд╕реЗ, рдпреЗ рдХрд╛рдо рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
- рдЕрдкрдбреЗрдЯ Remote Config рд╢реЗрдбреНрдпреВрд▓ рдХрд░рдирд╛. рдХреНрд░реЙрди рдЬреЙрдм рдХреЗ рд╕рд╛рде рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, Remote Config рд╡реИрд▓реНрдпреВ рдХреЛ рдирд┐рдпрдорд┐рдд рддреМрд░ рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
- рдЕрдкрдиреЗ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рд╣рдХ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ Firebase Remote Config рдкрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмреИрдЪ рдЗрдВрдкреЛрд░реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧ рд╡реИрд▓реНрдпреВ.
Cloud Functions for Firebase рдХреЗ рд╕рд╛рде Remote Config рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдЗрд╕рд╕реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдЗрд╡реЗрдВрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдкрдХреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡реИрд▓реНрдпреВ рдмрджрд▓рддреА рд╣реИрдВ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрд┐рд╕реА рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдкреНрд░рдореЛрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Remote Config рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЬрдм рдЖрдкрдХреЛ рдкрддрд╛ рдЪрд▓реЗ рдХрд┐ рдХрд╛рдлрд╝реА рд▓реЛрдЧреЛрдВ рдиреЗ рдирдИ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рддреЛ рдЙрд╕ рдкреНрд░рдореЛрд╢рди рдХреЛ рдЕрдкрдиреЗ-рдЖрдк рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рдЗрди рд╕реЗрдХреНрд╢рди рдореЗрдВ, Remote Config рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ рдХреА рдорджрдж рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. REST API рдХреЗ рдЬрд╝рд░рд┐рдП рдЗрди рдЯрд╛рд╕реНрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╕реИрдВрдкрд▓ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦреЗрдВ:
- Firebase Remote Config REST API Java Quickstart
- Firebase Remote Config REST API Node.js Quickstart
- Firebase Remote Config REST API Python Quickstart
Firebase Admin SDK рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
Admin SDK, рд╕рд░реНрд╡рд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ. рдЗрд╕рдХреА рдорджрдж рд╕реЗ, рдЦрд╛рд╕ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рд╡рд╛рд▓реЗ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╕реЗ Firebase рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. Remote Config рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, Admin SDK рдХреА рдорджрдж рд╕реЗ Firebase рдкрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЯреЛрдХрди рдЬрдирд░реЗрдЯ рдФрд░ рдЙрдирдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ. рд╕рд╛рде рд╣реА, Realtime Database рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рд╛ рдФрд░ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. Admin SDK рдЬрд╝рд░реВрд░реА рд╢рд░реНрддреЗрдВ рдФрд░ рд╕реЗрдЯрдЕрдк рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕рд░реНрд╡рд░ рдореЗрдВ Firebase Admin SDK рдЯреВрд▓ рдЬреЛрдбрд╝реЗрдВ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.
рд╕рд╛рдорд╛рдиреНрдп Remote Config рдлрд╝реНрд▓реЛ рдореЗрдВ, рдЖрдкрдХреЛ рдореМрдЬреВрджрд╛ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдореЗрдВ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЧреНрд░реБрдк рдФрд░ рд╢рд░реНрддреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреА рдкреБрд╖реНрдЯрд┐ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЙрд╕реЗ рдкрдмреНрд▓рд┐рд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдПрд╕рдбреАрдХреЗ рд╕реЗ рдорд┐рд▓реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреА рд╣реЛрдЧреА.
рдПрд╕рдбреАрдХреЗ рдХреЛ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛
рдЬрдм Admin SDK рдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ SDK рдЯреВрд▓ Google рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, FIREBASE_CONFIG
рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ рд╡рд┐рдХрд▓реНрдк рдкрдврд╝рддрд╛ рд╣реИ.
рдЕрдЧрд░ FIREBASE_CONFIG
рд╡реИрд░рд┐рдПрдмрд▓ рдХрд╛ рдХреЙрдиреНрдЯреЗрдВрдЯ {
рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрд╕реЗ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рддреМрд░ рдкрд░ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдРрд╕рд╛ рди рдХрд░рдиреЗ рдкрд░, SDK рдпрд╣ рдорд╛рди рд▓реЗрдЧрд╛ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ, рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╡рд╛рд▓реА JSON рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд╣реИ.
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
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);
рдореМрдЬреВрджрд╛ рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдкрд╛рдПрдВ
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрдирдХреЗ рд╡рд░реНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, рд╣рд░ рд╡рд░реНрд╢рди рдХреА рд▓рд╛рдЗрдлрд╝рдЯрд╛рдЗрдо рд╕реАрдорд┐рдд рд╣реЛрддреА рд╣реИ. рдпрд╣ рд▓рд╛рдЗрдлрд╝рдЯрд╛рдЗрдо, рд╡рд░реНрд╢рди рдмрдирдиреЗ рдХреЗ рд╕рдордп рд╕реЗ рд▓реЗрдХрд░ рдЙрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рд╣реЛрддреА рд╣реИ. рдпрд╣ 90 рджрд┐рдиреЛрдВ рдХреА рд╣реЛрддреА рд╣реИ. рд╕рд╛рде рд╣реА, рд╕реЗрд╡ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреА рдХреБрд▓ рд╕реАрдорд╛ 300 рд╣реЛрддреА рд╣реИ. рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЯреЗрдВрдкреНрд▓реЗрдЯ рдФрд░ рд╡рд░реНрд╢рди рджреЗрдЦреЗрдВ.
рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХрд╛ рдореМрдЬреВрджрд╛ рд╡рд░реНрд╢рди JSON рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
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); }); }
Java
Template template = FirebaseRemoteConfig.getInstance().getTemplateAsync().get(); // See the ETag of the fetched template. System.out.println("ETag from server: " + template.getETag());
Remote Config рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ, Remote Config рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЧреНрд░реБрдк рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "new_menu" рдирд╛рдо рд╡рд╛рд▓реЗ рдореМрдЬреВрджрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдЧреНрд░реБрдк рдореЗрдВ, рд╕реАрдЬрд╝рдирд▓ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдбрд┐рд╕рдкреНрд▓реЗ рдХреЛ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
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.") );
рдЗрд╕ рдПрдкреАрдЖрдИ рдХреА рдорджрдж рд╕реЗ, рдирдП рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЧреНрд░реБрдк рдмрдирд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реИрд▓реНрдпреВ, рд╢рд░реНрдд рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рддрдп рдХреА рдЧрдИ рд╡реИрд▓реНрдпреВ, рдФрд░ рдмреНрдпреМрд░реЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдкрдХреНрдХрд╛ рддреМрд░ рдкрд░ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.
рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рд╢рд░реНрддреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ, Remote Config рд╢рд░реНрддреЗрдВ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╡реИрд▓реНрдпреВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЗрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рд╛ рднреА рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирдИ рд╢рд░реНрдд рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП:
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));
рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдкрдХреНрдХрд╛ рддреМрд░ рдкрд░ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛.
Remote Config рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ, рдХрдИ рд╢рд░реНрддреЗрдВ рдФрд░ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддреЗ рд╣реИрдВ. рдЗрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рджрд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╢рд░реНрддреЛрдВ рдФрд░ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рд░реЗрдлрд╝рд░рдВрд╕ рджреЗрдЦреЗрдВ.
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛
рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдбреЗрдЯ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЙрдирдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рддрд░реАрдХрд╛ рдЕрдкрдирд╛рдПрдВ:
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()); } }
рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреА рдЗрд╕ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ, рдЗрди рдЧрдбрд╝рдмрдбрд╝рд┐рдпреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ: рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдбреБрдкреНрд▓реАрдХреЗрдЯ рдХреБрдВрдЬрд┐рдпрд╛рдВ, рд╢рд░реНрддреЛрдВ рдХреЗ рдЕрдорд╛рдиреНрдп рдирд╛рдо рдпрд╛ рдРрд╕реА рд╢рд░реНрддреЗрдВ рдЬреЛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИрдВ рдпрд╛ рдЧрд▓рдд рдлрд╝реЙрд░реНрдореИрдЯ рд╡рд╛рд▓реЗ рдИрдЯреИрдЧ.
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдХрд┐рд╕реА рдЕрдиреБрд░реЛрдз рдореЗрдВ рддрдп рд╕реАрдорд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдХреБрдВрдЬрд┐рдпрд╛рдВ (2,000) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдореИрд╕реЗрдЬ Param count too large
рджрд┐рдЦреЗрдЧрд╛.
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдирд╛
рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдФрд░ рдЙрд╕рдореЗрдВ рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЙрд╕реЗ рдкрдмреНрд▓рд┐рд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдмрддрд╛рдП рдЧрдП рддрд░реАрдХреЗ рд╕реЗ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдиреЗ рдкрд░, рдореМрдЬреВрджрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдирдП рдЪрд╛рд▓реВ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рд╡рд╣ рд╡рд░реНрд╢рди рдирдВрдмрд░ рдЕрд╕рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЗ рд╡рд░реНрд╢рди рдирдВрдмрд░ рд╕реЗ рдПрдХ рдЬрд╝реНрдпрд╛рджрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЙрд╕рдиреЗ рдмрджрд▓рд╛ рд╣реИ.
рдЕрдЧрд░ рдЬрд╝рд░реВрд░реА рд╣реЛ, рддреЛ 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); }); }
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 рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, Remote Config рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
рдЗрд╕ рд╕реЗрдХреНрд╢рди рдореЗрдВ, https://firebaseremoteconfig.googleapis.com
рдкрд░ рдореМрдЬреВрдж Remote Config REST API рдХреА рдореБрдЦреНрдп рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ.
рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рд░реЗрдлрд╝рд░рдВрд╕ рджреЗрдЦреЗрдВ.
рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдРрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкрд╛рдирд╛
Firebase рдкреНрд░реЛрдЬреЗрдХреНрдЯ, Google рдХреЗ рд╕реЗрд╡рд╛ рдЦрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ. рдЗрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд░реНрд╡рд░ рдпрд╛ рднрд░реЛрд╕реЗрдордВрдж рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╕реЗ Firebase рд╕рд░реНрд╡рд░ рдПрдкреАрдЖрдИ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЕрдЧрд░ рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рд╕реНрдерд╛рдиреАрдп рддреМрд░ рдкрд░ рдбреЗрд╡рд▓рдк рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдСрди-рдкреНрд░рд┐рдорд╛рдЗрд╕реЗрд╕ рдкрд░ рдбрд┐рдкреНрд▓реЙрдп рдХрд░рдирд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рд╕реЗ рдорд┐рд▓реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕реЗ Firebase рдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ JSON рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреА рд╣реЛрдЧреА.
рдЕрдкрдиреЗ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдкрд╛рд╕рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, рд╕реЗрдЯрд┐рдВрдЧ > рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдЦреЛрд▓реЗрдВ.
рдирдИ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ.
рдХреБрдВрдЬреА рд╡рд╛рд▓реА JSON рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрд╡ рдХрд░реЗрдВ.
рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЗ рдЬрд╝рд░рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╕рдордп, рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рджреЗрдиреЗ рдХреЗ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддреЗ рд╣реИрдВ. GOOGLE_APPLICATION_CREDENTIALS рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреЛрдб рдореЗрдВ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреА рдХреБрдВрдЬреА рдХрд╛ рдкрд╛рде рд╕рд╛рдлрд╝ рддреМрд░ рдкрд░ рдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдЬрд╝реНрдпрд╛рджрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рд╡реИрд░рд┐рдПрдмрд▓ GOOGLE_APPLICATION_CREDENTIALS рдХреЛ рдЙрд╕ JSON рдлрд╝рд╛рдЗрд▓ рдХреЗ рдлрд╝рд╛рдЗрд▓ рдкрд╛рде рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреА рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ. рдпрд╣ рд╡реИрд░рд┐рдПрдмрд▓ рд╕рд┐рд░реНрдлрд╝ рдЖрдкрдХреЗ рдореМрдЬреВрджрд╛ рд╢реЗрд▓ рд╕реЗрд╢рди рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдкрдХреЛ рдирдпрд╛ рд╕реЗрд╢рди рдЦреЛрд▓рдирд╛ рд╣реИ, рддреЛ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реЗрдЯ рдХрд░реЗрдВ.
Linux рдпрд╛ macOS
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"
рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ
PowerShell рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ:
$env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"
рдКрдкрд░ рджрд┐рдП рдЧрдП рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ (рдПрдбреАрд╕реА) рдЖрдкрдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ Google рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рдПрдирд╡рд╛рдпрд░рдореЗрдВрдЯ рдореЗрдВ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдпрд╛ рдЪрд▓рд╛рдиреЗ рдХреЗ рджреМрд░рд╛рди, рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ.
рдХрдо рд╕рдордп рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп OAuth 2.0 рдРрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП Google Auth Library рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдкрдиреЗ 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 рд╡реЗрдм рдЯреЛрдХрди рджреЗрдЦреЗрдВ.
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();
}
рдРрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдХреА рд╕рдордпрд╕реАрдорд╛ рдЦрддреНрдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдРрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЯреЛрдХрди рд░реАрдлрд╝реНрд░реЗрд╢ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдЕрдкрдиреЗ-рдЖрдк рдХреЙрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ.
Remote Config рдХреЛ рдРрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдХреЛрдк https://www.googleapis.com/auth/firebase.remoteconfig
рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ.
рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╕рдордп рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрдирдХреЗ рд╡рд░реНрд╢рди рд╣реЛрддреЗ рд╣реИрдВ. рд╕рд╛рде рд╣реА, рд╣рд░ рд╡рд░реНрд╢рди рдХреА рд▓рд╛рдЗрдлрд╝рдЯрд╛рдЗрдо рд╕реАрдорд┐рдд рд╣реЛрддреА рд╣реИ. рдпрд╣ рд▓рд╛рдЗрдлрд╝рдЯрд╛рдЗрдо, рд╡рд░реНрд╢рди рдмрдирдиреЗ рдХреЗ рд╕рдордп рд╕реЗ рд▓реЗрдХрд░ рдЙрд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рддрдХ рд╣реЛрддреА рд╣реИ. рдпрд╣ 90 рджрд┐рдиреЛрдВ рдХреА рд╣реЛрддреА рд╣реИ. рд╕рд╛рде рд╣реА, рд╕реЗрд╡ рдХрд┐рдП рдЧрдП рд╡рд░реНрд╢рди рдХреА рдХреБрд▓ рд╕реАрдорд╛ 300 рд╣реЛрддреА рд╣реИ. рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рдЯреЗрдВрдкреНрд▓реЗрдЯ рдФрд░ рд╡рд░реНрд╢рди рджреЗрдЦреЗрдВ.
рдореМрдЬреВрджрд╛ рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдкрд╛рдПрдВ
рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХрд╛ рдореМрдЬреВрджрд╛ рд╡рд░реНрд╢рди JSON рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
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 рднреА рд╢рд╛рдорд┐рд▓ рд╣реИ) рдХреЛ рджреВрд╕рд░реА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддреА рд╣реИ.
рд░реЙ рдПрдЪрдЯреАрдЯреАрдкреА рдЕрдиреБрд░реЛрдз
Host: firebaseremoteconfig.googleapis.com GET /v1/projects/my-project-id/remoteConfig HTTP/1.1 Authorization: Bearer token Accept-Encoding: gzip
рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕реЗ, рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ JSON рдорд┐рд▓рддрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдПрдХ рдЕрд▓рдЧ рд╣реЗрдбрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ ETag рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ. рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓, рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛
рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдкрдбреЗрдЯ рдХреЛ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЙрдирдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реЛрддрд╛ рд╣реИ.
?validate_only=true
рдпреВрдЖрд░рдПрд▓ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬреЛрдбрд╝рдХрд░, рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ.
рдЬрд╡рд╛рдм рдореЗрдВ, рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб 200 рдФрд░ -0
рд╕рдлрд╝рд┐рдХреНрд╕ рд╡рд╛рд▓рд╛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдИрдЯреИрдЧ рдорд┐рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЕрдкрдбреЗрдЯ рдХреА рдкреБрд╖реНрдЯрд┐ рд╣реЛ рдЧрдИ рд╣реИ. 200 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рднреА рд░рд┐рд╕реНрдкреЙрдиреНрд╕ рдорд┐рд▓рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ JSON рдбреЗрдЯрд╛ рдореЗрдВ рдРрд╕реА рдЧрдбрд╝рдмрдбрд╝рд┐рдпрд╛рдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдкрдмреНрд▓рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдареАрдХ рдХрд░рдирд╛ рдЬрд╝рд░реВрд░реА рд╣реИ.
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛
рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рд╡рд╛рдкрд╕ рдкрд╛рдиреЗ рдФрд░ 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
рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП, рдХреЙрдиреНрдЯреЗрдВрдЯ рдХреЛ "@" рд╡рд░реНрдг рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦреЗрдВ.
рд░реЙ рдПрдЪрдЯреАрдЯреАрдкреА рдЕрдиреБрд░реЛрдз
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 рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ, рдХрдИ рд╢рд░реНрддреЗрдВ рдФрд░ рддреБрд▓рдирд╛ рдСрдкрд░реЗрдЯрд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рддреЗ рд╣реИрдВ. рдЗрдирдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ, рдЕрдкрдиреЗ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдФрд░ рджрд┐рдЦрдиреЗ рдХреЗ рддрд░реАрдХреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ. рд╢рд░реНрддреЛрдВ рдФрд░ рдЗрди рд╢рд░реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╢рд░реНрдд рдХреЗ рд╕рд╛рде рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХрд╛ рд░реЗрдлрд╝рд░рдВрд╕ рджреЗрдЦреЗрдВ.
рдПрдЪрдЯреАрдЯреАрдкреА рдЧрдбрд╝рдмрдбрд╝реА рдХреЗ рдХреЛрдб
рд╕реНрдерд┐рддрд┐ рдХреЛрдб | рдорддрд▓рдм |
---|---|
200 | рдЕрдкрдбреЗрдЯ рд╣реЛ рдЧрдпрд╛ |
400 | рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдЧрдбрд╝рдмрдбрд╝реА рд╣реБрдИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЧрд░ рдХрд┐рд╕реА рдЕрдиреБрд░реЛрдз рдореЗрдВ рддрдп рд╕реАрдорд╛ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рдХреБрдВрдЬрд┐рдпрд╛рдВ (2,000) рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЧрдбрд╝рдмрдбрд╝реА рдХрд╛ рдореИрд╕реЗрдЬ Param count too large рдХреЗ рд╕рд╛рде 400 (рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз) рджрд┐рдЦреЗрдЧрд╛.
рд╕рд╛рде рд╣реА, рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдЗрди рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
|
401 | рдЕрдиреБрдорддрд┐ рд╕реЗ рдЬреБрдбрд╝реА рдЧрдбрд╝рдмрдбрд╝реА рд╣реБрдИ рд╣реИ. рдЬреИрд╕реЗ, рдРрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдпрд╛ Cloud Developer Console рдореЗрдВ, рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ Firebase Remote Config REST API рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ |
403 | рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рдЧрдбрд╝рдмрдбрд╝реА рд╣реБрдИ (рдЧрд▓рдд рдРрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) |
500 | рдПрдХ рдЖрдВрддрд░рд┐рдХ рдЧрдбрд╝рдмрдбрд╝реА рд╣реБрдИ. рдЕрдЧрд░ рдпрд╣ рдЧрдбрд╝рдмрдбрд╝реА рд╣реЛрддреА рд╣реИ, рддреЛ Firebase рд╕рд╣рд╛рдпрддрд╛ рдЯрд┐рдХрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд░реЗрдВ |
рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб 200 рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░, рд╡реИрд▓реНрдпреВ, рдФрд░ рд╢рд░реНрддреЗрдВ) рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рд╕рд╛рде рд╣реА, рдЕрдм рдпрд╣ рдЙрди рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ рдЬреЛ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ. рдЕрдиреНрдп рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдЕрдм рднреА рд▓рд╛рдЧреВ рд╣реИ.
рдЕрдкрдиреЗ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдореЗрдВ рдЕрдкрдбреЗрдЯ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, Firebase рдХрдВрд╕реЛрд▓ рдкрд░ рдЬрд╛рдПрдВ. рдпрд╣рд╛рдВ рдпрд╣ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЗ рдмрджрд▓рд╛рд╡, рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рджрд┐рдЦ рд░рд╣реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ. рдпрд╣ рдЗрд╕рд▓рд┐рдП рдЬрд╝рд░реВрд░реА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢рд░реНрддреЛрдВ рдХреЗ рдХреНрд░рдо рд╕реЗ рдпрд╣ рддрдп рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХрд╛ рдЖрдХрд▓рди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛. рдЬреЛ рд╢рд░реНрдд рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ true
рдХреЗ рддреМрд░ рдкрд░ рддрдп рдХреА рдЬрд╛рддреА рд╣реИ рдЙрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ.
ETag рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдФрд░ рдлрд╝реЛрд░реНрд╕ рдЕрдкрдбреЗрдЯ
Remote Config REST API, рд░реЗрд╕ рдХрдВрдбреАрд╢рди рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдУрд╡рд░рд▓реИрдк рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдХрд╛рдИ рдЯреИрдЧ (рдИрдЯреИрдЧ) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИ. ETag рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╝реНрдпрд╛рджрд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, ETag - рдПрдЪрдЯреАрдЯреАрдкреА рджреЗрдЦреЗрдВ.
REST API рдХреЗ рд▓рд┐рдП, Google рдХрд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕рдмрд╕реЗ рд╣рд╛рд▓ рд╣реА рдХреА GET
рдХрдорд╛рдВрдб рд╕реЗ рдорд┐рд▓реЗ ETag рдХреЛ рдХреИрд╢ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ. рд╕рд╛рде рд╣реА, PUT
рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░рддреЗ рд╕рдордп, If-Match
рдЕрдиреБрд░реЛрдз рд╣реЗрдбрд░ рдореЗрдВ рдЙрд╕ ETag рд╡реИрд▓реНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВ. рдЕрдЧрд░ рдЖрдкрдХреА PUT
рдХрдорд╛рдВрдб рд╕реЗ рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб 409 рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдирдИ GET
рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдирдпрд╛ рдИрдЯреИрдЧ рдФрд░ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЕрдЧрд▓реА PUT
рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ.
рдИрдЯреИрдЧ рдФрд░ рдЗрд╕рд╕реЗ рдорд┐рд▓рдиреЗ рд╡рд╛рд▓реА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдЗрди рддрд░реАрдХреЛрдВ рд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ: If-Match: *
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рддрд░реАрдХреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрд╕рд╕реЗ рдЖрдкрдХреЗ Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЗ рдЕрдкрдбреЗрдЯ рдорд┐рдЯ рд╕рдХрддреЗ рд╣реИрдВ. рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЯрдХрд░рд╛рд╡, рдПрдкреАрдЖрдИ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдпрд╛ рдПрдкреАрдЖрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ Firebase рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рдмреАрдЪ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ.
Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЗ рд╡рд░реНрд╢рди рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдФрд░ рд╡рд░реНрд╢рдирд┐рдВрдЧ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.