17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Apple APNsでのPUSH通知のテストスクリプト

Last updated at Posted at 2020-07-01

はじめに

Firebase Cloud Messaging でPUSH通知の実装していましたが、なぜか、iosでPUSH通知されなくなっていました。何が原因なのかを切り分けるために、AppleのPUSH通知サービス(APNs)でPUSHが送信されるか試すことにしました。

APNsでの認証ですが、以前使われていた「APNs 証明書」と最近使われている「APNs 認証キー」の2つがあります。「APNs 認証キー」を使ったPUSH通知のスクリプトを記載します。このスクリプトは、macで動かしています。おそらく、curlとopensslがある環境であれば動くと思います。

パラメータは、Firebaseから取得するように書いていますが、APNsのパラメータを使えばPUSH通知できるので、Firebaseを使っていない場合もこのスクリプトでテストできます。

準備

以下のシェルスクリプトで記載するキーIDチームIDアプリのバンドルIDは、Firebase Consoleの以下で確認できます。設定クラウドメッセージングからiosアプリ設定の項目を確認します。図の赤で囲っている部分に、上記の3つのIDが記載されています。
APNs認証キーのファイルは、Firebaseのここの設定をした時に保存していると思いますので、そのファイルを使います。

cachepolicy cachepolicy

PUSH通知のシェルスクリプト

以下のシェルスクリプトの設定項目以下の5行のパラメータを自分のアプリのパラメータに設定して、シェルスクリプトを動かすとiPhoneへのPUSH通知ができます。
デバイストークンは、PUSH通知を送信したいiPhoneのデバイストークンを指定してください。

#!/bin/sh

# ------ 設定項目
deviceToken=1234567890abcdefghij  # デバイストークン
authKey="./AuthKey_AZ8N4W9YYC.p8" # APNs 認証キーのファイルを指定
authKeyId=AB8C4D9EFG              # キー ID
teamId=ABCD12EFGH                 # チーム ID
bundleId=com.example.appbundleId  # アプリのバンドルID
# ------ 設定項目終了

endpoint=https://api.development.Push.Apple.com

read -r -d '' payload <<-'EOF'
{
   "aps": {
      "alert": {
         "title": "notification title",
         "subtitle": "notification subtitle",
         "body": "notification body "
      }
   }
}
EOF

base64() {
   openssl base64 -e -A | tr -- '+/' '-_' | tr -d =
}

sign() {
   printf "$1"| openssl dgst -binary -sha256 -sign "$authKey" | base64
}

time=$(date +%s)
header=$(printf '{ "alg": "ES256", "kid": "%s" }' "$authKeyId" | base64)
claims=$(printf '{ "iss": "%s", "iat": %d }' "$teamId" "$time" | base64)
jwt="$header.$claims.$(sign $header.$claims)"

curl --verbose \
   --header "content-type: application/json" \
   --header "authorization: bearer $jwt" \
   --header "apns-topic: $bundleId" \
   --data "$payload" \
   $endpoint/3/device/$deviceToken
17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?