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
130
AWS Device FarmとCircleCIでAndroidのUIテストを自動化しよう
srym
1
5.1k
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.8k
はやい・やすい・うまい!スタートアップでも使える Retrofit + RxJava で瞬間APIクッキングレシピ
srym
2
610
I/O 2017 Short Report
srym
0
310
Other Decks in Programming
See All in Programming
メンテが命: PHPフレームワークのコンテナ化とアップグレード戦略
shunta27
0
120
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
WebDriver BiDiとは何なのか
yotahada3
1
140
Software Architecture
hschwentner
6
2.1k
定理証明プラットフォーム lapisla.net
abap34
1
1.8k
AWS Organizations で実現する、 マルチ AWS アカウントのルートユーザー管理からの脱却
atpons
0
150
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
510
Pythonでもちょっとリッチな見た目のアプリを設計してみる
ueponx
1
570
Spring gRPC について / About Spring gRPC
mackey0225
0
220
Honoとフロントエンドの 型安全性について
yodaka
7
1.2k
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
2
280
Pulsar2 を雰囲気で使ってみよう
anoken
0
240
Featured
See All Featured
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
A designer walks into a library…
pauljervisheath
205
24k
Building Applications with DynamoDB
mza
93
6.2k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.2k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.1k
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