iOS 遠距推播發送指令

此為 Apple 官方針對遠距推播給出的命令列指令,文件網址如下。

https://developer.apple.com/documentation/usernotifications/sending-push-notifications-using-command-line-tools

將以下 shell srcript 程式存檔,執行時在終端機使用 source 指令執行。

使用 JWT 方式發送

TEAM_ID=開發者編號
TOKEN_KEY_FILE_NAME=AuthKey_JWT編號.p8
AUTH_KEY_ID=JWT編號
TOPIC=App_Bundle_ID
DEVICE_TOKEN=App跟APNs註冊後取得的Token
# Development server
APNS_HOST_NAME=api.sandbox.push.apple.com
# Production server
# APNS_HOST_NAME=api.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": 1,
        "sound": "default"
    }
}
'

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}


使用憑證發送方式

CERTIFICATE_FILE_NAME=憑證.cer
CERTIFICATE_KEY_FILE_NAME=key.pem
TOPIC=App_Bundle_ID
DEVICE_TOKEN=App跟APNs註冊後取得的Token
# Development server
APNS_HOST_NAME=api.sandbox.push.apple.com
# Production server
# APNS_HOST_NAME=api.push.apple.com

PAYLOAD='
{
    "aps": {
        "alert": {
            "title": "標題",
            "subtitle": "副標題",
            "body": "這裡是推播內容"
        },
        "badge": 1,
        "sound": "default"
    }
}
'

curl -v --header "apns-topic: ${TOPIC}" \
    --header "apns-push-type: alert" \
    --cert "${CERTIFICATE_FILE_NAME}" \
    --cert-type DER \
 --key "${CERTIFICATE_KEY_FILE_NAME}" \
    --key-type PEM \
    --data "${PAYLOAD}" \
    --http2  https://${APNS_HOST_NAME}/3/device/${DEVICE_TOKEN}


JSON payload 格式請參考 Apple 官方網站。

https://developer.apple.com/documentation/usernotifications/generating-a-remote-notification

發表迴響