Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Remote Control your App
Search
Stan Kocken
April 23, 2018
Technology
510
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Remote Control your App
AndroidMakers 2018 talk
Stan Kocken
April 23, 2018
More Decks by Stan Kocken
See All by Stan Kocken
MVP on Android: why do you need it?
stankocken
1
200
Unit Test your code, even your UI
stankocken
1
330
EfficientAdapter
stankocken
1
120
Other Decks in Technology
See All in Technology
Kiro Crewをはじめよう
kizawa2020
1
140
Deep Data Security 機能解説
oracle4engineer
PRO
2
790
UniFi(ユニファイ)AIカメラの現場活用
ludicmind
1
420
分析AIエージェントを育てる、動く環境を育てる
codatum
1
990
AIは爆速なのに、私が詰まっていた話 ― 音声入力と鳴くマスコットでボトルネックを削る
yama3133
0
610
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
150
宣言型部分更新は何を解決しどこへ向かうのか
shuta13
1
310
ハードウェアコンペでもAI駆動開発が進んでいる話
iotengineer22
1
690
go-sqletch
moznion
0
130
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
870
[AWS 秋のクラウドオペレーション祭り 2026]AWS DevOps Agentで変わるリリースと運用対応 ~リリース管理機能と Directed actions のご紹介~
furuton
4
1.2k
AI時代だからこそ推したい!Gitコマンド再入門
munakata
0
180
Featured
See All Featured
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
203
77k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
The SEO identity crisis: Don't let AI make you average
varn
0
590
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
330
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.8k
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
Facilitating Awesome Meetings
lara
57
7.2k
Building an army of robots
kneath
307
47k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Discover your Explorer Soul
emna__ayadi
2
1.3k
A designer walks into a library…
pauljervisheath
211
25k
The Curse of the Amulet
leimatthew05
3
15k
Transcript
Remote Control your App AndroidMakers 2018 - Stan Kocken
Why? 2
Release Cycle 3
Different company, different style: max time between updates 4 Source:
appannie.com - updates on the store between 1st April 2017 and 1st April 2018 - 75% - 95% confidence interval 5-6 days 9-16 days 7-17 days 15-21 days 63-66 days 11-15 days
Frequent updates is the way to go? 5
Daily updates […] Everybody can see it's because of too
little testing - real review of a user 6
7 Less frequent update: the main reasons Event-based application No
dev working actively on it Expensive release
Our release cycle: Release Train 8 5.12.0 5.13.X 5.13.0 5.14.X
Week 1 Week 2 Week 3 Week 4 beta 5% 20% 100% beta 5% 20% 100% alpha alpha
App Release Feature Release 9 ≠ Our Release Train Engineers
Product/Marketing
How do you do that? 10
Remote Control your App AndroidMakers 2018 - Stan Kocken
But… I need to change this text… I want to
test this… - product owner 12
Remote Control your App AndroidMakers 2018 - Stan Kocken
WebView 14
A View that displays web pages - https://developer.android.com/reference/android/webkit/WebView.html 15
16 How? 99% Hybrid Low-touch Facebook lite 1.6MB Installs: 500,000,000+
4.3/5 ~ Mobile website vs vs Native and Web None or just few pages Eurostar v1 (2011) • Help pages • Credit card payments • …
17 Advantages Full control without app update Cross-platform “I know
HTML, I can make an app” Cheaper: Lower price
18 Disadvantages Full control without app update Cross-platform “I know
HTML, I can make an app” Cheaper: Lower price BAD quality So nobody feel at home
If even Facebook cannot make it great, how can
you? 19
20 WebView: Take-away - no budget - limited part -
“lite” application - everything else BAD GOOD
Remote Screen Configuration 21
Configuration 22 UI
23 "render": { "card_premium": { "title": { "resource": "configurable_premium_title" },
"color": "#25B41E", "descriptionItems": [ { "title": { "resource": "configurable_premium_item_title_backup" }, "description": { "resource": "configurable_premium_item_description_backup" }, "icon": { "defaultResource": "configurable_premium_features_backup" } }, { "title": { "resource": "configurable_premium_item_title_sync" }, "description": { "resource": "configurable_premium_item_description_sync" }, "icon": { "defaultResource": "configurable_premium_features_sync" } }, …
24 WebView Remote Screen Configuration 100% remotely controlled Cross-platform definition
Native UI look&feel Cost $ $$$ remotely controlled
Remote Copy 25
I need to change this text. When can we have
this live? - product owner 26
But… the text is within Strings.xml… Strings.xml within the app…
So we need an update. - dev 27
28 getString(R.string.hello_world) <string name="hello_world">Hello World</string> "Hello World" + = Strings.xml
What about a JSON file? - dev 29
jsonObject.optString("hello_world") 30 "Hello World" + = {"hello_world": "Hello World"} Simple
JSON
Where should I put the French version? - product owner
31
32 Localised JSON { "en": { "hello_world": "Hello World" },
"fr": { "hello_world": "Bonjour le monde" } } jsonObject.getJSONObject(“fr").optString("hello_world") “Bonjour le monde” + =
A user is Spanish should see the English version -
QA 33
34 Auto-select language res - values - default_strings.xml - values-fr
- default_strings.xml <resources> <string name="locale">en</string> </resources> <resources> <string name="locale">fr</string> </resources> jsonObject.getJSONObject(getString(R.string.locale)) .optString("hello_world")
Hmmm, and from my XML layout? - dev 35
36 XML Layout: the keys <TextView … android:text="hello_world" />
37 Custom Layout Inflator class MyLayoutInflater(context: Context, private val translator:
Translator) : LayoutInflater(context) { override fun onCreateView(parent: View?, name: String?, attrs: AttributeSet?): View { val view = super.onCreateView(parent, name, attrs) (view as? TextView)?.let { replaceTextKeyByValue(it) } return view } private fun replaceTextKeyByValue(textView: TextView) { textView.text = translator.replaceByValueIfNecessary(textView.text) textView.hint = translator.replaceByValueIfNecessary(textView.hint) }
38 Custom Layout Inflator class MyLayoutInflater(context: Context, private val translator:
Translator) : LayoutInflater(context) { override fun onCreateView(parent: View?, name: String?, attrs: AttributeSet?): View { val view = super.onCreateView(parent, name, attrs) (view as? TextView)?.let { replaceTextKeyByValue(it) } return view } private fun replaceTextKeyByValue(textView: TextView) { textView.text = translator.replaceByValueIfNecessary(textView.text) textView.hint = translator.replaceByValueIfNecessary(textView.hint) }
What about plurals? And a different text per app version?
And “Welcome %s to our app” 39
• Standard i18n functions (plurals, context, interpolation, format) • JSON
format • Created for Javascript • Android reader: https://github.com/i18next/i18next-android Written by myself 5 years ago 40 .com
A/B Testing 41
Compare two (or more) experiences to choose the best 42
Example 43
44 https://medium.com/wolfgangbremer/amazon-is-the-king-of-a-b-testing-f46008e3b528
45 Maxime Lorant - https://commons.wikimedia.org/wiki/File:A-B_testing_simple_example.png
Local or Server 46 A or B? Random().nextInt() % 2
=> Save locally => Send to Analytics Cross-platform A or B
47 KEEP CALM AND WAIT FOR IT…
48 Wait From minutes, TO MONTHS!
How long should I wait? 49
One at the time 50
Feature Flip 51
Remotely decide when a feature is enable 52
App Release Feature Release 53 ≠ Store update Feature Flip
A/B test Feature Flip 54 ≠ Find best experiences Progressive
Rollout Synchronise cross-platform Beta test
A/B Test, Feature Flip: tools 55 Braze (formerly Appboy), hack
of newsfeed Firebase Remote Config Home-made solution
Dashlane usage 56
Dashlane Recipe • Release: every two weeks • WebView: very
limited part • Remote Screen Configuration: for the premium page • Remote Copy: we don’t • A/B Test: home-made solution • Feature Flip: home-made solution, highly used 57
App Release Feature Release 58 ≠ Engineers Product/Marketing
Thank you @stan_kocken 59