search
LoginSignup
11

More than 1 year has passed since last update.

posted at

updated at

Organization

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

はじめに

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

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
What you can do with signing up
11