REST is not enough
Juan Gomez
@_juandg
Using Push Notifications to better support your
mobile clients
What this talk is about
• Brief introduction to push notifications
• Why you need to embrace them
• High level details on ...
What I’m not going to cover
• Implementation on the smartphone side.
• Lots of code.
• Specially production ready code.
• ...
How many hours of your life have
you spent looking at this webpage?
4
5
6
!
!
!
There has to be
a better way…
Our current model
7
8
Smartphone use around the world
isn’t growing
9
It’s exploding
10
Smartphones are eating the world!
11
Our current model
12
Not very efficient
13
Servers are smart
14
How do we solve this?
15
What’s a Push Notification?
!
• Display a short text message
• Play a brief sound
• iOS: Set a number in a badge on the ap...
General architecture
17
PN
Service
Anatomy of a Push Notification
!
{	
	 "aps":	
	 {	
	 	 "alert":	
	 	 {	
	 	 	 "action-loc-key": "Open",	
	 	 	 "body": "He...
High level comparison
19
Connection
Streaming TCP/IP
Socket
HTTP/XMPP
Security SSL SSL
Content Binary JSON
Max payload 256...
Downside of PNs
• Not reliable
• No guarantee the push will be delivered
• Stale information
• Expirations
20
APPLE PUSH NOTIFICATION
(APN)
21
What you need to get started
• iOS app
• Provisioning profile
• Certificate
• Device tokens
• Payload (a.k.a your messages...
Obtaining the certificate
Similar to any other SSL cert
• Generate CSR
• Upload it to Apple
• Link it to your App Id
• Ena...
Obtaining the device token
24
Establishing trust with APNs
25
Best way to do APNs on Python
Use PyAPNS
• It’s on PyPI
• $ pip install apns
• Source Code on Github
• https://github.com/...
Send simple Push with PyAPNs
!
!
!
from apns import APNs, Frame, Payload	
!
apns = APNs(use_sandbox=True, cert_file='cert....
Send simple Push with PyAPNs
!
!
!
token_hex = 'some_token'	
payload = Payload(alert="Hello World!", 	
	 	 sound="default"...
Send multiple PNs with PyAPNs
!
import time	
…	
frame = Frame()!
identifier = 1!
expiry = time.time()+3600!
priority = 10!...
Scaling your APNs implementation
30
GOOGLE CLOUD MESSAGING
(GCM)
31
What you need to get started
• Android app
• Sender Id
• Application Id (a.k.a Package name)
• Registration Id
• Google Us...
GCM has two implementations
• GCM HTTP
• Uses HTTP POST
• Downstream only
• Easy to implement
• GCM Cloud Connection Serve...
Good way to do GCM on Python
Use SleekXMPP
• It’s on PyPI
• $ pip install sleekxmpp
• Source Code on Github
• https://gith...
Connecting to GCM with SleekXMPP
!
!
from sleekxmpp import ClientXMPP	
xmpp = ClientXMPP('PROJECT_ID@gcm.googleapis.com', ...
3RD PARTY ALTERNATIVES
36
Parse
• Acquired by Facebook a year ago.
• Does much more than just Push Notifications
• Cross-platform SDKs
• iOS, Androi...
Send simple Push with Parse
!
!
!
!
!
import json,httplib	
connection = httplib.HTTPSConnection('api.parse.com', 443)	
con...
Send simple Push with Parse
!
connection.request('POST', '/1/push', json.dumps({	
       "channels": [ “Giants", “Mets" ],...
Downsides of Parse
• No Official Python SDK
• 3rd party “recommended” SDK on Github
• Issues with their Mobile SDK
• Speci...
Urban Airship
• Push is still their main product
• Moving into mobile marketing and payments.
• Based out of Portland, OR
...
Send simple Push with UA
!
!
import urbanairship as ua	
airship = ua.Airship('application_key','master_secret')	
push = ai...
SUMMARY
43
Summary
• Mobile is eating the world.
• Push Notification will make your service smarter.
• Using Python for Push Notifica...
Thank You!
Twitter: @_juandg
Email: jgomez@eventbrite.com
Lanyrd: lanyrd.com/profile/juandg/
Upcoming SlideShare
Loading in …5
×

REST is not enough: Using Push Notifications to better support your mobile clients

6,331
-1

Published on

This talk will introduce you to Push Notifications, a very powerful way for your Python service to communicate information to mobile devices. You will learn how Push Notifications work, their advantages and disadvantages and how you can implement them on your Python projects.

Published in: Software, Technology, Education
0 Comments
13 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
6,331
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
43
Comments
0
Likes
13
Embeds 0
No embeds

No notes for slide

REST is not enough: Using Push Notifications to better support your mobile clients

  1. 1. REST is not enough Juan Gomez @_juandg Using Push Notifications to better support your mobile clients
  2. 2. What this talk is about • Brief introduction to push notifications • Why you need to embrace them • High level details on how to implement them in Python 2
  3. 3. What I’m not going to cover • Implementation on the smartphone side. • Lots of code. • Specially production ready code. • Detailed topics. 3
  4. 4. How many hours of your life have you spent looking at this webpage? 4
  5. 5. 5
  6. 6. 6 ! ! ! There has to be a better way…
  7. 7. Our current model 7
  8. 8. 8
  9. 9. Smartphone use around the world isn’t growing 9
  10. 10. It’s exploding 10
  11. 11. Smartphones are eating the world! 11
  12. 12. Our current model 12
  13. 13. Not very efficient 13
  14. 14. Servers are smart 14
  15. 15. How do we solve this? 15
  16. 16. What’s a Push Notification? ! • Display a short text message • Play a brief sound • iOS: Set a number in a badge on the app’s icon • Android: Display a banner on the notification bar 16
  17. 17. General architecture 17 PN Service
  18. 18. Anatomy of a Push Notification ! { "aps": { "alert": { "action-loc-key": "Open", "body": "Hello, world!" }, "badge": 2 } } 18
  19. 19. High level comparison 19 Connection Streaming TCP/IP Socket HTTP/XMPP Security SSL SSL Content Binary JSON Max payload 256 bytes 4 kb Device errors Asynchronous query HTTP/XMPP response
  20. 20. Downside of PNs • Not reliable • No guarantee the push will be delivered • Stale information • Expirations 20
  21. 21. APPLE PUSH NOTIFICATION (APN) 21
  22. 22. What you need to get started • iOS app • Provisioning profile • Certificate • Device tokens • Payload (a.k.a your messages) 22
  23. 23. Obtaining the certificate Similar to any other SSL cert • Generate CSR • Upload it to Apple • Link it to your App Id • Enable Push Notifications • Generate certificate 23
  24. 24. Obtaining the device token 24
  25. 25. Establishing trust with APNs 25
  26. 26. Best way to do APNs on Python Use PyAPNS • It’s on PyPI • $ pip install apns • Source Code on Github • https://github.com/djacobs/PyAPNs 26
  27. 27. Send simple Push with PyAPNs ! ! ! from apns import APNs, Frame, Payload ! apns = APNs(use_sandbox=True, cert_file='cert.pem', key_file='key.pem') 27
  28. 28. Send simple Push with PyAPNs ! ! ! token_hex = 'some_token' payload = Payload(alert="Hello World!", sound="default", badge=1) apns.gateway_server.send_notification(token_hex, payload) 28
  29. 29. Send multiple PNs with PyAPNs ! import time … frame = Frame()! identifier = 1! expiry = time.time()+3600! priority = 10! frame.add_item('some_token', payload, identifier, expiry, priority) frame.add_item(…) frame.add_item(…) apns.gateway_server.send_notification_multiple(frame) 29
  30. 30. Scaling your APNs implementation 30
  31. 31. GOOGLE CLOUD MESSAGING (GCM) 31
  32. 32. What you need to get started • Android app • Sender Id • Application Id (a.k.a Package name) • Registration Id • Google User Account • Sender Auth Token • Payload (a.k.a your messages) 32
  33. 33. GCM has two implementations • GCM HTTP • Uses HTTP POST • Downstream only • Easy to implement • GCM Cloud Connection Server (CCS) • Based on XMPP (Jabber) • Two way communication 33
  34. 34. Good way to do GCM on Python Use SleekXMPP • It’s on PyPI • $ pip install sleekxmpp • Source Code on Github • https://github.com/fritzy/SleekXMPP 34
  35. 35. Connecting to GCM with SleekXMPP ! ! from sleekxmpp import ClientXMPP xmpp = ClientXMPP('PROJECT_ID@gcm.googleapis.com', 'API_KEY') xmpp.connect(address=('gcm.googleapis.com', 5235), use_ssl=True) 35
  36. 36. 3RD PARTY ALTERNATIVES 36
  37. 37. Parse • Acquired by Facebook a year ago. • Does much more than just Push Notifications • Cross-platform SDKs • iOS, Android, Windows Phone, etc. • Uses a very simple REST API for sending PNs 37
  38. 38. Send simple Push with Parse ! ! ! ! ! import json,httplib connection = httplib.HTTPSConnection('api.parse.com', 443) connection.connect() 38
  39. 39. Send simple Push with Parse ! connection.request('POST', '/1/push', json.dumps({        "channels": [ “Giants", “Mets" ],        "data": {          "alert": "The Giants won against the Mets 2-3."        }      }), {        "X-Parse-Application-Id": "${APPLICATION_ID}",        "X-Parse-REST-API-Key": "${REST_API_KEY}",        "Content-Type": "application/json"      }) result = json.loads(connection.getresponse().read()) 39
  40. 40. Downsides of Parse • No Official Python SDK • 3rd party “recommended” SDK on Github • Issues with their Mobile SDK • Specifically on Android • They’re working through them 40
  41. 41. Urban Airship • Push is still their main product • Moving into mobile marketing and payments. • Based out of Portland, OR • Simple REST API • Cross-platform SDKs • iOS, Android, Blackberry, etc. • Official Python SDK 41
  42. 42. Send simple Push with UA ! ! import urbanairship as ua airship = ua.Airship('application_key','master_secret') push = airship.create_push() push.audience = ua.or_(ua.alias(‘adam'), ua.device_token('some_token')) push.notification = ua.notification(alert='Hello') push.device_types = ua.all_ push.send() 42
  43. 43. SUMMARY 43
  44. 44. Summary • Mobile is eating the world. • Push Notification will make your service smarter. • Using Python for Push Notifications is easy. 44
  45. 45. Thank You! Twitter: @_juandg Email: jgomez@eventbrite.com Lanyrd: lanyrd.com/profile/juandg/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×