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
Tweet

More Decks by Stan Kocken

Other Decks in Technology

Transcript

  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