这个错误通常表示您正在使用的库或框架不支持HTTP/2,而APNS现在已经迁移到了HTTP/2。您需要确保您正在使用的库或框架支持HTTP/2,或者使用基于HTTP/2的新库。以下是一个解决方法的示例,可以使用基于HTTP/2的curl库来发送APNS通知:
// curl command
curl --http2 -X POST \
--cert /path/to/cert.pem \
--key /path/to/key.pem \
--header "apns-topic: com.your.app.bundle.id" \
--data '{"aps":{"alert":"Hello World!"}}' \
https://api.development.push.apple.com/3/device/device_token
// Using curl library in C
#include
void send_notification(char* device_token, char* payload) {
CURL* curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_DEFAULT);
curl = curl_easy_init();
if(curl) {
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "apns-topic: com.your.app.bundle.id");
curl_easy_setopt(curl, CURLOPT_URL, "https://api.development.push.apple.com/3/device/device_token");
curl_easy_setopt(curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_easy_setopt(curl, CURLOPT_POST, 1L);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, payload);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, strlen(payload));
curl_easy_setopt(curl, CURLOPT_SSLCERT, "/path/to/cert.pem");
curl_easy_setopt(curl, CURLOPT_SSLKEY, "/path/to/key.pem");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
res = curl_easy_perform(curl);
if(res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
}
curl_global_cleanup();
}