読者です 読者をやめる 読者になる 読者になる

DRYな備忘録

Don't Repeat Yourself.

【iOS】Push通知の実装(サーバ編その1)【できた】

最終ゴール

  • ApplePushNotificationを使ってサーバからクライアントにプッシュ通知を送りたい

今回のゴール

  1. クライアント側で得たデバイストークンに向けて
  2. とりあえずcliとか叩いて通知してみるだけ
  3. サーバアプリケーションは作らない

f:id:otiai10:20140804223048j:plain

前回

これでやってみたけれどうまくいかず、いろんな人に相談しました。今回これが達成できたのでそのまとめです。

記録

そのProvisioningあってる?

> これってクライアント側のprovisioningプロファイルはproductionのほういれてるんだよね? http://otiai10.hatenablog.com/entry/2014/08/03/181839
> クライアント側のprovisioningって、developer.apple.comでアプリ追加するときのやつですか?

f:id:otiai10:20140804215706j:plain

これだ!!しかしこれなんでInvalidになってるん?

Provisioningから作り直す

  1. App ID の "ApnSample" のNotificationが有効でなかったのでEditする
    1. Certificatesを求められるので注意深くDevelopmentを選択する
  2. Provisioning Profileも注意深くDevelopmentを選択して作り直す
  3. あとはここに沿ってpemファイル(develop用)をつくる

minimum.rb

require 'houston'

APN = Houston::Client.development
APN.certificate = File.read("pushcert.pem")
# 上記手順でつくったpemファイル

token = "<xxxxxxxx xxxxxxx>"
# http://otiai10.hatenablog.com/entry/2014/08/01/004941
# ここで手に入れたdevice token

notification = Houston::Notification.new(device: token)

notification.alert = "田井中律は俺の嫁!"
notification.badge = 821
notification.content_available = true
notification.custom_data = {foo: "bar"}

APN.push(notification)

いざ実行

% ruby minimum.rb
%

キタ──ヽ('∀')ノ──!!

f:id:otiai10:20140804223048j:plain

雑感

  • なんか色々申請書類あるけど
    • DevelopならDevelop(あるいはsandboxと表記されてるかもしれない)
    • ProductionならProduction(あるいはdistributionと表記されてるかもしれない)
  • で、注意深く一致させてつくったり提出したりしましょう
  • やっぱり手続き的なところ分からんことは人に聞くのが一番早いです
    • 回転寿司はいらないと言われました...

DRYな備忘録

追記

これGoでやりたいわけ、と思って探したらあるやん https://github.com/anachronistic/apns

README抜粋

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)
}

よさそう(小並感