Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Remote Config #LaunchpadDev

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

Available for Android iOS

Slide 7

Slide 7 text

Firebase Server Setup

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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'

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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);

Slide 12

Slide 12 text

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(); }

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Demo Android app fetching single remote config value

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Different greeting per platform?

Slide 18

Slide 18 text

Demo - No code changes!

Slide 19

Slide 19 text

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.

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

A/B Testing - Server Setup

Slide 22

Slide 22 text

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 { //.. }

Slide 23

Slide 23 text

Demo A B No Experiment

Slide 24

Slide 24 text

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());

Slide 25

Slide 25 text

A/B Testing - Analytics

Slide 26

Slide 26 text

Filter - Variant_A

Slide 27

Slide 27 text

Experiment A - Winner! A

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

Create stage rollout condition

Slide 30

Slide 30 text

Create config using that condition

Slide 31

Slide 31 text

Gradually increase value

Slide 32

Slide 32 text

Test Lab #LaunchpadDev

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Runs on Android

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

Running Monkey on Firebase

Slide 39

Slide 39 text

Viewing Robo Test Results

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

Running Instrumentation Tests in Android Studio

Slide 44

Slide 44 text

Viewing Test Results

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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