Remote Control your App

Remote Control your App

AndroidMakers 2018 talk

30ec7b2d4dae5107b36c52fff7a29894?s=128

Stan Kocken

April 23, 2018
Tweet

Transcript

  1. 2.
  2. 4.

    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
  3. 6.

    Daily updates […] Everybody can see it's because of too

    little testing - real review of a user 6
  4. 7.

    7 Less frequent update: the main reasons Event-based application No

    dev working actively on it Expensive release
  5. 8.

    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
  6. 12.

    But… I need to change this text… I want to

    test this… - product owner 12
  7. 16.

    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 • …
  8. 17.

    17 Advantages Full control without app update Cross-platform “I know

    HTML, I can make an app” Cheaper: Lower price
  9. 18.

    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
  10. 20.

    20 WebView: Take-away - no budget - limited part -

    “lite” application - everything else BAD GOOD
  11. 23.

    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" } }, …
  12. 26.

    I need to change this text. When can we have

    this live? - product owner 26
  13. 32.

    32 Localised JSON { "en": { "hello_world": "Hello World" },

    "fr": { "hello_world": "Bonjour le monde" } } jsonObject.getJSONObject(“fr").optString("hello_world") “Bonjour le monde” + =
  14. 34.

    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")
  15. 37.

    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) }
  16. 38.

    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) }
  17. 39.
  18. 40.

    • 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
  19. 46.

    Local or Server 46 A or B? Random().nextInt() % 2

    => Save locally => Send to Analytics Cross-platform A or B
  20. 54.

    A/B test Feature Flip 54 ≠ Find best experiences Progressive

    Rollout Synchronise cross-platform Beta test
  21. 55.

    A/B Test, Feature Flip: tools 55 Braze (formerly Appboy), hack

    of newsfeed Firebase Remote Config Home-made solution
  22. 57.

    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