So, did you catch WWDC 724 yet? It’s less than 15 minutes, check it out:
What’s New in the Apple Push Notification Service (transcript)
Starting with a review of the HTTP/2 based provider API, you will learn about an important new feature: Token Based Authentication. Learn to connect to APNs using authentication tokens for sending pushes via the HTTP/2 API, relieving you of the overhead associated with maintaining valid certificates.
Ah, yes. Longtime readers will remember various instances of untrammelled joy (where by “joy” we mean “near-homicidal frenzy”) APNs has provided over the years, so this is a very interesting indeed development. Full details were published September 20 at
Local and Remote Notification Programming Guide / Apple Push Notification Service
and announced September 22. So let’s check this out, shall we? Especially as we got the annually dreaded “This certificate will no longer be valid in 30 days.” email day before yesterday, which makes the timing entirely apropos!
Step 1: Oh look, now under certs in the Dev Portal we have this new “APNs Auth Key” option! So add one, and…
Step 2: Read the instructions:
Download, Install and Backup
Download your Authentication Key to your Mac, then double click the .key file to install in Keychain Access. Make sure to save a back up of your key in a secure place. It will not be presented again and cannot be retrieved at a later time.
Step 3: Be confused as the download gives you a .p8 file, not a .key file, and it’s not evident how you get that into the Keychain.
Step 4: Check out the discussion on the dev boards:
It’s a PEM-encoded, unencrypted PKCS#8 file. You can inspect it with
openssl pkcs8 -nocrypt -in <your_file.p8>, but you’ll need a newer version of OpenSSL than the one that ships with El Capitan (I’m not sure which version comes with Sierra). I’m not sure how to import it into the Keychain, but I also haven’t run into a situation where having it in the Keychain would be helpful (other than just for storage).
Step 5: OK then, let’s find some service that can use this shiny new .p8 file then…
Step 6: ¯\_(ツ)_/¯ Not much out there yet!
Alright, so we’ll keep working with a cert-based process for the moment then, check for UPDATES! below once we find some. In the meantime, development tools that can work with the shiny newness? Hmmmm … looks like you’re pretty much on your own there too as we write this. Right then, if you know of any token-supporting services or tools, hit the comments section!
If you’re proactive enough to want to help move the development tools scene along, our goto for APNs tinkering for a while now has been Knuff: “The debug application for Apple Push Notification Service (APNs).” along with Knuff-Framework “just add it to your application and the phone will be visible under “Devices”” and Knuff – The APNs Debug Tool on the App Store! Pretty complete ecosystem there and we strongly encourage helping out with it if you’re interested in this space.
If you’re new to this APNs thing, or If you’d simply like a straightforward HTTP page to use for testing, check out this new site PushTry.com to, eponymously enough, try pushing:
Nicely done tutorials for both iOS and Android, clean and functional; definitely recommend you give that a pushtry. And they’re working on token support too!
Should you be looking to get this on your server side ASAP, a quick look around for projects at least using HTTP/2 APNs, that being kinda the floor for ‘actively maintained’ currently, in a variety of environments turns up these:
VaporAPNS “is a simple, yet elegant, Swift library that allows you to send Apple Push Notifications using HTTP/2 protocol in Linux & macOS. It has support for the brand-new Token Based Authentication but if you need it, the traditional certificate authentication method is ready for you to use as well. Choose whatever you like!”
swift-apns: “Swift Framework for sending Apple Push Notification over HTTP/2 API”
node-apn: “A Node.js module for interfacing with the Apple Push Notification service.”
ApnsPHP: “Apple Push Notification & Feedback Provider”
APNS/2 “is a go package designed for simple, flexible and fast Apple Push Notifications on iOS, OSX and Safari using the new HTTP/2 Push provider API.”
And again, if you have good … or bad … experiences with any particular piece of APNs server kit, let us know!
docker-swift-apns: “A collection of Docker images to build APNS providers in Swift”
Push Notifications and Local Notifications – Tutorial
Push Notifications Tutorial: Getting Started
NWPusher: “OS X and iOS application and framework to play with the Apple Push Notification service (APNs)”
iOS remote push notifications in a nutshell