Effective Android MessagingJuan Gomez
Agenda
• Intro
• HTTP
• WebSockets
• SMS (Text Messages)
• Network Service Discovery
• Review
• Q&A
!2
Over 2 million events140 million tickets sold
$2 billion in gross ticket salesEvents in 179 countries
Eventbrite by the Numbers
Intro
Who am I?
• Mobile Engineer at Eventbrite
• Android Developer
• Python enthusiast
!4
Intro
Slides:
• http://lanyrd.com/profile/juandg/
• http://www.andevcon.com/slides
!5
Intro
What do you mean by messaging?
• Communications between devices
• Peer-to-Peer
• Servers are “devices”, and peers too ;)
!6
Intro
Where do I need messaging:
• IM apps
• Multiplayer games
• Enterprise apps
• Many more…
!7
HTTP
HTTP
• Effective Android HTTP by Jesse Wilson
• Presented at AnDevCon Boston
• http://bit.ly/1auYlY2
!9
HTTP (Native)
HttpURLConnection vs Apache HTTP client
• Apache HTTP client works better on Eclair (2.1) and Froyo (2.2)
• HttpURLConnection is the best choice for Gingerbread (2.3) and above
!10
HTTP (3rd-party)
Volley:
• Great performance and memory mgmt
• Poor documentation and support
OkHttp
• Improved fork of HttpURLConnection (as of 4.0)
• Great documentation and support
!11
HTTP
• It’s not full duplex
• It’s not meant for device peer-to-peer communication
• Not ideal for low connectivity scenarios (concerts, arenas, etc.)
!12
GOOGLE CLOUD MESSAGING
!13
Google Cloud Messaging
!14
Google Cloud Messaging
• Full duplex
• Fire & Forget
• Not always reliable
• No guarantee on time of delivery
• Relatively easy to implement
!15
Google Cloud Messaging
Two implementations:
• GCM HTTP
• Based on HTTP Post requests
• Uses JSON messages
• GCM CCS
• Based on the XMPP chat protocol
• Uses XML messages
!16
Google Cloud Messaging
Android Studio can implement a simple GCM back-end for you, using Google AppEngine
• Follow instructions on:
• http://googlecloudplatform.blogspot.com/2013/06/tutorial-adding-cloud-backend-to-your-application-with-android-studio_26.html
!17
WEB SOCKETS
WebSockets
• Full-duplex communication using Port 80
• Web Server <—> Client
• Not just for Web Browsers
• Near Real-Time
!19
WebSockets on Android
• No native Android implementation
!20
Web Sockets (3rd Party)
AutobahnAndroid
• Fully open source
• github.com/tavendo/AutobahnAndroid
• Commercially supported also
Socket.IO client for Android
• Fully open source
• github.com/koush/android-websockets
• Not very well supported!21
SMS (TEXT MESSAGING)
SMS (Text Messaging)
Pros:
• Asynchronous
• Ideal for low data connectivity
• Only option when there’s no data connectivity
• Mostly free (in the U.S. and Europe)
• Supported by “dumb” phones
!23
SMS (Text Messaging)
Cons:
• Asynchronous
• No guarantee of delivery (including order)
• Limited to 160 characters per message
• Android API’s are “mostly” undocumented
• Except for the new KitKat API
!
!24
SMS (Text Messaging)
When to use them:
• IM apps (duh!)
• Device activation
• Phone number verification
• As a fallback method for other protocol
• As a coordination mechanism
!25
SMS (Text Messaging)
SmsManager
• Sending is really easy SmsManager smsManager = SmsManager.getDefault();
smsManager.sendTextMessage(“555-123-456“, null, "hello", null, null);
!!
!26
SMS (Text Messaging)
Receiving SMS
• It’s an undocumented API
• Implement a BroadCast receiver listening for:
• android.provider.Telephony.SMS_RECEIVED
• Bundle contains an array of SmsMessage
• Checkout the new KitKat API:
• youtu.be/mdq0R2WQssQ
!27
NETWORK SERVICE DISCOVERY
Network Service Discovery
• Discover services available on the local network
• Based on Apple’s Bonjour
• Multiplatform support
• Android, iOS, OS X, Linux, Windows, Printers, etc.
• Only available on API Level 16 and above
!29
Network Service Discovery
Alternatives if you’re not on API Level 16 yet:
• Use JmDNS ( jmdns.sourceforge.net)
• Centralized “check-in” Server on fixed IP
• DON’T Try to do multicast/broadcast yourself
• Not very efficient (really slooow!)
• Battery Drain
!
!
!30
Network Service Discovery
Eventbrite engineering blog: • engineering.eventbrite.com • Android NDS Post: http://bit.ly/1aYc6RN
!31
HOW WE USE IT AT EVENTBRITE?
!32
How we use this at Eventbrite?
Entry Manager
• Paired with a home grown solution called “Gatekeeper”
!33
How we use this at Eventbrite?
Eventbrite App
• Social Notifications
Push notification when two of your friends are attending the same event .
!
!34
We’re hiring!
If you’re interested, let’s talk after the session
eventbrite.com/jobs
Questions?
Download our apps:
eventbrite.com/eventbriteapp
Thank You!@_juandg