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

Firebase Remote Config and Test Lab

Rebecca Franks
September 26, 2016

Firebase Remote Config and Test Lab

This presentation was given at Google Developer Launchpad in Nairobi on the 26 September 2016. It covers using Firebase remote config in your project with AB testing, staged rollout of features and using test lab in your projects.

Rebecca Franks

September 26, 2016
Tweet

More Decks by Rebecca Franks

Other Decks in Technology

Transcript

  1. #LaunchpadDev
    Remote Config & Test Lab
    Rebecca Franks
    Google Developer Expert - Android /
    Senior Android Developer @ DVT
    @riggaroo
    riggaroo.co.za

    View Slide

  2. Agenda
    • Remote Config
    • Setup & Basic Usage
    • Conditions
    • A/B Testing
    • Staged Rollouts
    • Test Lab
    • Robo Tests
    • Instrumentation Tests

    View Slide

  3. Remote Config
    #LaunchpadDev

    View Slide

  4. ● Key / Value Pairs
    saved on Firebase
    server
    ● Change behaviour at
    runtime
    ● No app update
    required
    Remote
    Config

    View Slide

  5. Features
    • Quickly deploy changes
    • Customise your app for segments of user base
    • Run A/B Tests
    • Free!

    View Slide

  6. Available for
    Android
    iOS

    View Slide

  7. Firebase Server Setup

    View Slide

  8. Android Setup
    Project Level build.gradle:
    buildscript {
    // ...
    dependencies {
    // ...
    classpath 'com.google.gms:google-services:3.0.0'
    }
    }

    View Slide

  9. Android Setup
    App Level app/build.gradle:
    dependencies {
    // ...
    compile 'com.google.firebase:firebase-core:9.4.0'
    compile 'com.google.firebase:firebase-config:9.4.0'
    }
    // At the bottom
    apply plugin: 'com.google.gms.google-services'

    View Slide

  10. Android Setup
    • Download google-services.json
    • Place in app/ folder.
    • Create remote config defaults file - res/xml/
    remote_config.xml



    welcome_message
    Hello User!


    View Slide

  11. Initialise Firebase Remote Config
    remoteConfig = FirebaseRemoteConfig.getInstance();
    FirebaseRemoteConfigSettings config = new
    FirebaseRemoteConfigSettings.Builder()
    .setDeveloperModeEnabled(BuildConfig.DEBUG)
    .build();
    remoteConfig.setConfigSettings(config);
    remoteConfig.setDefaults(R.xml.remote_config);

    View Slide

  12. Fetch
    remoteConfig.fetch(CACHE_TIME_SECONDS).addOnComplete
    Listener(new OnCompleteListener() {
    });
    @Override
    public void onComplete(@NonNull Task task) {
    if (task.isSuccessful()) {
    Log.d(TAG, "Fetch Succeeded");
    remoteConfig.activateFetched();
    } else {
    Log.d(TAG, "Fetch Failed");
    }
    displayWelcomeMessage();
    }

    View Slide

  13. Display
    void displayWelcomeMessage(){
    String helloMessage = remoteConfig.getString("welcome_message");
    greetingTextView.setText(helloMessage);
    }

    View Slide

  14. Demo
    Android app
    fetching single
    remote config value

    View Slide

  15. Types you can store on Remote Config
    • Strings
    • Integers
    • Booleans
    • Long
    • Double
    • Byte Arrays

    View Slide

  16. Conditions
    • Powerful decision-
    making server
    • Target a group of app
    instances
    • Made up of one or more
    rules that must evaluate
    to true

    View Slide

  17. Different greeting per platform?

    View Slide

  18. Demo - No code changes!

    View Slide

  19. Types of Conditionals
    • OS Type
    • App ID
    • Device in Region or Country
    • App Version
    • Language
    • Audience from Analytics
    • Random Percentile
    Priority?
    Can be reordered on
    “Conditions” tab.

    View Slide

  20. A/B Testing &
    Feature Rollout
    • Experimenting with your
    UI
    • Different audiences
    receive different UI

    View Slide

  21. A/B Testing - Server Setup

    View Slide

  22. A/B Testing - Android Setup
    String experiment = config.getString("experiment_variant");
    FirebaseAnalytics.getInstance(this)
    .setUserProperty("Experiment", experiment);
    if (experiment.equals("variant_a")) {
    //..
    } else if (experiment.equals("variant_b")) {
    //...
    } else {
    //..
    }

    View Slide

  23. Demo
    A B No Experiment

    View Slide

  24. Analytics
    Log your events + track in the Firebase Console
    buttonCheckout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View view) {
    //..
    }
    });
    firebaseAnalytics.logEvent(“CheckoutClicked”, new Bundle());

    View Slide

  25. A/B Testing - Analytics

    View Slide

  26. Filter - Variant_A

    View Slide

  27. Experiment A - Winner!
    A

    View Slide

  28. Gradual Feature Rollouts
    • Leverage “User in Random Percentile” feature
    • Gradually increase the value of the percentage
    • Rollout to more customers as you gain confidence

    View Slide

  29. Create stage rollout condition

    View Slide

  30. Create config using that condition

    View Slide

  31. Gradually increase value

    View Slide

  32. Test Lab
    #LaunchpadDev

    View Slide

  33. What is Firebase Test Lab?
    • Run tests at Googles
    Device Farm
    • Virtual Devices + Physical
    Devices
    • Robo Tests & Custom
    Instrumentation Tests
    • Pay per hour

    View Slide

  34. Runs on
    Android

    View Slide

  35. Why run tests on Firebase?
    • History of results
    • Logs attached to each test
    • Screenshots & videos
    • Don’t have to manage your own device farm

    View Slide

  36. Robo Test • Random clicking around
    in your application +
    recording results
    • No code changes
    required to run a Robo
    Test
    • Uses Monkey Runner

    View Slide

  37. Running Monkey Locally
    $ adb shell monkey -p your.package.name -v 500
    Command line:

    View Slide

  38. Running Monkey on Firebase

    View Slide

  39. Viewing Robo Test Results

    View Slide

  40. Instrumentation
    Tests
    • Need to be writing test
    code
    • Espresso
    • Robotium
    • UIAutomator

    View Slide

  41. Run Instrumentation Tests Locally
    • Device / Emulator attached
    • Espresso:
    ./gradlew connectedAndroidTest

    View Slide

  42. Options for running tests
    • Firebase Console
    • Command Line - Using gcloud API
    • Android Studio

    View Slide

  43. Running Instrumentation Tests in Android Studio

    View Slide

  44. Viewing Test Results

    View Slide

  45. Recap
    •Remote Config
    •Getting setup
    •Using remote config
    •A/B Testing + Gradual Roll outs
    •Test Lab
    •Robo Tests
    •Instrumentation tests

    View Slide

  46. Thank you!
    Rebecca Franks
    Google Developer Expert - Android
    @riggaroo / +RebeccaFranksSA
    riggaroo.co.za
    #LaunchpadDev

    View Slide

  47. Links
    Firebase Remote Config - https://firebase.google.com/docs/remote-config/
    Firebase Test Lab - https://firebase.google.com/docs/test-lab/
    Testing Support Library - https://developer.android.com/topic/libraries/
    testing-support-library/index.html
    Demo Remote Config Project - https://github.com/riggaroo/remote-config-
    demo-ssa-launchpad-2016
    Demo Test Lab Project - https://github.com/googlesamples/android-
    testing/tree/master/ui/uiautomator/BasicSample

    View Slide