gpt4 book ai didi

apple-push-notifications - 我必须使用 HTTP/2.0 发送 Apple 推送通知吗?我可以使用 libcurl 吗?

转载 作者:行者123 更新时间:2023-12-04 06:34:12 25 4
gpt4 key购买 nike

正如您可能从标题中推断出的那样,这个问题实际上是两个问题合二为一。

第一个问题:我必须使用 HTTP/2.0 发送 Apple 推送通知吗?

APNs Provider API documentation由 Apple 提供,开头段落指定:

The provider API is based on the HTTP/2 network protocol.



在整个文档中还有其他几个对 HTTP/2.0 的引用。但是我没有看到(这并不是说它不存在)任何指定 HTTP/2.0 必须使用。这是否意味着我可以使用任何 HTTP 版本?还是我实际上受限于 HTTP/2.0?

我对 HTTP/1.1 非常熟悉,但对 HTTP/2.0 几乎一无所知,因此,如果我能够使用我熟悉的旧协议(protocol),我会更喜欢那个。

第二个问题(基于第一个问题):我可以将 libcurl 与 APN 一起使用吗?

这个问题只有在第一个问题得到肯定回答的情况下才有意义。如果我必须使用带有 APN 的 HTTP/2.0 不是真的,那么我已经知道我可以使用 libcurl。

我将从已经很忙的服务器发送许多 APN,我更愿意在本地进行 - 因此我计划尽可能使用 libcurl。但是我知道 libcurl 在 HTTP/2.0 方面有些限制。

主要问题是,当 libcurl 建立 HTTP/2.0 连接时,它实际上以包含 upgrade 的 HTTP/1.1 请求开始。 header ,然后等待 101 Switching Protocols状态行。 APN 是否支持此行为?或者我必须尝试使用​​ nghttp2 之类的东西吗? ?

我发现 nghttp2 有点复杂,目前文档记录也很差。我担心如果我不能使用 libcurl,我最终可能不得不使用套接字自己实现 HTTP/2.0(这将是最糟糕的)。

对于任何一个问题,我们都非常感谢您的帮助!谢谢大家!

最佳答案

使用 curl 发送 http2 推送消息的示例脚本。假设您拥有来自开发站点的身份验证 key ,并且您的 curl 版本是使用 http2 支持编译的。 p8 file应该在脚本的同一个文件夹中说apns.sh文件。运行> bash apns.sh

#!/bin/bash

deviceToken=96951ABACECA47F34C2F93D8E58591054E6F2B42691B4EADA6935C19A107A524

authKey="./AuthKey_SLDFJSDLB.p8"
authKeyId=SLDFJSDLB
teamId=ABCDET
bundleId=com.mycompany.myapp
endpoint=https://api.development.push.apple.com
apns_collapse_id="score_update"

read -r -d '' payload <<-'EOF'
{
"aps": {
"badge": 2,
"category": "mycategory",
"alert": {
"title": "my title",
"subtitle": "my subtitle",
"body": "my body text message 103"
}
},
"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" \
--header "apns-collapse-id: $apns_collapse_id"\
--http2 \
--data "$payload" \
$endpoint/3/device/$deviceToken

关于apple-push-notifications - 我必须使用 HTTP/2.0 发送 Apple 推送通知吗?我可以使用 libcurl 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34445709/

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