apns

by Coccodrillo

Coccodrillo / apns

A Golang package for sending Apple Push Notifications and using the Feedback Service.

427 Stars 124 Forks Last release: Not found MIT License 77 Commits 0 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

apns

Utilities for Apple Push Notification and Feedback Services.

GoDoc

Installation

go get github.com/anachronistic/apns

Documentation

Usage

Creating pns and payloads manually

package main

import ( "fmt" apns "github.com/anachronistic/apns" )

func main() { payload := apns.NewPayload() payload.Alert = "Hello, world!" payload.Badge = 42 payload.Sound = "bingbong.aiff"

pn := apns.NewPushNotification() pn.AddPayload(payload)

alert, _ := pn.PayloadString() fmt.Println(alert) }

Returns

{
  "aps": {
    "alert": "Hello, world!",
    "badge": 42,
    "sound": "bingbong.aiff"
  }
}

Using an alert dictionary for complex payloads

package main

import ( "fmt" apns "github.com/anachronistic/apns" )

func main() { args := make([]string, 1) args[0] = "localized args"

dict := apns.NewAlertDictionary() dict.Body = "Alice wants Bob to join in the fun!" dict.ActionLocKey = "Play a Game!" dict.LocKey = "localized key" dict.LocArgs = args dict.LaunchImage = "image.jpg"

payload := apns.NewPayload() payload.Alert = dict payload.Badge = 42 payload.Sound = "bingbong.aiff"

pn := apns.NewPushNotification() pn.AddPayload(payload)

alert, _ := pn.PayloadString() fmt.Println(alert) }

Returns

{
  "aps": {
    "alert": {
      "body": "Alice wants Bob to join in the fun!",
      "action-loc-key": "Play a Game!",
      "loc-key": "localized key",
      "loc-args": [
        "localized args"
      ],
      "launch-image": "image.jpg"
    },
    "badge": 42,
    "sound": "bingbong.aiff"
  }
}

Setting custom properties

package main

import ( "fmt" apns "github.com/anachronistic/apns" )

func main() { payload := apns.NewPayload() payload.Alert = "Hello, world!" payload.Badge = 42 payload.Sound = "bingbong.aiff"

pn := apns.NewPushNotification() pn.AddPayload(payload)

pn.Set("foo", "bar") pn.Set("doctor", "who?") pn.Set("the_ultimate_answer", 42)

alert, _ := pn.PayloadString() fmt.Println(alert) }

Returns

{
  "aps": {
    "alert": "Hello, world!",
    "badge": 42,
    "sound": "bingbong.aiff"
  },
  "doctor": "who?",
  "foo": "bar",
  "the_ultimate_answer": 42
}

Sending a notification

package main

import ( "fmt" apns "github.com/anachronistic/apns" )

func main() { payload := apns.NewPayload() payload.Alert = "Hello, world!" payload.Badge = 42 payload.Sound = "bingbong.aiff"

pn := apns.NewPushNotification() pn.DeviceToken = "YOUR_DEVICE_TOKEN_HERE" pn.AddPayload(payload)

client := apns.NewClient("gateway.sandbox.push.apple.com:2195", "YOUR_CERT_PEM", "YOUR_KEY_NOENC_PEM") resp := client.Send(pn)

alert, _ := pn.PayloadString() fmt.Println(" Alert:", alert) fmt.Println("Success:", resp.Success) fmt.Println(" Error:", resp.Error) }

Returns

  Alert: {"aps":{"alert":"Hello, world!","badge":42,"sound":"bingbong.aiff"}}
Success: true
  Error: 

Checking the feedback service

package main

import ( "fmt" apns "github.com/anachronistic/apns" "os" )

func main() { fmt.Println("- connecting to check for deactivated tokens (maximum read timeout =", apns.FeedbackTimeoutSeconds, "seconds)")

client := apns.NewClient("feedback.sandbox.push.apple.com:2196", "YOUR_CERT_PEM", "YOUR_KEY_NOENC_PEM") go client.ListenForFeedback()

for { select { case resp :=

Returns

- connecting to check for deactivated tokens (maximum read timeout = 5 seconds)
- nothing returned from the feedback service
exit status 1

Your output will differ if the service returns device tokens.

- recv'd: DEVICE_TOKEN_HERE
...etc.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.