gpt4 book ai didi

apple-push-notifications - 如何使用 APNs Auth Key 和标准 CLI 工具发送 APNs 推送消息?

转载 作者:行者123 更新时间:2023-12-03 07:31:00 28 4
gpt4 key购买 nike

Apple 最近向 APNS 添加了一种新的身份验证方法 ( Apple Push Notification Authentication Key (Sandbox & Production) )。

enter image description here

下载的 key 是 .p8带有私钥的文件:

$ cat APNSAuthKey_3HHEB343FX.p8
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBH...Already.Revoked...lHEjCX1v51W
-----END PRIVATE KEY-----

我使用旧方法使用 APNs 消息 - 将它们添加到钥匙串(keychain),请求证书并使用 OpenSSL 将消息发送到 gateway.production.push.apple.com:2195 .

如何使用标准 CLI Linux 工具(OpenSSL、Python 等)使用新格式发送推送通知?

最佳答案

如果您的计算机上安装了支持 HTTP/2 的 curl 和支持 ECDSA 的 openssl,则可以使用以下脚本通过 APNs 身份验证 key 测试推送通知:

#!/bin/bash

deviceToken=b27371497b85611baf9052b4ccfb9641ab7fea1d01c91732149c99cc3ed9342f

authKey="./APNSAuthKey_ABC1234DEF.p8"
authKeyId=ABC1234DEF
teamId=TEAM123456
bundleId=com.example.myapp
endpoint=https://api.development.push.apple.com

read -r -d '' payload <<-'EOF'
{
"aps": {
"badge": 2,
"category": "mycategory",
"alert": {
"title": "my title",
"subtitle": "my subtitle",
"body": "my body text message"
}
},
"custom": {
"mykey": "myvalue"
}
}
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

注意:我使用此脚本的细微变化在 ma​​cOS 上使用自制版本的curl 和 openssl 进行测试:http://thrysoee.dk/apns/

Apple 现在有关于 Send a Push Notification Using a Token方法的文档。

关于apple-push-notifications - 如何使用 APNs Auth Key 和标准 CLI 工具发送 APNs 推送消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39943701/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com