Slide 1

Slide 1 text

Leveraging Zend Framework Sending Push Notifications By Mike Willbanks Software Engineering Manager CaringBridge MinneBar April 7, 2012

Slide 2

Slide 2 text

2 •Talk  Slides will be online later! •Me  Software Engineering Manager at CaringBridge  MNPHP Organizer  Open Source Contributor (Zend Framework and various others)  Where you can find me: • Twitter: mwillbanks G+: Mike Willbanks • IRC (freenode): mwillbanks Blog: http://blog.digitalstruct.com • GitHub: https://github.com/mwillbanks Housekeeping…

Slide 3

Slide 3 text

3 •Overview of Push Notifications •Overview of Zend_Mobile [_Push] •Android Push Notifications (C2DM) •Apple Push Notifications (APNS) •Microsoft Push Notifications •BlackBerry Push Notifications •Questions  Although you can bring them up at anytime! Agenda

Slide 4

Slide 4 text

Overview What are they? What is the benefit? High level; how do these things work?

Slide 5

Slide 5 text

5 •Push Notifications…  Are a message pushed to a central location and delivered to you.  Are (often) the same thing at a pub/sub model.  In the Mobile Space… • These messages often contain other technologies such as alerts, tiles, or raw data. What Are They

Slide 6

Slide 6 text

6 In Pictures…

Slide 7

Slide 7 text

Benefits of Push Notifications The benefits of push notifications are numerous; the question is if you have an app and you are running services to poll; why would you do such a thing!

Slide 8

Slide 8 text

8 One word… Battery Life

Slide 9

Slide 9 text

9 Impact of Polling

Slide 10

Slide 10 text

10 •Push notification services for mobile are highly efficient; it runs in the device background and enables your application to receive the message. •The other part of this; if you implemented it otherwise you would be polling. This not only wastes precious battery but also wastes their bandwidth.  NOTE: This is not always true; if you are sending data to the phone more often than a poll would do in 15 minutes; you are better off implementing polling. Battery Life

Slide 11

Slide 11 text

11 Can We Deliver?

Slide 12

Slide 12 text

12 •When you poll; things are generally 15+ minutes out to save on battery. In a push notification these happen almost instantly.  We’ve generally seen within 1-3s between sending a push notification to seeing it arrive on the device. •Additionally; push notifications can be sent to the device even if it is offline or turned off. •However, not all messages are guaranteed for delivery  You may hit quotas  Some notification servers only allow a single message to be in queue at 1 time (some group by collapse key), and others remove duplicates. Delivery

Slide 13

Slide 13 text

How These Things Work The 10,000 foot view.

Slide 14

Slide 14 text

14 10,000 Foot View of C2DM

Slide 15

Slide 15 text

15 10,000 Foot View of APNS

Slide 16

Slide 16 text

16 10,000 Foot View of Windows Push

Slide 17

Slide 17 text

17 10,000 Foot View of BlackBerry

Slide 18

Slide 18 text

18 •Created Zend_Mobile component in November because I was irritated with the other libraries that currently existed. •More fluid way of sending push notifications. •Requires Zend Framework 1.x  Committed in the ZF trunk; waiting for 1.12 release. •Handles sending push notifications to 3 systems  APNS, C2DM and MPNS •Library is located in my GitHub account & ZF Trunk  https://github.com/mwillbanks/Zend_Mobile  http://framework.zend.com/svn/framework/standard/trunk/libra ry/Zend/Mobile/ Overview of Zend_Mobile_Push

Slide 19

Slide 19 text

19 •svn checkout from ZF OR through github •Adjust your include_path (likely set in index.php) •You’re ready to rock! •Once you upgrade to 1.12 after it is released you won’t have anything more to do. Setting up the Library

Slide 20

Slide 20 text

Walking Through Android Understanding C2DM Anatomy of a Message Pushing Messages Displaying Items on the Client

Slide 21

Slide 21 text

21 •It allows third-party application servers to send lightweight messages to their Android applications. •C2DM makes no guarantees about delivery or the order of messages. •An application on an Android device doesn’t need to be running to receive messages. •It does not provide any built-in user interface or other handling for message data. •It requires devices running Android 2.2 or higher that also have the Market application installed. •It uses an existing connection for Google services (Through the Google Market) Understanding C2DM

Slide 22

Slide 22 text

22 •First things first – you must sign up to actually utilize C2DM  http://code.google.com/android/c2dm/signup.html  C2DM only works on Android w/ Google Market • Basically excludes: Amazon Kindle Fire. Registering for C2DM

Slide 23

Slide 23 text

23 Anatomy of the Mobile App

Slide 24

Slide 24 text

24 •We must update the Manifest file to state additional permissions. •We will then create a broadcast receiver that will handle the messages and registration. How the Application Works

Slide 25

Slide 25 text

25 Example Manifest

Slide 26

Slide 26 text

26 Handling the Registration (or Unregistering) •Registration / Registration Updates and Unregistering. •Registration is generally on app start up. •Be nice and allow your users to unregister from the push notification service 

Slide 27

Slide 27 text

27 Example Receiver More at: http://bit.ly/bxOoMO towards end of article.

Slide 28

Slide 28 text

28 •Some limitations  200K messages per day by default; use them wisely however you may request more.  1K message payload maximum.  You must implement incremental back off. Implementing a Server

Slide 29

Slide 29 text

29 How the Server Works

Slide 30

Slide 30 text

30 Using Zend_Mobile_Push_C2dm

Slide 31

Slide 31 text

Apple Push Notifications A brief walk-through on implementing notifications on the iPhone.

Slide 32

Slide 32 text

32 • The maximum size allowed for a notification payload is 256 bytes. •It allows third-party application servers to send lightweight messages to their iPhone/iPad applications. •Apple makes no guarantees about delivery or the order of messages. •An application on an iPhone/iPad device doesn’t need to be running to receive messages. •Message adheres to strict JSON but is abstracted away for us in how we will be using it today. •Messages should be sent in batches. •A feedback service must be listened to. Understanding APNS

Slide 33

Slide 33 text

33 •You must create a SSL certificate and key from the provisioning portal •After this is completed the provisioning profile will need to be utilized for the application. •Lastly, you will need to install the certificate and key on the server.  In this case; you will be making a pem certificate. Preparing to Implement Apple Push Notifications

Slide 34

Slide 34 text

34 Anatomy of the Application

Slide 35

Slide 35 text

35 •Registration  The application calls the registerForRemoteNotificationTypes: method.  The delegate implements the application:didRegisterForRemoteNotificationsWithDeviceToken: method to receive the device token.  It passes the device token to its provider as a non-object, binary value. •Notification  By default this just works based on the payload; for syncing you would implement this on the launch. How the Application Works

Slide 36

Slide 36 text

36 Example of Handling Registration

Slide 37

Slide 37 text

37 Example of Handling Remote Notification

Slide 38

Slide 38 text

38 •Some Limitations  Don’t send too many through at a time; meaning around 100K  • Every once in a while use a usleep  Max payload is 256 bytes Implementing the Server

Slide 39

Slide 39 text

39 How the Server Works

Slide 40

Slide 40 text

40 Using Zend_Mobile_Push_Apns

Slide 41

Slide 41 text

41 Using Zend_Mobile_Push_Apns Feedback

Slide 42

Slide 42 text

Microsoft Push Notifications Well, I am not certain if they will find the market share yet but hey; some people need to build apps for it!

Slide 43

Slide 43 text

43 •It allows third-party application servers to send lightweight messages to their Windows Mobile applications. •Microsoft makes no guarantees about delivery or the order of messages. (See a pattern yet?) •3 types of messages: Tile, Toast or Raw •Limitations:  One push channel per app, 30 push channels per device, additional adherence in order to send messages  3K Payload, 1K Header •http://msdn.microsoft.com/en-us/library/ff402537.aspx Understanding MPNS

Slide 44

Slide 44 text

44 •Upload a TLS certificate to Windows Marketplace  The Key-Usage value of the TLS certificate must be set to include client authentication.  The Root Certificate Authority (CA) of the certificate must be one of the CAs listed at: SSL Root Certificates for Windows Phone.  Stays authenticated for 4 months.  Set Service Name to the Common Name (CN) found in the certificate's Subject value.  Install the TLS certificate on your web service and enable HTTP client authentication. Preparing to Implement MPNS

Slide 45

Slide 45 text

45 Anatomy of MPNS

Slide 46

Slide 46 text

46 Registering for Push

Slide 47

Slide 47 text

47 Implementing the Callbacks for Notifications

Slide 48

Slide 48 text

48 Using Zend_Mobile_Push_Mpns Raw Messages

Slide 49

Slide 49 text

49 Using Zend_Mobile_Push_Mpns Toast Messages

Slide 50

Slide 50 text

50 Using Zend_Mobile_Push_Mpns Tile Messages

Slide 51

Slide 51 text

BlackBerry Push Notifications Blackberry push notifications are not currently supported… But we’ll talk about them anyway.

Slide 52

Slide 52 text

52 •It allows third-party application servers to send lightweight messages to their BlackBerry applications. •Allows a whopping 8K or the payload •Uses WAP PAP 2.2 as the protocol •Mileage may vary… Understanding BlackBerry Push

Slide 53

Slide 53 text

53 Anatomy of BB Push

Slide 54

Slide 54 text

54 •They have a “Sample” but it is deep within their Push SDK. Many of which are pre-compiled.  Documentation is hard to follow and the sample isn’t exactly straight forward: • Install the SDK then go to BPSS/pushsdk-low-level/sample-push- enabled-app/ and unzip sample-push-enabled-app-1.1.0.16-sources.jar  Completely uncertain on how to make it all work… Application Code

Slide 55

Slide 55 text

55 •You need to register with BlackBerry and have all of the application details ready to go:  https://www.blackberry.com/profile/?eventId=8121 •Download the PHP library:  NOTE: I am not certain if any of these actually work…  Updated to be OO; non-tested and a bit sloppy: https://github.com/mwillbanks/BlackBerryPush  Original source: http://bit.ly/nfbHXp Preparing to Implement

Slide 56

Slide 56 text

56 •Again, never tested nor do I know if it works. •If you do use BlackBerry push messages; please connect with me  I would like to allow us to get these into the component. Implementing BB Push w/ PHP

Slide 57

Slide 57 text

Moving on… The future, resources and the end!

Slide 58

Slide 58 text

58 •ZF 2  A new version will eventually come that is more inline with where Zend Framework 2 is going. However, there are bigger fish to fry at this point. •BlackBerry  There is a need for a quality implementation in PHP but RIM’s documentation and how they work with developers makes this increasingly difficult. • Register, Forums and bad documentation… all for? Next steps

Slide 59

Slide 59 text

59 • Main Sites  Apple Push Notifications: http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Con ceptual/RemoteNotificationsPG/Introduction/Introduction.html  Google C2DM (Android): http://code.google.com/android/c2dm/  Microsoft Push Notifications: http://msdn.microsoft.com/en- us/library/ff402558(v=vs.92).aspx  BlackBerry Push Notifications: http://us.blackberry.com/developers/platform/pushapi.jsp • Push Clients:  Zend_Mobile: • https://github.com/mwillbanks/Zend_Mobile • http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Mobile/  BlackBerry: https://github.com/mwillbanks/BlackBerryPush • Might be broken but at least better than what I found anywhere else  Resources

Slide 60

Slide 60 text

Questions? These slides will be posted to SlideShare & SpeakerDeck. Slideshare: http://www.slideshare.net/mwillbanks SpeakerDeck: http://speakerdeck.com/u/mwillbanks Twitter: mwillbanks G+: Mike Willbanks IRC (freenode): mwillbanks Blog: http://blog.digitalstruct.com GitHub: https://github.com/mwillbanks