Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Firebase - Remote Config
Search
Fumihiko Shiroyama
June 10, 2016
Programming
5
1.5k
Firebase - Remote Config
Firebase - Remote Config @ shibuya.apk #8 Google I/O 2016 Report
Fumihiko Shiroyama
June 10, 2016
Tweet
Share
More Decks by Fumihiko Shiroyama
See All by Fumihiko Shiroyama
The world of Android wireless communications without Internet
srym
1
150
AWS Device FarmとCircleCIでAndroidのUIテストを自動化しよう
srym
1
5.2k
Spring BootをKotlinで作成しAmazon Elastic Container Service (ECS) で稼働させる
srym
6
2k
iOSDC_2019_DeviceFarm.pdf
srym
8
20k
世界で戦うエンジニアになるために_公開用.pdf
srym
18
45k
Unit Testing in a Nutshell - DroidKaigi 2018
srym
11
15k
Clean Architecture & TDD
srym
1
3.9k
はやい・やすい・うまい!スタートアップでも使える Retrofit + RxJava で瞬間APIクッキングレシピ
srym
2
630
I/O 2017 Short Report
srym
0
320
Other Decks in Programming
See All in Programming
Javaのルールをねじ曲げろ!禁断の操作とその代償から学ぶメタプログラミング入門 / A Guide to Metaprogramming: Lessons from Forbidden Techniques and Their Price
nrslib
3
1.9k
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
yuukit
3
720
Passkeys for Java Developers
ynojima
2
790
技術懸念に立ち向かい 法改正を穏便に乗り切った話
pop_cashew
0
1.2k
Babylon.js 8.0のアプデ情報を 軽率にキャッチアップ / catch-up-babylonjs-8
drumath2237
0
120
少数精鋭エンジニアがフルスタック力を磨く理由 -そしてAI時代へ-
rebase_engineering
0
150
💎 My RubyKaigi Effect in 2025: Top Ruby Companies 🌐
yasulab
PRO
1
130
Go Modules: From Basics to Beyond / Go Modulesの基本とその先へ
kuro_kurorrr
0
100
プロダクト改善のために新しいことを始める -useContextからの卒業、Zustandへ-
rebase_engineering
1
110
がんばりすぎないコーディングルール運用術
tsukakei
1
210
Perlで痩せる
yuukis
1
670
テスト分析入門/Test Analysis Tutorial
goyoki
13
2.8k
Featured
See All Featured
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
252
21k
BBQ
matthewcrist
89
9.7k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Gamification - CAS2011
davidbonilla
81
5.3k
GraphQLとの向き合い方2022年版
quramy
46
14k
The Cost Of JavaScript in 2023
addyosmani
49
8.3k
How GitHub (no longer) Works
holman
314
140k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
A better future with KSS
kneath
239
17k
Agile that works and the tools we love
rasmusluckow
329
21k
Visualization
eitanlees
146
16k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
19k
Transcript
'JSFCBTF3FNPUF$POpH 4IJCVZBBQL(PPHMF*03FQPSU
'VNJIJLP4IJSPZBNB 4PGUXBSF&OHJOFFS /JLLFJ*OD ʲ࿈ࡌதʳ εϚϗΞϓϦ։ൃΛՃ͢Δɼ 'JSFCBTFΛͬͯΈΑ͏ IUUQHJIZPKQEFWTFSJBM pSFCBTF
'JSFCBTF.BKPS6QHSBEFT
None
ʂ
3FNPUF$POpH
IUUQTXXXZPVUVCFDPNXBUDI MJTU1-M ,[;&T:-N0'@*BZS5OUFWYUC6Y%-W@$997'10G
w 4JNQMF,FZ7BMVFTUPSF w 0OMJOFDPOUFOUTVQEBUJOHXJUIPVUSFJOTUBMMBUJPO w "#5FTUJOH w 6TFSTFHNFOUBUJPOT
%FNP
4FUVQ
None
None
None
None
QSPKFDUCVJMEHSBEMF buildscript { // ... dependencies { // ... classpath
'com.google.gms:google-services:3.0.0' } }
BQQCVJMEHSBEMF apply plugin: 'com.android.application' android { // ... } dependencies
{ // ... compile 'com.google.firebase:firebase-core:9.0.2' compile 'com.google.firebase:firebase-config:9.0.2' } // ADD THIS AT THE BOTTOM apply plugin: 'com.google.gms.google-services'
$PEF
SFTYNMSFNPUF@DPOpH@EFGBVMUTYNM <?xml version="1.0" encoding="utf-8"?> <defaultsMap> <entry> <key>color</key> <value>white</value> </entry> </defaultsMap>
"DUJWJUZ FirebaseRemoteConfigSettings remoteConfigSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); remoteConfig =
FirebaseRemoteConfig.getInstance(); remoteConfig.setConfigSettings(remoteConfigSettings); remoteConfig.setDefaults(R.xml.remote_config_defaults);
FirebaseRemoteConfigSettings remoteConfigSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); remoteConfig = FirebaseRemoteConfig.getInstance();
remoteConfig.setConfigSettings(remoteConfigSettings); remoteConfig.setDefaults(R.xml.remote_config_defaults); ճ࣌ؒҎ্ͷϦΫΤετΤϥʔʹͳΔͷͰ ։ൃ࣌͜ͷઃఆඞਢʂ "DUJWJUZ
FirebaseRemoteConfigSettings remoteConfigSettings = new FirebaseRemoteConfigSettings.Builder() .setDeveloperModeEnabled(BuildConfig.DEBUG) .build(); remoteConfig = FirebaseRemoteConfig.getInstance();
remoteConfig.setConfigSettings(remoteConfigSettings); remoteConfig.setDefaults(R.xml.remote_config_defaults); σϑΥϧτͷ,FZ7BMΛઃఆ "DUJWJUZ
private void fetch() { long cacheExpiration = 3600; if (remoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{ cacheExpiration = 0; } remoteConfig.fetch(cacheExpiration) .addOnSuccessListener(aVoid -> { Log.d(TAG, "Fetch succeeded."); remoteConfig.activateFetched(); String colorName = remoteConfig.getString("color"); container.setBackgroundColor(Color.parseColor(colorName)); }) .addOnFailureListener(e -> Log.e(TAG, "Fetch failed.", e)); }
private void fetch() { long cacheExpiration = 3600; if (remoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{ cacheExpiration = 0; } remoteConfig.fetch(cacheExpiration) .addOnSuccessListener(aVoid -> { Log.d(TAG, "Fetch succeeded."); remoteConfig.activateFetched(); String colorName = remoteConfig.getString("color"); container.setBackgroundColor(Color.parseColor(colorName)); }) .addOnFailureListener(e -> Log.e(TAG, "Fetch failed.", e)); } $BDIF&YQJSBUJPO EFGBVMUIPVST
private void fetch() { long cacheExpiration = 3600; if (remoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{ cacheExpiration = 0; } remoteConfig.fetch(cacheExpiration) .addOnSuccessListener(aVoid -> { Log.d(TAG, "Fetch succeeded."); remoteConfig.activateFetched(); String colorName = remoteConfig.getString("color"); container.setBackgroundColor(Color.parseColor(colorName)); }) .addOnFailureListener(e -> Log.e(TAG, "Fetch failed.", e)); } 'FUDI4FSWFS4FUUJOHT
private void fetch() { long cacheExpiration = 3600; if (remoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{ cacheExpiration = 0; } remoteConfig.fetch(cacheExpiration) .addOnSuccessListener(aVoid -> { Log.d(TAG, "Fetch succeeded."); remoteConfig.activateFetched(); String colorName = remoteConfig.getString("color"); container.setBackgroundColor(Color.parseColor(colorName)); }) .addOnFailureListener(e -> Log.e(TAG, "Fetch failed.", e)); } 4VDDFTT$BMMCBDL
private void fetch() { long cacheExpiration = 3600; if (remoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{ cacheExpiration = 0; } remoteConfig.fetch(cacheExpiration) .addOnSuccessListener(aVoid -> { Log.d(TAG, "Fetch succeeded."); remoteConfig.activateFetched(); String colorName = remoteConfig.getString("color"); container.setBackgroundColor(Color.parseColor(colorName)); }) .addOnFailureListener(e -> Log.e(TAG, "Fetch failed.", e)); } "DUJWBUF
private void fetch() { long cacheExpiration = 3600; if (remoteConfig.getInfo().getConfigSettings().isDeveloperModeEnabled())
{ cacheExpiration = 0; } remoteConfig.fetch(cacheExpiration) .addOnSuccessListener(aVoid -> { Log.d(TAG, "Fetch succeeded."); remoteConfig.activateFetched(); String colorName = remoteConfig.getString("color"); container.setBackgroundColor(Color.parseColor(colorName)); }) .addOnFailureListener(e -> Log.e(TAG, "Fetch failed.", e)); } 'BJMVSF$BMMCBDL
$POTPMF
None
None
None
None
"EE$POEJUJPO
None
None
HSBZXIJUF
.VMUJQMF$POEJUJPO
"QQ7FSTJPO
045ZQF
None
)JHI1SJPSJUZ
%SBH%SPQ
1SJPSJUZ
IUUQTpSFCBTFHPPHMFDPNEPDTSFNPUFDPOpH QBSBNFUFSTQBSBNFUFS@WBMVF@QSJPSJUZ
w 4FSWFS4JEF w ෳϚονͨ͠ΒҰ൪্ͷઃఆ w ͳ͚ΕαʔόαΠυͷσϑΥϧτ w $MJFOU4JEF w αʔό͔ΒऔͬͨΩϟογϡ
w ΞϓϦͷσϑΥϧτ
5JQT
.VMUJQMFHPPHMFTFSWJDFTKTPO
#VJME7BSJBOU w BQQTSDCVJME5ZQFqBWPSHPPHMF TFSWJDFTKTPO +VTU8PSLT
4BNQMF$PEF w IUUQTpSFCBTFHPPHMFDPNEPDTSFNPUF DPOpHBOESPJESFRVJSFNFOUT w IUUQTHJUIVCDPNTSZN 3FNPUF$POpH4BNQMF
5IBOLZPV
8FSFIJSJOH IUUQTXXXXBOUFEMZDPNQSPKFDUT