Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Remote Control your App

Remote Control your App

AndroidMakers 2018 talk

Stan Kocken

April 23, 2018

Transcript

59 slides
  1. 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
  2. Daily updates […] Everybody can see it's because of too

    little testing - real review of a user 6
  3. 7 Less frequent update: the main reasons Event-based application No

    dev working actively on it Expensive release
  4. 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
  5. But… I need to change this text… I want to

    test this… - product owner 12
  6. 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 • …
  7. 17 Advantages Full control without app update Cross-platform “I know

    HTML, I can make an app” Cheaper: Lower price
  8. 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
  9. 20 WebView: Take-away - no budget - limited part -

    “lite” application - everything else BAD GOOD
  10. 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" } }, …
  11. I need to change this text. When can we have

    this live? - product owner 26
  12. 32 Localised JSON { "en": { "hello_world": "Hello World" },

    "fr": { "hello_world": "Bonjour le monde" } } jsonObject.getJSONObject(“fr").optString("hello_world") “Bonjour le monde” + =
  13. 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")
  14. 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) }
  15. 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) }
  16. • 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
  17. Local or Server 46 A or B? Random().nextInt() % 2

    => Save locally => Send to Analytics Cross-platform A or B
  18. A/B test Feature Flip 54 ≠ Find best experiences Progressive

    Rollout Synchronise cross-platform Beta test
  19. A/B Test, Feature Flip: tools 55 Braze (formerly Appboy), hack

    of newsfeed Firebase Remote Config Home-made solution
  20. 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

More Decks by Stan Kocken

Other Decks in Technology