Slide 1

Slide 1 text

When your app’s asleep Britt Barak

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Avg ~2 minutes/day

Slide 4

Slide 4 text

OR 23 hours and 58 minutes unuse

Slide 5

Slide 5 text

Being minded to UX When your app is asleep.

Slide 6

Slide 6 text

Britt Barak Android Lead Android Academy TLV Women Techmakers IL

Slide 7

Slide 7 text

Let’s begin!

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Be relevant

Slide 10

Slide 10 text

Notification

Slide 11

Slide 11 text

Users love them! 125% higher retention 88% more engagement

Slide 12

Slide 12 text

Users hate them! #1 for uninstalls 52% are annoyed

Slide 13

Slide 13 text

BigPicture(16+) new Notification.BigPictureStyle() setStyle() BigText(16+) new Notification.BigTextStyle()

Slide 14

Slide 14 text

Inbox(16+) new Notification.InboxStyle() setStyle() Messaging(24+) new Notification.MessagingStyle("Me")

Slide 15

Slide 15 text

Media (21+) setStyle()

Slide 16

Slide 16 text

Background Color (26+) "ongoing tasks which are critical for a user to see at a glance" builder.setColor()

Slide 17

Slide 17 text

Progressbar

Slide 18

Slide 18 text

Be Useful

Slide 19

Slide 19 text

Actions (19+) notificationBuilder.addAction() Be Useful

Slide 20

Slide 20 text

Direct reply (24+) Notification.Action.addRemoteInput() Be Useful

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

Be Useful → Don’t be unuseful

Slide 23

Slide 23 text

TimeOut (26+) Be Useful setTimeoutAfter()

Slide 24

Slide 24 text

Snoozing Be Useful

Slide 25

Slide 25 text

Snoozing (26+) Be Useful

Slide 26

Slide 26 text

Use NotificationListenerService Be Useful developer.android.com/reference/android/service/notification/NotificationListenerService.html

Slide 27

Slide 27 text

...Things got messy

Slide 28

Slide 28 text

40% opt out 70% reason for uninstall

Slide 29

Slide 29 text

Be Focused

Slide 30

Slide 30 text

Bundling (24+) Builder.setGroup() Be focused

Slide 31

Slide 31 text

It wasn’t enough...

Slide 32

Slide 32 text

Users wanted more control

Slide 33

Slide 33 text

Channels (26+) Must! Notification.Builder() / setChannelId() Be focused

Slide 34

Slide 34 text

The Power To The Users! ● Sound ● Lights ● Vibration ● Importance ● Show on lockscreen ● Override do not disturb

Slide 35

Slide 35 text

NotificationChannel channel = new NotificationChannel(id, name, importance); channel.setDescription(description); // ... notificationManager .createNotificationChannel(channel);

Slide 36

Slide 36 text

Grouping (26+) Manage channel per account (group) Be focused

Slide 37

Slide 37 text

notificationManager. createNotificationChannelGroup( new NotificationChannelGroup(id, name));

Slide 38

Slide 38 text

Notification Dot / Badge (26+) Be focused

Slide 39

Slide 39 text

● channel.setShowBadge() ● notificationBuilder.setNumber(); Notification Dot / Badge (26+) Be focused

Slide 40

Slide 40 text

Launcher Icon

Slide 41

Slide 41 text

Adaptive Icons (26+) Be pretty

Slide 42

Slide 42 text

Background 108 dp = 72 + 18 + 18 dp Must be opaque

Slide 43

Slide 43 text

Foreground 108 dp = 72 + 18 + 18 dp Can have transparency

Slide 44

Slide 44 text

Mask Provided by the OEM

Slide 45

Slide 45 text

Visible icon for the user (72dp) (48dp)

Slide 46

Slide 46 text

Visible icon for the user (72dp) (48dp)

Slide 47

Slide 47 text

Visible icon for the user (72dp) (48dp)

Slide 48

Slide 48 text

Visible icon for the user (72dp) (48dp)

Slide 49

Slide 49 text

There’s no second chance for first impression

Slide 50

Slide 50 text

29% close the app immediately if can’t find what they’re looking for

Slide 51

Slide 51 text

Be Quick

Slide 52

Slide 52 text

App Shortcuts (25+) Be Quick

Slide 53

Slide 53 text

Static Shortcuts

Slide 54

Slide 54 text

Static Shortcuts

Slide 55

Slide 55 text

A Shortcut Has (mainly) 1. Icon 2. Label 3. Intent

Slide 56

Slide 56 text

AndroidManifest.xml Static Shortcuts

Slide 57

Slide 57 text

shortcuts.xml Static Shortcuts

Slide 58

Slide 58 text

Dynamic Shortcuts

Slide 59

Slide 59 text

shortcutManager. setDynamicShortcuts(Arrays.asList(shortcut)); ShortcutManager shortcutManager = getSystemService(ShortcutManager.class); ShortcutInfo shortcut = new ShortcutInfo.Builder(this, MY_ID) //... .build(); Dynamic Shortcuts

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

Pinned Shortcuts (26+) Be Quick

Slide 62

Slide 62 text

Pinned Shortcuts (26+)

Slide 63

Slide 63 text

Pinned Shortcuts if (shortcutManager.isRequestPinShortcutSupported()) { }

Slide 64

Slide 64 text

Pinned Shortcuts if (shortcutManager.isRequestPinShortcutSupported()) { Intent pinIntent = shortcutManager.createShortcutResultIntent(shortcutInfo); PendingIntent onPinnedIntent = PendingIntent.getBroadcast(context, 0, pinIntent, 0); }

Slide 65

Slide 65 text

Pinned Shortcuts if (shortcutManager.isRequestPinShortcutSupported()) { Intent pinIntent = shortcutManager.createShortcutResultIntent(shortcutInfo); PendingIntent onPinnedIntent = PendingIntent.getBroadcast(context, 0, pinIntent, 0); shortcutManager. requestPinShortcut(shortcutInfo, onPinnedIntent.getIntentSender()); }

Slide 66

Slide 66 text

Shortcuts Discovery ● Onboarding ● When user perform the action

Slide 67

Slide 67 text

Can I do something even quicker?

Slide 68

Slide 68 text

Be Quick 3. Quick Settings Tile (25+)

Slide 69

Slide 69 text

Weather Quick Settings Tile Florian Möhle

Slide 70

Slide 70 text

● STATE_ACTIVE ● STATE_INACTIVE ● STATE_UNAVAILABLE Tile States

Slide 71

Slide 71 text

MyTileService extends TileService { } MyTileService.java

Slide 72

Slide 72 text

● onTileAdded() ● onStartListening() ● onClick() ● onStopListening() ● onTileRemoved() Tile Lifecycle → on the Main Thread.

Slide 73

Slide 73 text

@Override public void onStartListening() { Tile tile = getQsTile(); } MyTileService.java

Slide 74

Slide 74 text

@Override public void onStartListening() { Tile tile = getQsTile(); //... tile.setState(Tile.STATE_ACTIVE); tile.updateTile(); } MyTileService.java

Slide 75

Slide 75 text

AndroidManifest.xml

Slide 76

Slide 76 text

Show Dialog showDialog(intent);

Slide 77

Slide 77 text

Start Activity startActivityAndCollapse(intent);

Slide 78

Slide 78 text

Todoist

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Users must love you on background as much as they do on the foreground

Slide 81

Slide 81 text

Users must love u on the background... - Be relevant - Notifications styles - Be useful - Notification actions & reply - Be focused - Channels - Notif. badge - Be pretty - Adaptive icons - Be quick - Shortcuts - Quick settings tile

Slide 82

Slide 82 text

Thank you! Britt Barak @brittBarak