Skip to content

Commit 7f9795a

Browse files
committed
remote config post added
1 parent e8d8250 commit 7f9795a

File tree

5 files changed

+71
-0
lines changed

5 files changed

+71
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
---
2+
layout: post
3+
title: "Remote Config"
4+
date: 2019-04-08
5+
categories: ["Firebase"]
6+
image: firebase/remote_config
7+
github: firebase/tree/master/remote_config
8+
description: "Firebase"
9+
version: Firebase-Config 16.1
10+
keywords: "firebase, chmura, konfiguracja, ustawienia, zdalna, parametr, warunek, remote, config, settings, parameter, condition, android, programowanie, programming"
11+
---
12+
13+
## Wprowadzenie
14+
`Remote Config` jest usługą w chmurze, która pozwala na zmianę zachowania, ustawień czy wyglądu aplikacji bez konieczności pobierania aktualizacji. Za pomocą `konsoli Firebase` lub `REST API` można kontrolować i propagować wartości konfiguracji dla wszystkich lub wybranej grupy użytkowników. Dodatkowo wykorzystanie danych z usługi `Analytics` ułatwia analizę grup odbiorców. Aplikacja sprawdza dostępność aktualizacji, przeprowadza modyfikacje ustawień (bez wpływu na wydajność) przechowując konfiguracje w obiekcie `Singleton`, a w przypadku braku zmian na serwerze wykorzystuje lokalne wartości domyślne.
15+
16+
## Parametry i warunki
17+
Konfiguracja składa się z parametrów opisanych `parą klucz-wartość` i `wartościami domyślnymi` oraz `warunkami` (zbiór reguł) używanymi w celu kierowania konfiguracji do wybranego segmentu odbiorców. Konstruując wyrażenia warunkowe można wykorzystać m.in. następujące reguły: `wersja aplikacja`, `wersja systemu`, `kraj`, `region`, `język`, `właściwość użytkownika`, `losowość`. Zgodnie z ustalonymi priorytetami najpierw sprawdzane są wartości po stronie serwera, które przyjmują wartość dla pierwszego spełnionego warunku. Jeśli żaden warunek nie został spełniony wówczas zwracana jest wartość domyślna z serwera lub lokalna, a w przypadku jej braku przyjmowana jest domyślna wartość inicjalizacyjna danego typu (np. `Int = 0`, `Boolean = false`).
18+
19+
![Parametry i warunki](/assets/img/diagrams/firebase/remote_config_parameters.png){: .center-image }
20+
21+
## Użycie
22+
Aby wykorzystać Remote Config w aplikacji należy dodać parametry i warunki w konsoli Firebase (lub przy pomocy REST API), uzyskać instancję `FirebaseRemoteConfig`, ustawić domyślne lokalne wartości parametrów w aplikacji w pliku zasobów `xml` (lub w obiekcie `Map`), użyć parametry w kodzie oraz podjąć próbę pobrania konfiguracji z serwera metodą `fetch`.
23+
24+
{% highlight xml %}
25+
<!-- remote config defaults -->
26+
<?xml version="1.0" encoding="utf-8"?>
27+
<defaultsMap>
28+
<entry>
29+
<key>show_tutorial</key>
30+
<value>false</value>
31+
</entry>
32+
<entry>
33+
<key>skin</key>
34+
<value>old</value>
35+
</entry>
36+
</defaultsMap>
37+
{% endhighlight %}
38+
39+
{% highlight kotlin %}
40+
//get instance
41+
val remoteConfig = FirebaseRemoteConfig.getInstance()
42+
43+
//set remote config singleton
44+
val configSettings = FirebaseRemoteConfigSettings.Builder()
45+
.setDeveloperModeEnabled(BuildConfig.DEBUG) //for developer purpose
46+
.build()
47+
remoteConfig.setConfigSettings(configSettings)
48+
49+
//set defaults value from xml or Map object
50+
remoteConfig.setDefaults(R.xml.remote_config_default)
51+
52+
//fetch parameters from remote config and add some listeners
53+
remoteConfig.fetch(36000L) //cache expiration for 10h
54+
.addOnCompleteListener(this) { task ->
55+
if (task.isSuccessful) {
56+
remoteConfig.activateFetched() //active new data before use
57+
//do some action
58+
}
59+
else {
60+
//do some action
61+
}
62+
63+
//get current values and use them in some variable, preferences etc
64+
val showTutorial = remoteConfig.getBoolean("show_tutorial")
65+
val skin = remoteConfig.getString("skin")
66+
//do something with fetched values
67+
}
68+
{% endhighlight %}
69+
70+
## Czas rzeczywisty
71+
//TODO
27.3 KB
Loading
525 KB
Loading
16.8 KB
Loading
40.5 KB
Loading

0 commit comments

Comments
 (0)