macOS High SierraのcURLで手軽にPUSH通知が送れるようになった

  • 15
    Like
  • 0
    Comment

macOSをHigh Sierraにアップデートしたら、cURLのバージョンが7.54.0になっており、さらにHTTP/2の利用ができるようになっていました。

iOS10からはAPNs Provider APIを利用したPUSH通知が受け取れていたため、つまりはローカルのmacOSからiPhone実機へ向けたPUSH通知を送れます。

念のため、curlコマンドからnghttp2込みでビルドされているのを確認するのは-Vです。

$ curl -V
curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy

ちなみにcurlでHTTP/2を使えればよかったので、Dockerを使った記事である気軽にプッシュ通知のテストがしたいを参考にAPNs Provider APIを利用するスクリプトapns.shを用意する例を示すと、下記のようになります。

$ apns.sh key.pem iPhone実機のデバイストークン

これは引数でpemファイルのパス、デバイストークンを指定するようにしています。

apns.sh
#!/bin/sh

pemfile=$1
token=$2
pushData='{"aps": {"alert": "push dev test"}}'

bundleIdentifier="アプリのBundle ID"

appleUri="https://api.development.push.apple.com/3/device/"

curl -v \
-d "$pushData" \
-H "apns-priority: 10" \
-H "apns-expiration: 0" \
-H "apns-topic: ${bundleIdentifier}" \
--http2 \
--cert ${pemfile} \
${appleUri}${token}

iOSアプリを開発するmacOS標準で用意してくれているcurlコマンドさえ叩けばいいという利点は大きいので、例えばプラグイン作ってmacアプリからPUSH通知呼び出すとか。ちょっと工夫すればいろんな遊びがありそうですね。