1. yimajo

    Posted

    yimajo
Changes in title
+macOS High SierraのcURLで手軽にPUSH通知が送れるようになった
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,43 @@
+macOSをHigh Sierraにアップデートしたら、cURLのバージョンが7.54.0になっており、さらにHTTP/2の利用ができるようになっていました。
+
+iOS10から、[APNs Provider API](https://developer.apple.com/jp/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html)を利用したPUSH通知が送れていたため、つまりはローカルのmacOSから端末へ向けたPUSH通知を出すことが出来ます。
+
+念のため、curlコマンドからnghttp2込みでビルドされているのを確認するのは-Vです。
+
+```bash
+$ 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を使った記事である[気軽にプッシュ通知のテストがしたい](https://qiita.com/fromkk/items/e1d8d8e302b49a372dd10)を参考にAPNs Provider APIを利用するスクリプトapns.shを用意する例を示すと、下記のようになります。
+
+```
+$ apns.sh key.pem デバイストークン
+```
+
+これは引数でpemファイルのパス、デバイストークンを指定するようにしています。
+
+```bash: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コマンドさえ叩けばいいという利点は大きいので、ちょっと工夫すればいろんなやり方がありそうですね。