SlideShare a Scribd company logo
1 of 58
Download to read offline
Android Notifications
Or How I Learned to Stop Worrying and Love
NotificationCompat.Builder
Agenda:
1. How a Push Goes From A to B
2. Building a Notification
3. Troubleshooting Tips
How a push goes from A to B
● Firebase is the future
○ Acquired by Google in 2014
○ Has become Google’s mobile developer toolset
● Which should you use?
○ Existing GCM projects will still work
○ New projects must be created using Firebase
● What’s different?
○ Easier integration
○ All new features will be FCM only!
Google or Firebase Cloud Messaging?
Registration for Push
Slack API
Play Services
Backend
FirebaseInstanceIdService
Slack Android Client
Push flight plan
Slack
Message
Server
Slack Push
Server
Firebase Cloud
Messaging Server
Google Play Services
FirebaseMessagingService
SlackMessagingService
{
"to":
"e_a8VzsygpY:APA91bGGx4-LyXb1o8YJyO8Vdswf4Z1NGIZwh2hV06
Xx_bx1JCx4Lcd1W-Q8mG6wX8IYLods19BpVfsl23YHoHgqJpMbbPa70
xVZcNdzl0GMzzV4pzOrJe",
"priority": "high",
"data": { … }
}
What’s in a push (Part I: Google Bits)
{
"to":
"e_a8VzsygpY:APA91bGGx4-LyXb1o8YJyO8Vdswf4Z1NGIZwh2hV06
Xx_bx1JCx4Lcd1W-Q8mG6wX8IYLods19BpVfsl23YHoHgqJpMbbPa70
xVZcNdzl0GMzzV4pzOrJe",
"priority": "high",
"data": { … }
}
What’s in a push (Part I: Google Bits)
{
"to":
"e_a8VzsygpY:APA91bGGx4-LyXb1o8YJyO8Vdswf4Z1NGIZwh2hV06
Xx_bx1JCx4Lcd1W-Q8mG6wX8IYLods19BpVfsl23YHoHgqJpMbbPa70
xVZcNdzl0GMzzV4pzOrJe",
"priority": "high",
"data": { … }
}
What’s in a push (Part I: Google Bits)
Everything but the data section is stripped out when
the payload is passed to the application
"data": {
"sound": "b2.mp3",
"badge": 1,
"payload_version": "3",
"timestamp": "1469635289.000006",
"author_display_name": "Kodos Rigellian",
"author_avatar": "...",
"message": "hi",
"recent_messages": { … }
}
What’s in a push (Part II: Slack Bits)
"data": {
"sound": "b2.mp3",
"badge": 1,
"payload_version": "3",
"timestamp": "1469635289.000006",
"author_display_name": "Kodos Rigellian",
"author_avatar": "...",
"message": "hi",
"recent_messages": { … }
}
What’s in a push (Part II: Slack Bits)
Building a Notification
● NotificationCompat.Builder
○ Provides setters for each component of the notification
○ Can use anything exposed by it safely regardless of OS version
● NotificationManagerCompat
○ Posts built notifications using
notify(int id, Notification notification)
What to build and post with?
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
Basic Notification Example
builder.setContentTitle(title)
.setContentText(text)
.setColor(color)
.setSmallIcon(R.drawable.ic_notification_24dp)
.setLargeIcon(avatarBitmap)
.setWhen(dateTime.getMillis());
notificationManager.notify(id, builder.build());
BigTextStyle
builder.setContentTitle(title)
.setContentText(text)
…
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(text)
.setSummaryText(account.getTeamName()));
BigTextStyle
builder.setContentTitle(title)
.setContentText(text)
…
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(text)
.setSummaryText(account.getTeamName()));
BigTextStyle
builder.setContentTitle(title)
.setContentText(text)
…
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(text)
.setSummaryText(account.getTeamName()));
BigTextStyle
builder.setContentTitle(title)
.setContentText(text)
…
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(text)
.setSummaryText(account.getTeamName()));
BigTextStyle
builder.setContentTitle(title)
.setContentText(text)
…
.setStyle(new NotificationCompat.BigTextStyle()
.bigText(text)
.setSummaryText(account.getTeamName()));
MessagingStyle
MessagingStyle messagingStyle = new MessagingStyle("Mike")
.setConversationTitle(contentTitle);
for (Message message : messagesForChannel) {
messagingStyle.addMessage(
message.getMessage(),
message.getTimestamp(),
message.getAuthor());
}
builder.setContentTitle(title)
.setContentText(text)
…
.setSubText(account.getTeamName())
.setStyle(messagingStyle);
MessagingStyle
MessagingStyle messagingStyle = new MessagingStyle("Mike")
.setConversationTitle(contentTitle);
for (Message message : messagesForChannel) {
messagingStyle.addMessage(
message.getMessage(),
message.getTimestamp(),
message.getAuthor());
}
builder.setContentTitle(title)
.setContentText(text)
…
.setSubText(account.getTeamName())
.setStyle(messagingStyle);
MessagingStyle
MessagingStyle messagingStyle = new MessagingStyle("Mike")
.setConversationTitle(contentTitle);
for (Message message : messagesForChannel) {
messagingStyle.addMessage(
message.getMessage(),
message.getTimestamp(),
message.getAuthor());
}
builder.setContentTitle(title)
.setContentText(text)
…
.setSubText(account.getTeamName())
.setStyle(messagingStyle);
MessagingStyle
MessagingStyle messagingStyle = new MessagingStyle("Mike")
.setConversationTitle(contentTitle);
for (Message message : messagesForChannel) {
messagingStyle.addMessage(
message.getMessage(),
message.getTimestamp(),
message.getAuthor());
}
builder.setContentTitle(title)
.setContentText(text)
…
.setSubText(account.getTeamName())
.setStyle(messagingStyle);
MessagingStyle
MessagingStyle messagingStyle = new MessagingStyle("Mike")
.setConversationTitle(contentTitle);
for (Message message : messagesForChannel) {
messagingStyle.addMessage(
message.getMessage(),
message.getTimestamp(),
message.getAuthor());
}
builder.setContentTitle(title)
.setContentText(text)
…
.setSubText(account.getTeamName())
.setStyle(messagingStyle);
MessagingStyle
MessagingStyle messagingStyle = new MessagingStyle("Mike")
.setConversationTitle(contentTitle);
for (Message message : messagesForChannel) {
messagingStyle.addMessage(
message.getMessage(),
message.getTimestamp(),
message.getAuthor());
}
builder.setContentTitle(title)
.setContentText(text)
…
.setSubText(account.getTeamName())
.setStyle(messagingStyle);
Still with us?
● A group consists of:
○ A set of one or more individual notifications
○ A single summary notification
■ Made by calling setGroupSummary(true)
● Groups are keyed by unique strings that you choose
● Android will NOT group your notifications until:
○ A second notification is posted to a specific group
○ A summary notification is posted
● You cannot post a summary in the same notify() call as a
notification!
Grouping Notifications
Grouping Notification Example
id=1000
groupKey=”MyGroup”
isGroupSummary=false
text=”My first message”
id=1999
groupKey=”MyGroup”
isGroupSummary=true
text=”My first message”
Pre-N Devices See The Most
Recently Posted Summary Only!
Wear + N and up Devices See These
as a Group
Grouping Notification Example
id=1000
groupKey=”MyGroup”
isGroupSummary=false
text=”My first message”
id=1001
groupKey=”MyGroup”
isGroupSummary=false
text=”My second message”
id=1999
groupKey=”MyGroup”
isGroupSummary=true
text=”2 new messages”
id=1999
groupKey=”MyGroup”
isGroupSummary=true
text=”My first message”
Grouping Visualized
Summary on KitKat Grouped on Nougat
● Build using stored notifications you’ve seen before
○ SharedPref/DB recommended as mentioned earlier
● Order can matter!
○ For best results, post the summary first, then the individual
notification
● Summaries don’t require sound, but set it anyways
○ Wear devices use the summary sound/vibrate data in some cases
Group Summaries Continued
● setAutoCancel(true) is almost always the right thing to do!
● Don’t forget to handle the user entering from the launcher icon or
recent app list!
Clearing Notifications
● NotificationManager’s clear(id) can do two things:
○ Clear an individual notification by id
Clearing Notifications
id=1000
groupKey=”MyGroup”
isGroupSummary=false
text=”My first message”
id=1001
groupKey=”MyGroup”
isGroupSummary=false
text=”My second message”
id=1999
groupKey=”MyGroup”
isGroupSummary=true
text=”2 new messages”
clear(1000)
clear(1001)
○ Clear an entire group by using the group summary’s notification id
● NotificationManager’s clear(id) can do two things:
○ Clear an individual notification by id
Clearing Notifications
id=1000
groupKey=”MyGroup”
isGroupSummary=false
text=”My first message”
id=1001
groupKey=”MyGroup”
isGroupSummary=false
text=”My second message”
id=1999
groupKey=”MyGroup”
isGroupSummary=true
text=”2 new messages”
clear(1999)
○ Clear an entire group by using the group summary’s notification id
● If you want to nuke the site from orbit...
○ clearAll()
Clearing Notifications
builder
.setContentIntent(userClickPendingIntent)
.setDeleteIntent(dismissPendingIntent)
Taking Action
Don’t forget to set these on both your individual notifications as well as the
group summary if present!
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
// Remote input instance to fetch data from the user
RemoteInput remoteInput =
new RemoteInput.Builder(KEY_REPLY_TEXT)
.setLabel(replyLabelString)
.setChoices(/* string array */)
.build();
// Create the reply action and add the remote input
builder.addAction(
new NotificationCompat.Action.Builder(
replyDrawable, replyLabelString, pendingIntent)
.addRemoteInput(remoteInput)
.build());
------- Where you handle the pending intent ---------
RemoteInput.getResultsFromIntent(intent)
.getCharSequence(KEY_REPLY_TEXT);
Reply Action
Troubleshooting Tips
Tracking Pushes
● Each push your server sends is assigned a message id from Google
"message_id":"0:1479505763653918%3a63b8c3f9fd7ecd"
● Information to record
○ FCM message id
○ Internal unique id from your backend for this particular push
● Record this information on server and device side to determine if
○ Push was sent and received
○ Push was sent but not received
○ Push was sent and received more than once (Google error)
○ Push was sent twice and received twice (Local push server error)
Build a Silent Test Push System
● Come up with a data payload that indicates this is a test push
data {
isTest: true
id: <server generated id>
}
● Have client ack this push via an API to your backend
● Allows easy silent testing of pushes to confirm FCM link is working
We made it!
Q&A
Thanks!

More Related Content

Similar to Push Notifications Or: How I Learned to Stop Worrying and Love NotificationCompat.Builder

Local Notification Tutorial
Local Notification TutorialLocal Notification Tutorial
Local Notification TutorialKetan Raval
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React NativeDamian Zbrożek
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andevMike Nakhimovich
 
Google I/O 2016 replay - Android N Development
Google I/O 2016 replay - Android N DevelopmentGoogle I/O 2016 replay - Android N Development
Google I/O 2016 replay - Android N DevelopmentTowhidul Haque Roni
 
8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG GranadaJM Robles
 
Easy path to machine learning (Spring 2021)
Easy path to machine learning (Spring 2021)Easy path to machine learning (Spring 2021)
Easy path to machine learning (Spring 2021)wesley chun
 
Project proposal
Project proposalProject proposal
Project proposalMaham Ejaz
 
Throughout the semester, we have been working on command line applic.pdf
Throughout the semester, we have been working on command line applic.pdfThroughout the semester, we have been working on command line applic.pdf
Throughout the semester, we have been working on command line applic.pdfbirajdar2
 
Top Tips for Android UIs - Getting the Magic on Tablets
Top Tips for Android UIs - Getting the Magic on TabletsTop Tips for Android UIs - Getting the Magic on Tablets
Top Tips for Android UIs - Getting the Magic on TabletsMotorola Mobility - MOTODEV
 
Building a custom machine learning model on android
Building a custom machine learning model on androidBuilding a custom machine learning model on android
Building a custom machine learning model on androidIsabel Palomar
 
Introduction to Cloud Computing with Google Cloud
Introduction to Cloud Computing with Google CloudIntroduction to Cloud Computing with Google Cloud
Introduction to Cloud Computing with Google Cloudwesley chun
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer ToolsMark Billinghurst
 
Creating a custom ML model for your application - DevFest Lima 2019
Creating a custom ML model for your application - DevFest Lima 2019Creating a custom ML model for your application - DevFest Lima 2019
Creating a custom ML model for your application - DevFest Lima 2019Isabel Palomar
 
CodePool Liverpool 2013 - Microsoft Gadgeteer Presentation
CodePool Liverpool 2013 - Microsoft Gadgeteer PresentationCodePool Liverpool 2013 - Microsoft Gadgeteer Presentation
CodePool Liverpool 2013 - Microsoft Gadgeteer PresentationLee Stott
 
The Ring programming language version 1.6 book - Part 73 of 189
The Ring programming language version 1.6 book - Part 73 of 189The Ring programming language version 1.6 book - Part 73 of 189
The Ring programming language version 1.6 book - Part 73 of 189Mahmoud Samir Fayed
 
Mobile March Windows Azure Notification Hubs
Mobile March Windows Azure Notification HubsMobile March Windows Azure Notification Hubs
Mobile March Windows Azure Notification HubsAdam Grocholski
 

Similar to Push Notifications Or: How I Learned to Stop Worrying and Love NotificationCompat.Builder (20)

Local Notification Tutorial
Local Notification TutorialLocal Notification Tutorial
Local Notification Tutorial
 
Introduction to React Native
Introduction to React NativeIntroduction to React Native
Introduction to React Native
 
Deep Learning Edge
Deep Learning Edge Deep Learning Edge
Deep Learning Edge
 
Advanced Dagger talk from 360andev
Advanced Dagger talk from 360andevAdvanced Dagger talk from 360andev
Advanced Dagger talk from 360andev
 
Oopp Lab Work
Oopp Lab WorkOopp Lab Work
Oopp Lab Work
 
Google I/O 2016 replay - Android N Development
Google I/O 2016 replay - Android N DevelopmentGoogle I/O 2016 replay - Android N Development
Google I/O 2016 replay - Android N Development
 
8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada8º Betabeers Granada: Android Wear por GDG Granada
8º Betabeers Granada: Android Wear por GDG Granada
 
Easy path to machine learning (Spring 2021)
Easy path to machine learning (Spring 2021)Easy path to machine learning (Spring 2021)
Easy path to machine learning (Spring 2021)
 
Project proposal
Project proposalProject proposal
Project proposal
 
Throughout the semester, we have been working on command line applic.pdf
Throughout the semester, we have been working on command line applic.pdfThroughout the semester, we have been working on command line applic.pdf
Throughout the semester, we have been working on command line applic.pdf
 
Top Tips for Android UIs - Getting the Magic on Tablets
Top Tips for Android UIs - Getting the Magic on TabletsTop Tips for Android UIs - Getting the Magic on Tablets
Top Tips for Android UIs - Getting the Magic on Tablets
 
Building a custom machine learning model on android
Building a custom machine learning model on androidBuilding a custom machine learning model on android
Building a custom machine learning model on android
 
Introduction to Cloud Computing with Google Cloud
Introduction to Cloud Computing with Google CloudIntroduction to Cloud Computing with Google Cloud
Introduction to Cloud Computing with Google Cloud
 
426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools426 lecture 4: AR Developer Tools
426 lecture 4: AR Developer Tools
 
Creating a custom ML model for your application - DevFest Lima 2019
Creating a custom ML model for your application - DevFest Lima 2019Creating a custom ML model for your application - DevFest Lima 2019
Creating a custom ML model for your application - DevFest Lima 2019
 
CodePool Liverpool 2013 - Microsoft Gadgeteer Presentation
CodePool Liverpool 2013 - Microsoft Gadgeteer PresentationCodePool Liverpool 2013 - Microsoft Gadgeteer Presentation
CodePool Liverpool 2013 - Microsoft Gadgeteer Presentation
 
The Ring programming language version 1.6 book - Part 73 of 189
The Ring programming language version 1.6 book - Part 73 of 189The Ring programming language version 1.6 book - Part 73 of 189
The Ring programming language version 1.6 book - Part 73 of 189
 
How to create android push notifications with custom view
How to create android push notifications with custom viewHow to create android push notifications with custom view
How to create android push notifications with custom view
 
Cloud Messaging Flutter
Cloud Messaging FlutterCloud Messaging Flutter
Cloud Messaging Flutter
 
Mobile March Windows Azure Notification Hubs
Mobile March Windows Azure Notification HubsMobile March Windows Azure Notification Hubs
Mobile March Windows Azure Notification Hubs
 

More from DevFest DC

Reactive Programming in Akka
Reactive Programming in AkkaReactive Programming in Akka
Reactive Programming in AkkaDevFest DC
 
Containers, microservices and azure
Containers, microservices and azureContainers, microservices and azure
Containers, microservices and azureDevFest DC
 
Programming Google apps with the G Suite APIs
Programming Google apps with the G Suite APIsProgramming Google apps with the G Suite APIs
Programming Google apps with the G Suite APIsDevFest DC
 
Snowflakes in the Cloud Real world experience on a new approach for Big Data
Snowflakes in the Cloud Real world experience on a new approach for Big DataSnowflakes in the Cloud Real world experience on a new approach for Big Data
Snowflakes in the Cloud Real world experience on a new approach for Big DataDevFest DC
 
Well, That Escalated Quickly: Anomaly Detection with Elastic Machine Learning
Well, That Escalated Quickly: Anomaly Detection with Elastic Machine LearningWell, That Escalated Quickly: Anomaly Detection with Elastic Machine Learning
Well, That Escalated Quickly: Anomaly Detection with Elastic Machine LearningDevFest DC
 
Why uri storage and the modern android app
Why uri  storage and the modern android appWhy uri  storage and the modern android app
Why uri storage and the modern android appDevFest DC
 
Myths of Angular 2: What Angular Really Is
Myths of Angular 2: What Angular Really IsMyths of Angular 2: What Angular Really Is
Myths of Angular 2: What Angular Really IsDevFest DC
 
Android Things Robocar with TensorFlow for object recognition
Android Things Robocar with TensorFlow for object recognitionAndroid Things Robocar with TensorFlow for object recognition
Android Things Robocar with TensorFlow for object recognitionDevFest DC
 
Troubleshooting & debugging production microservices in Kubernetes with Googl...
Troubleshooting & debugging production microservices in Kubernetes with Googl...Troubleshooting & debugging production microservices in Kubernetes with Googl...
Troubleshooting & debugging production microservices in Kubernetes with Googl...DevFest DC
 
Hack the Real World with ANDROID THINGS
Hack the Real World with ANDROID THINGSHack the Real World with ANDROID THINGS
Hack the Real World with ANDROID THINGSDevFest DC
 
Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...
Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...
Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...DevFest DC
 
Teaching machines to see the process of designing (datasets) with ai
Teaching machines to see  the process of designing (datasets) with aiTeaching machines to see  the process of designing (datasets) with ai
Teaching machines to see the process of designing (datasets) with aiDevFest DC
 

More from DevFest DC (12)

Reactive Programming in Akka
Reactive Programming in AkkaReactive Programming in Akka
Reactive Programming in Akka
 
Containers, microservices and azure
Containers, microservices and azureContainers, microservices and azure
Containers, microservices and azure
 
Programming Google apps with the G Suite APIs
Programming Google apps with the G Suite APIsProgramming Google apps with the G Suite APIs
Programming Google apps with the G Suite APIs
 
Snowflakes in the Cloud Real world experience on a new approach for Big Data
Snowflakes in the Cloud Real world experience on a new approach for Big DataSnowflakes in the Cloud Real world experience on a new approach for Big Data
Snowflakes in the Cloud Real world experience on a new approach for Big Data
 
Well, That Escalated Quickly: Anomaly Detection with Elastic Machine Learning
Well, That Escalated Quickly: Anomaly Detection with Elastic Machine LearningWell, That Escalated Quickly: Anomaly Detection with Elastic Machine Learning
Well, That Escalated Quickly: Anomaly Detection with Elastic Machine Learning
 
Why uri storage and the modern android app
Why uri  storage and the modern android appWhy uri  storage and the modern android app
Why uri storage and the modern android app
 
Myths of Angular 2: What Angular Really Is
Myths of Angular 2: What Angular Really IsMyths of Angular 2: What Angular Really Is
Myths of Angular 2: What Angular Really Is
 
Android Things Robocar with TensorFlow for object recognition
Android Things Robocar with TensorFlow for object recognitionAndroid Things Robocar with TensorFlow for object recognition
Android Things Robocar with TensorFlow for object recognition
 
Troubleshooting & debugging production microservices in Kubernetes with Googl...
Troubleshooting & debugging production microservices in Kubernetes with Googl...Troubleshooting & debugging production microservices in Kubernetes with Googl...
Troubleshooting & debugging production microservices in Kubernetes with Googl...
 
Hack the Real World with ANDROID THINGS
Hack the Real World with ANDROID THINGSHack the Real World with ANDROID THINGS
Hack the Real World with ANDROID THINGS
 
Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...
Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...
Using Cloud Vision To Watch The World’s News Imagery In Realtime: The GDELT P...
 
Teaching machines to see the process of designing (datasets) with ai
Teaching machines to see  the process of designing (datasets) with aiTeaching machines to see  the process of designing (datasets) with ai
Teaching machines to see the process of designing (datasets) with ai
 

Recently uploaded

💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋nirzagarg
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirtrahman018755
 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...SUHANI PANDEY
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtrahman018755
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...tanu pandey
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...nilamkumrai
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLimonikaupta
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445ruhi
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubaikojalkojal131
 
➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men 🔝mehsana🔝 Escorts...
➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men  🔝mehsana🔝   Escorts...➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men  🔝mehsana🔝   Escorts...
➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men 🔝mehsana🔝 Escorts...nirzagarg
 
💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋nirzagarg
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...tanu pandey
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Delhi Call girls
 
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...kajalverma014
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftAanSulistiyo
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查ydyuyu
 

Recently uploaded (20)

💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Bilaspur Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53
 
Trump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts SweatshirtTrump Diapers Over Dems t shirts Sweatshirt
Trump Diapers Over Dems t shirts Sweatshirt
 
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
Sarola * Female Escorts Service in Pune | 8005736733 Independent Escorts & Da...
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
 
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRLLucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
Lucknow ❤CALL GIRL 88759*99948 ❤CALL GIRLS IN Lucknow ESCORT SERVICE❤CALL GIRL
 
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Pollachi 7001035870 Whatsapp Number, 24/07 Booking
 
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
All Time Service Available Call Girls Mg Road 👌 ⏭️ 6378878445
 
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls DubaiDubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
Dubai=Desi Dubai Call Girls O525547819 Outdoor Call Girls Dubai
 
➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men 🔝mehsana🔝 Escorts...
➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men  🔝mehsana🔝   Escorts...➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men  🔝mehsana🔝   Escorts...
➥🔝 7737669865 🔝▻ mehsana Call-girls in Women Seeking Men 🔝mehsana🔝 Escorts...
 
💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
💚😋 Salem Escort Service Call Girls, 9352852248 ₹5000 To 25K With AC💚😋
 
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...Pune Airport ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready...
Pune Airport ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready...
 
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
📱Dehradun Call Girls Service 📱☎️ +91'905,3900,678 ☎️📱 Call Girls In Dehradun 📱
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
 
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
valsad Escorts Service ☎️ 6378878445 ( Sakshi Sinha ) High Profile Call Girls...
 
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
best call girls in Hyderabad Finest Escorts Service 📞 9352988975 📞 Available ...
 
Microsoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck MicrosoftMicrosoft Azure Arc Customer Deck Microsoft
Microsoft Azure Arc Customer Deck Microsoft
 
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查在线制作约克大学毕业证(yu毕业证)在读证明认证可查
在线制作约克大学毕业证(yu毕业证)在读证明认证可查
 

Push Notifications Or: How I Learned to Stop Worrying and Love NotificationCompat.Builder