簡體   English   中英

APNs Provider API批量請求

[英]APNs Provider API batch request

我即將用PHP重寫我的推送服務以使用新的APNs Provider API。 我的問題是,如果在向多個設備發送一個通知時有任何最佳做法......

我已經找到了使用PHP發送推送通知的解決方案:

$ch = curl_init("https://api.development.push.apple.com/3/device/$device_token");
curl_setopt($ch, CURLOPT_POSTFIELDS, '{"aps":{"alert":"Here I am","sound":"default"}}');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("apns-topic: $apns_topic"));
curl_setopt($ch, CURLOPT_SSLCERT, $pem_file);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pem_secret);
$response = curl_exec($ch);
$httpcode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

但是使用此代碼,我可以將消息發送到一個設備,因為我必須將設備令牌放在URL中。 但我想將消息發送到未知數量的設備。 不幸的是,我找不到用於向多個設備發送消息的端點。


Apple文檔( https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/APNsProviderAPI.html )說明了這一點:

通過多個通知保持與APN的連接; 不要反復打開和關閉連接。 APN將快速連接和斷開視為拒絕服務攻擊。

所以我認為將我的CURL request放入for-loop並循環遍歷所有設備令牌是不好的做法。

有人如何解決這個案子的任何建議?

提前致謝。

不確定卷曲,但一般來說,Apns提供商必須保持與Apns Cloud的持久連接。 無法使用單個消息向多個設備廣播。 Apns提供者應該利用http / 2(每個連接多個流)並且還可以跨多個連接發送消息,但是不能在循環中進行連接和斷開連接,這將被視為DoS攻擊。

避免連接循環,你應該在循環中發布消息,連接/斷開部分不能是循環的一部分。

我希望它有所幫助。

此致,_Ayush

libcurl會盡可能自動嘗試保持連接打開。 要遵循的模式是執行以下操作:

1)創建curl句柄: $ch = curl_init();

2)在手柄上設置適當的選項:

curl_setopt($ch, CURLOPT_POSTFIELDS, '{"aps":{"alert":"Here I am","sound":"default"}}');
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2_0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("apns-topic: $apns_topic"));
curl_setopt($ch, CURLOPT_SSLCERT, $pem_file);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $pem_secret);

3)開始for循環,為每個收件人設置url並執行請求:

for ($tokens as $token) { //Iterate push tokens

    $url = "https://api.development.push.apple.com/3/device/{$token}";

    curl_setopt($ch, CURLOPT_URL, $url);

    $result = curl_exec($ch);

    // Check result, handle errors etc...

   }

   curl_close($ch); // Close connection outside the loop

按照上述方法,應保持連接打開並符合Apple的要求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM