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

DevFest Atlanta - Firebase Remote Config + Firebase Test Lab

Rebecca Franks
November 12, 2016

DevFest Atlanta - Firebase Remote Config + Firebase Test Lab

Rebecca Franks

November 12, 2016
Tweet

More Decks by Rebecca Franks

Other Decks in Science

Transcript

  1. Firebase Remote Config & Test Lab
    Rebecca Franks
    Google Developer Expert - Android
    @riggaroo
    riggaroo.co.za

    View Slide

  2. Who am I?

    View Slide

  3. View Slide

  4. Firebase Product Offering

    View Slide

  5. Firebase Dev Summit 2016 - Berlin
    • New Analytics Features - StreamView / DebugView
    • Crash Reporting is now out of Beta with new features
    • Udacity Course - Firebase in a weekend
    • Lots of other small things

    View Slide

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

    View Slide

  7. Remote Config

    View Slide

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

    View Slide

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

    View Slide

  10. Available for
    Android iOS

    View Slide

  11. Firebase Server Setup

    View Slide

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

    View Slide

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

    View Slide

  14. 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

  15. 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

  16. 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

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

    View Slide

  18. Demo
    Android app
    fetching single
    remote config value

    View Slide

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

    View Slide

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

  21. Different greeting per platform?

    View Slide

  22. Demo - No code changes!

    View Slide

  23. Types of Conditionals
    • OS Type
    • App ID
    • Device in Region or Country
    • App Version
    • Language
    • Audience from Analytics
    • Random Percentile

    View Slide

  24. How does the app decide what value to use?
    In-app default
    value?
    Static initialised
    value
    No
    No
    Yes
    Yes
    Parameter value
    Value fetched
    from the server?

    View Slide

  25. Priority of Conditionals

    View Slide

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

    View Slide

  27. A/B Testing - Server Setup

    View Slide

  28. 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

  29. Demo
    A B No Experiment

    View Slide

  30. 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

  31. A/B Testing - Analytics

    View Slide

  32. Filter - Variant_A

    View Slide

  33. OR Export to BigQuery

    View Slide

  34. Experiment A - Winner!
    A

    View Slide

  35. 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

  36. Create stage rollout condition

    View Slide

  37. Create config using that condition

    View Slide

  38. Gradually increase value

    View Slide

  39. Custom Audiences - Events

    View Slide

  40. Remote Config using Custom Audience

    View Slide

  41. Unsupported App Versions

    View Slide

  42. Unsupported App Versions

    View Slide

  43. Unsupported App Versions
    void loadAppSupported() {
    boolean appSupported = remoteConfig.getBoolean("app_supported");
    if (!appSupported) {
    showAppNotSupportedDialog();
    }
    }

    View Slide

  44. Test Lab

    View Slide

  45. What is Firebase Test Lab?
    • Run tests at Googles Device Farm
    • Virtual Devices + Physical Devices
    • Robo Tests & Custom
    Instrumentation Tests
    • Free Tier
    • 5 tests per day on physical
    devices
    • 10 tests per day on virtual devices
    • Pay per hour

    View Slide

  46. Runs on
    Android

    View Slide

  47. 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

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

    View Slide

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

    View Slide

  50. Running Monkey on Firebase

    View Slide

  51. Viewing Robo Test Results

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  55. Running Instrumentation Tests in Android Studio

    View Slide

  56. Viewing Test Results

    View Slide

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

    View Slide

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

    View Slide

  59. 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