Apple Push Notification (APN) Provider for Go 1.6 and HTTP/2.
This is an alpha release with some missing features. Please see releases for updates.
Buford uses Apple's new HTTP/2 Notification API that was announced at WWDC 2015 and released on December 17, 2015.
API documentation is available from GoDoc.
Also see Apple's Local and Remote Notification Programming Guide, especially the sections on the JSON payload and the Notification API.
APN Apple Push Notification
Provider The Buford library is used to create a provider of push notifications.
Service Apple provides the push notification service that Buford communications with.
Client An http.Client
provides an HTTP/2 client to communication with the APN Service.
Notification A payload sent to a device token with some headers.
Device Token An identifier for an application on a given device.
Payload The JSON sent to a device.
Headers HTTP/2 headers are used to for priority and expiration.
To use this library you can install Go 1.6 beta 1 binaries or install Go from source.
Other than the standard library, Buford depends on the pkcs12 package, which can be retrieved or updated with:
go get -u golang.org/x/crypto/pkcs12
The API is not yet stable. Please use a tool like Godep to vendor Buford and its dependencies in your project.
package main
import (
"log"
"github.com/RobotsAndPencils/buford/certificate"
"github.com/RobotsAndPencils/buford/payload"
"github.com/RobotsAndPencils/buford/payload/badge"
"github.com/RobotsAndPencils/buford/push"
)
func main() {
// set these variables appropriately
filename := "/path/to/certificate.p12"
password := ""
deviceToken := "c2732227a1d8021cfaf781d71fb2f908c61f5861079a00954a5453f1d0281433"
cert, err := certificate.Load(filename, password)
if err != nil {
log.Fatal(err)
}
service := push.Service{
Client: push.NewClient(cert),
Host: push.Sandbox,
}
p := payload.APS{
Alert: payload.Alert{Body: "Hello HTTP/2"},
Badge: badge.New(42),
}
err = service.Push(deviceToken, &push.Headers{}, p)
if err != nil {
log.Fatal(err)
}
}
A more complete example can be found in the example folder.