Mobile: Push For Sync & Notifications: by Mike Willbanks Software Engineering Manager Caringbridge
This document provides an overview and comparison of push notification services for mobile platforms including Android (C2DM), Apple (APNS), Microsoft, and BlackBerry. It discusses the benefits of push notifications over polling, how they work at a high level, and includes code samples for implementing push notifications on each platform from a server using PHP libraries. It focuses on explaining the core concepts and comparing the different approaches rather than providing in-depth code for any single platform.
Mobile: Push For Sync & Notifications: by Mike Willbanks Software Engineering Manager Caringbridge
This document provides an overview and comparison of push notification services for mobile platforms including Android (C2DM), Apple (APNS), Microsoft, and BlackBerry. It discusses the benefits of push notifications over polling, how they work at a high level, and includes code samples for implementing push notifications on each platform from a server using PHP libraries. It focuses on explaining the core concepts and comparing the different approaches rather than providing in-depth code for any single platform.
By Mike Willbanks Software Engineering Manager CaringBridge 2 Software Engineering Manager at CaringBridge Open Source Contributor Organizer of MNPHP
Where you can find me: Twitter: mwillbanks G+: Mike Willbanks IRC (freenode): lubs Blog: http://blog.digitalstruct.com
About Mike 3 Overview of Push Notifications Android Push Notifications (C2DM) Apple Push Notifications (APNS) Microsoft Push Notifications BlackBerry Push Notifications Questions Although you can bring them up at anytime!
Agenda Overview What are they? What is the benefit? High level; how do these things work?
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 6 In Pictures 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!
8 One word Battery Life 9 Impact of Polling 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 11 Can We Deliver? 12 When you poll; things are generally 15+ minutes out to save on battery. In a push notification these happen almost instantly. Weve 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 How These Things Work The 10,000 foot view. 14 10,000 Foot View of C2DM 15 10,000 Foot View of APNS 16 10,000 Foot View of Windows Push 17 10,000 Foot View of who? 18 Oh, thats right Blackberry! Walking Through Android Understanding C2DM Anatomy of a Message Pushing Messages Displaying Items on the Client
20 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 doesnt 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 21 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; if you use get a new Amazon Kindle Fire it would not work there. We will be utilizing a library based on ZF https://github.com/mwillbanks/Zend_Service_Google_C2dm
Registering for C2DM 22 Anatomy of the Mobile App 23 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 24 Example Manifest 25 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 26 Example Receiver More at: http://bit.ly/bxOoMO towards end of article. 27 Enough Java already; it is a PHP conference! Implementing the actual server is quick and pain free At least in my opinion (I did build this PHP implementation of C2DM) 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 28 How the Server Works 29 Example is on GitHub: https://github.com/mwillbanks/Zend_Service_Google_C2dm Code was a little too large to attempt to fit it into a slide Using Zend_Service_Google_Gdata Apple Push Notifications A brief walk-through on implementing notifications on the iPhone. 31 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 doesnt 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 32 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 33 Anatomy of the Application 34 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 35 Example of Handling Registration 36 Example of Handling Remote Notification 37 Phew, through the Objective C. We will be leveraging APNS-PHP for this example as it encompasses everything you will need to be able to send notifications. http://code.google.com/p/apns-php/ Implementing the Server 38 How the Server Works 39 Example APNS-PHP Server 40 Example APNS-PHP Feedback Loop 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! 42 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 43 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. We will be using the following PHP class for this: http://phpwindowsphonepush.codeplex.com/ Certainly not the most beautiful code but it works. Preparing to Implement MPNS 44 Anatomy of MPNS 45 Registering for Push 46 Implementing the Callbacks for Notifications 47 Real easy, real fast and a simple class Im not too fond on the code to repeat myself but it would be easy to clean up http://phpwindowsphonepush.codeplex.com/ Pretty much nothing else left to do but show you the options! Implementing the Server 48 Example Implementing MPNS w/ PHP BlackBerry Push Notifications Are these even going to be needed in another year? 50 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 Only a sample php push server has ever been published. Looks to be mainly for the Browser: http://bit.ly/fYl6rr
Understanding BlackBerry Push 51 Anatomy of BB Push 52 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 isnt 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 You will see several areas to get the push notifications going Lets take a look. Application Code 53 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: Updated to be OO; non-tested and a bit sloppy: https://github.com/mwillbanks/BlackBerryPush Original source: http://bit.ly/nfbHXp Preparing to Implement 54 Be aware this code is highly alpha never been tested.
Let me know how it goes Will be refactoring it and testing it in the future. Implementing BB Push w/ PHP 55 ZF 2 I am looking as time permits to contribute implementations of the 4 big players push notification implementations to Zend Framework. I am not sure when I will find the time but at some point BlackBerry Who knows where they will end up. All I know is that developing for it seems painful and the documentation is certainly not what I would like to see. There is a large need for a quality implementation but at the same point developers are not highly interested in their platform. Moving Forward 56 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: Apns-php: http://code.google.com/p/apns-php/ ZF C2DM: https://github.com/mwillbanks/Zend_Service_Google_C2dm MS: http://phpwindowsphonepush.codeplex.com/ BlackBerry: https://github.com/mwillbanks/BlackBerryPush Might be broken but at least better than what I found anywhere else
Resources Questions? Give me feedback: http://joind.in/3766 Slides will be posted at joind.in later this afternoon.
Post-Blockchain vol.1: Disappear To Be Everywhere (how to create blockchain products that people love without noticing the technology): BLOCKCHAIN EVOLUTION, #1
CODING FOR ABSOLUTE BEGINNERS: How to Keep Your Data Safe from Hackers by Mastering the Basic Functions of Python, Java, and C++ (2022 Guide for Newbies)