{"id":7690,"date":"2015-10-11T08:51:03","date_gmt":"2015-10-11T08:51:03","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2015\/10\/11\/anachronistic-apns\/"},"modified":"2015-10-11T08:51:03","modified_gmt":"2015-10-11T08:51:03","slug":"anachronistic-apns","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2015\/10\/11\/anachronistic-apns\/","title":{"rendered":"anachronistic\/apns"},"content":{"rendered":"<p>Utilities for Apple Push Notification and Feedback Services.<\/p>\n<p><img decoding=\"async\" src=\"http:\/\/godoc.org\/github.com\/anachronistic\/apns?status.png\" \/><\/p>\n<h2>Installation<\/h2>\n<p><code>go get github.com\/anachronistic\/apns<\/code><\/p>\n<h2>Documentation<\/h2>\n<h2>Usage<\/h2>\n<h3>Creating pns and payloads manually<\/h3>\n<pre><code>package main\n\nimport (\n  \"fmt\"\n  apns \"github.com\/anachronistic\/apns\"\n)\n\nfunc main() {\n  payload := apns.NewPayload()\n  payload.Alert = \"Hello, world!\"\n  payload.Badge = 42\n  payload.Sound = \"bingbong.aiff\"\n\n  pn := apns.NewPushNotification()\n  pn.AddPayload(payload)\n\n  alert, _ := pn.PayloadString()\n  fmt.Println(alert)\n}\n<\/code><\/pre>\n<h4>Returns<\/h4>\n<pre><code>{\n  \"aps\": {\n    \"alert\": \"Hello, world!\",\n    \"badge\": 42,\n    \"sound\": \"bingbong.aiff\"\n  }\n}\n<\/code><\/pre>\n<h3>Using an alert dictionary for complex payloads<\/h3>\n<pre><code>package main\n\nimport (\n  \"fmt\"\n  apns \"github.com\/anachronistic\/apns\"\n)\n\nfunc main() {\n  args := make([]string, 1)\n  args[0] = \"localized args\"\n\n  dict := apns.NewAlertDictionary()\n  dict.Body = \"Alice wants Bob to join in the fun!\"\n  dict.ActionLocKey = \"Play a Game!\"\n  dict.LocKey = \"localized key\"\n  dict.LocArgs = args\n  dict.LaunchImage = \"image.jpg\"\n\n  payload := apns.NewPayload()\n  payload.Alert = dict\n  payload.Badge = 42\n  payload.Sound = \"bingbong.aiff\"\n\n  pn := apns.NewPushNotification()\n  pn.AddPayload(payload)\n\n  alert, _ := pn.PayloadString()\n  fmt.Println(alert)\n}\n<\/code><\/pre>\n<h4>Returns<\/h4>\n<pre><code>{\n  \"aps\": {\n    \"alert\": {\n      \"body\": \"Alice wants Bob to join in the fun!\",\n      \"action-loc-key\": \"Play a Game!\",\n      \"loc-key\": \"localized key\",\n      \"loc-args\": [\n        \"localized args\"\n      ],\n      \"launch-image\": \"image.jpg\"\n    },\n    \"badge\": 42,\n    \"sound\": \"bingbong.aiff\"\n  }\n}\n<\/code><\/pre>\n<h3>Setting custom properties<\/h3>\n<pre><code>package main\n\nimport (\n  \"fmt\"\n  apns \"github.com\/anachronistic\/apns\"\n)\n\nfunc main() {\n  payload := apns.NewPayload()\n  payload.Alert = \"Hello, world!\"\n  payload.Badge = 42\n  payload.Sound = \"bingbong.aiff\"\n\n  pn := apns.NewPushNotification()\n  pn.AddPayload(payload)\n\n  pn.Set(\"foo\", \"bar\")\n  pn.Set(\"doctor\", \"who?\")\n  pn.Set(\"the_ultimate_answer\", 42)\n\n  alert, _ := pn.PayloadString()\n  fmt.Println(alert)\n}\n<\/code><\/pre>\n<h4>Returns<\/h4>\n<pre><code>{\n  \"aps\": {\n    \"alert\": \"Hello, world!\",\n    \"badge\": 42,\n    \"sound\": \"bingbong.aiff\"\n  },\n  \"doctor\": \"who?\",\n  \"foo\": \"bar\",\n  \"the_ultimate_answer\": 42\n}\n<\/code><\/pre>\n<h3>Sending a notification<\/h3>\n<pre><code>package main\n\nimport (\n  \"fmt\"\n  apns \"github.com\/anachronistic\/apns\"\n)\n\nfunc main() {\n  payload := apns.NewPayload()\n  payload.Alert = \"Hello, world!\"\n  payload.Badge = 42\n  payload.Sound = \"bingbong.aiff\"\n\n  pn := apns.NewPushNotification()\n  pn.DeviceToken = \"YOUR_DEVICE_TOKEN_HERE\"\n  pn.AddPayload(payload)\n\n  client := apns.NewClient(\"gateway.sandbox.push.apple.com:2195\", \"YOUR_CERT_PEM\", \"YOUR_KEY_NOENC_PEM\")\n  resp := client.Send(pn)\n\n  alert, _ := pn.PayloadString()\n  fmt.Println(\"  Alert:\", alert)\n  fmt.Println(\"Success:\", resp.Success)\n  fmt.Println(\"  Error:\", resp.Error)\n}\n<\/code><\/pre>\n<h4>Returns<\/h4>\n<pre><code>  Alert: {\"aps\":{\"alert\":\"Hello, world!\",\"badge\":42,\"sound\":\"bingbong.aiff\"}}\nSuccess: true\n  Error: \n<\/code><\/pre>\n<h3>Checking the feedback service<\/h3>\n<pre><code>package main\n\nimport (\n  \"fmt\"\n  apns \"github.com\/anachronistic\/apns\"\n  \"os\"\n)\n\nfunc main() {\n  fmt.Println(\"- connecting to check for deactivated tokens (maximum read timeout =\", apns.FeedbackTimeoutSeconds, \"seconds)\")\n\n  client := apns.NewClient(\"feedback.sandbox.push.apple.com:2196\", \"YOUR_CERT_PEM\", \"YOUR_KEY_NOENC_PEM\")\n  go client.ListenForFeedback()\n\n  for {\n    select {\n    case resp :=<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Utilities for Apple Push Notification and Feedback Services. Installation go get github.com\/anachronistic\/apns Documentation Usage Creating pns and payloads manually package main import ( &#8220;fmt&#8221; apns &#8220;github.com\/anachronistic\/apns&#8221; ) func main() { payload := apns.NewPayload() payload.Alert = &#8220;Hello, world!&#8221; payload.Badge = 42 payload.Sound = &#8220;bingbong.aiff&#8221; pn := apns.NewPushNotification() pn.AddPayload(payload) alert, _ := pn.PayloadString() fmt.Println(alert) } Returns { [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-7690","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/7690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=7690"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/7690\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=7690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=7690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=7690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}