Mobile: Push forSync & Notifications By Mike Willbanks Software Engineering Manager CaringBridge
About Mike… • 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.com2
Agenda • 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!3
OverviewWhat are they?What is the benefit?High level; how do these things work?
What Are They • 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.5
Battery Life • 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.10
Delivery • 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.12
Walking Through AndroidUnderstanding C2DMAnatomy of a MessagePushing MessagesDisplaying Items on the Client
Understanding C2DM • 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)20
Registering for C2DM • 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_C2dm21
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 25
Example Receiver More at: http://bit.ly/bxOoMO towards end of article.26
Implementing a Server • 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.27
Using Zend_Service_Google_Gdata • 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 29
Apple Push NotificationsA brief walk-through on implementing notifications on theiPhone.
Understanding APNS • 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.31
Preparing to Implement Apple Push Notifications • 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.32
How the Application Works • 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.34
Implementing the Server • 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/37
Microsoft Push NotificationsWell, I am not certain if they will find the market share yetbut hey; some people need to build apps for it!
Understanding MPNS • 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.aspx42
Preparing to Implement MPNS • 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 certificates 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/43 Certainly not the most beautiful code but it works.
Implementing the Callbacks for Notifications46
Implementing the Server • Real easy, real fast and a simple class… I’m 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!47
BlackBerry Push NotificationsAre these even going to be needed in another year?
Understanding BlackBerry Push • 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/fYl6rr50
Application Code • 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-126.96.36.199-sources.jar • You will see several areas to get the push notifications going… Let’s take a look.52
Preparing to Implement • 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/nfbHXp53
Implementing BB Push w/ PHP • 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.54
Moving Forward • 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.55
Resources • 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 56
Questions?Give me feedback: http://joind.in/3766Slides will be posted at joind.in later this afternoon.