рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдмрджрд▓реЗрдВ

рдЗрд╕ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рдЬрд╝рд░рд┐рдП 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 рдХрд╛ рдмреИрдХрдПрдВрдб, рдХрд╕реНрдЯрдо рдЯреВрд▓ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ

рдЗрд╕ рдЧрд╛рдЗрдб рдХреЗ рдЗрди рд╕реЗрдХреНрд╢рди рдореЗрдВ, Remote Config рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ рдХреА рдорджрдж рд╕реЗ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ. REST API рдХреЗ рдЬрд╝рд░рд┐рдП рдЗрди рдЯрд╛рд╕реНрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рдПрдХ рд╕реИрдВрдкрд▓ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рджреЗрдЦреЗрдВ:

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 рдлрд╝реЙрд░реНрдореИрдЯ рдореЗрдВ рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреА рд╣реЛрдЧреА.

рдЕрдкрдиреЗ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдЬреА рдкрд╛рд╕рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  1. Firebase рдХрдВрд╕реЛрд▓ рдореЗрдВ, рд╕реЗрдЯрд┐рдВрдЧ > рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдЦреЛрд▓реЗрдВ.

  2. рдирдИ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ. рдЗрд╕рдХреЗ рдмрд╛рдж, рдХреБрдВрдЬреА рдЬрдирд░реЗрдЯ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ.

  3. рдХреБрдВрдЬреА рд╡рд╛рд▓реА 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 (рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз) рджрд┐рдЦреЗрдЧрд╛. рд╕рд╛рде рд╣реА, рдПрдЪрдЯреАрдЯреАрдкреАрдПрд╕ рд╕реНрдЯреЗрдЯрд╕ рдХреЛрдб рдЗрди рджреЛ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рднреА рджрд┐рдЦ рд╕рдХрддрд╛ рд╣реИ:
  • рд╡рд░реНрд╢рди рдХреЗ рдореЗрд▓ рди рдЦрд╛рдиреЗ рдХреА рдЧрдбрд╝рдмрдбрд╝реА рд╣реБрдИ рд╣реИ. рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЬрдм рдИрдЯреИрдЧ рд╡реИрд▓реНрдпреВ рд╡рд╛рдкрд╕ рдкрд╛рдИ рдереА, рддрдм рд╕реЗ рд╡реИрд▓реНрдпреВ рдФрд░ рд╢рд░реНрддреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ. рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ GET рдХрдорд╛рдВрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП. рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдирдпрд╛ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдФрд░ рдИрдЯреИрдЧ рд╡реИрд▓реНрдпреВ рдорд┐рд▓реЗрдЧреА. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ. рдлрд┐рд░, рдЙрд╕ рдЯреЗрдВрдкреНрд▓реЗрдЯ рдФрд░ рдирдИ рдИрдЯреИрдЧ рд╡реИрд▓реНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдХреЗ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВ.
  • If-Match рд╣реЗрдбрд░ рддрдп рдХрд┐рдП рдмрд┐рдирд╛, PUT рдХрдорд╛рдВрдб (Remote Config рдЯреЗрдВрдкреНрд▓реЗрдЯ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз) рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛.
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 рдЯреЗрдВрдкреНрд▓реЗрдЯ рдХреЗ рд╡рд░реНрд╢рди рдореИрдиреЗрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд┐рдореЛрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЯреЗрдВрдкреНрд▓реЗрдЯ рдФрд░ рд╡рд░реНрд╢рдирд┐рдВрдЧ рд▓реЗрдЦ рдкрдврд╝реЗрдВ.