Upgrade to Pro — share decks privately, control downloads, hide ads and more …

REST is not enough by Juan Gomez

REST is not enough by Juan Gomez

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.

PyCon 2014

April 12, 2014
Tweet

More Decks by PyCon 2014

Other Decks in Programming

Transcript

  1. 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
  2. What I’m not going to cover • Implementation on the

    smartphone side. • Lots of code. • Specially production ready code. • Detailed topics. 3
  3. 5

  4. 8

  5. 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
  6. Anatomy of a Push Notification ! { "aps": { "alert":

    { "action-loc-key": "Open", "body": "Hello, world!" }, "badge": 2 } } 18
  7. 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
  8. Downside of PNs • Not reliable • No guarantee the

    push will be delivered • Stale information • Expirations 20
  9. What you need to get started • iOS app •

    Provisioning profile • Certificate • Device tokens • Payload (a.k.a your messages) 22
  10. 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
  11. 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
  12. 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
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. Connecting to GCM with SleekXMPP ! ! from sleekxmpp import

    ClientXMPP xmpp = ClientXMPP('[email protected]', 'API_KEY') xmpp.connect(address=('gcm.googleapis.com', 5235), use_ssl=True) 35
  19. 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
  20. Send simple Push with Parse ! ! ! ! !

    import json,httplib connection = httplib.HTTPSConnection('api.parse.com', 443) connection.connect() 38
  21. 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
  22. 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
  23. 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
  24. 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
  25. Summary • Mobile is eating the world. • Push Notification

    will make your service smarter. • Using Python for Push Notifications is easy. 44