[英]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.