iOS 建立遠距推播 App (四) 推播測試 – 使用 mac 終端機

iOS 建立遠距推播 App (四) 推播測試 – 使用 mac 終端機
將下列程式碼依需求填入對應的資料,並存成 token_send.sh

TEAM_ID= #開發者ID(在帳號資料右上角)
TOKEN_KEY_FILE_NAME= #p8格式的 Keys
AUTH_KEY_ID= Keys 的 ID
TOPIC= #App 的 Bundle Iden
DEVICE_TOKEN= #使用者設備的DEVICE_TOKEN
APNS_HOST_NAME=api.sandbox.push.apple.com


JWT_ISSUE_TIME=$(date +%s)
JWT_HEADER=$(printf '{ "alg": "ES256", "kid": "%s" }' "${AUTH_KEY_ID}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_CLAIMS=$(printf '{ "iss": "%s", "iat": %d }' "${TEAM_ID}" "${JWT_ISSUE_TIME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
JWT_HEADER_CLAIMS="${JWT_HEADER}.${JWT_CLAIMS}"
JWT_SIGNED_HEADER_CLAIMS=$(printf "${JWT_HEADER_CLAIMS}" | openssl dgst -binary -sha256 -sign "${TOKEN_KEY_FILE_NAME}" | openssl base64 -e -A | tr -- '+/' '-_' | tr -d =)
AUTHENTICATION_TOKEN="${JWT_HEADER}.${JWT_CLAIMS}.${JWT_SIGNED_HEADER_CLAIMS}"

PAYLOAD='
{
    "aps": {
        "alert": {
            "title": "非洲大草原",
            "subtitle": "肯亞",
            "body": "大象一隻"
        },
        "badge": 10,
        "sound": "default",
        "content-available" : 1
            },
}
'
echo $JWT_ISSUE_TIME
curl -v \
    --header "apns-collapse-id: oo7" \
    --header "apns-topic: $TOPIC" \
    --header "apns-push-type: alert" \
    --header "authorization: bearer $AUTHENTICATION_TOKEN" \
    --data "$PAYLOAD" \
    --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}

#curl -v --header "apns-topic: $TOPIC" --header "apns-push-type: alert" --header "authorization: bearer $AUTHENTICATION_TOKEN" --data "$PAYLOAD" --http2 https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}

將 取得 的 p8 格式的 Key 和 token_send.sh 放在同一目錄。(建議不要有中文)
執行下列指令測試 :

source ./token_send.sh

 

相關 PAYLOAD 的值可參考 : https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/generating_a_remote_notification