APNS / GCMのリクエスト制限

  • 110
    いいね
  • 4
    コメント

APNS / GCMのリクエスト制限

APNSとGCMでPush通知を行う際に1回のリクエストで送信出来る端末(リクエストサイズ)数には上限があるのですが、どれぐらいだったかすぐ忘れてしまうので備忘も兼ねて。

APNS

(2015年01月18日追記)
iOS8以降の情報をキャッチアップ出来ておらず、ペイロードデータの上限が誤っていましたので、修正しましたm(__)m

(2016年10月28日追記)
iOS9以降の上限について記載しました。

  • iOS8未満の場合、ペイロードデータの上限は256バイトまで。
  • iOS8の場合、ペイロードデータの上限は2Kバイトまで。
  • iOS9以降の場合、ペイロードデータの上限は4Kバイトまで。
  • 1回の通信で全パケットが5000〜7000バイトを超えるとAPNSから切断される?(非公式)
  • パケットの制限はかなり緩いが、速くリクエストしすぎるとエラーになるので、1リクエストあたり10ミリ〜50ミリ秒程度のインターバルを空けたほうがよい?(非公式)

4番目と5番目の情報は非公式かつ相反するものなので、結局は自分で確かめるしかないと思うのですが、"少なくとも秒間9000メッセージは送信出来る"という記載がAppleの公式ドキュメントにあるそうなので、ひとまず、あまり一度に大容量のメッセージを送信せず、ちょくちょくスリープ処理を入れれば問題ないかと思います。

GCM

  • ペイロードデータの上限は4096バイトまで。
  • マルチキャスト送信の場合は最大1000端末まで。

どちらも公式情報なので、安心です。

どうすればよいのか

上記の制限があるので、マルチOS対応の場合サーバアプリは、Pushメッセージは140文字以内(Pushでそんなに長いメッセージは送らないはず⇒Twitterと同じ文字数だけあれば充分では!という理屈)にして、数千台以上に一気に送りたい場合は、GCMに合わせて1000件ずつに分割、かつ、APNSに配慮して各処理の間で0.1秒くらいインターバル空けて、APNS及びGCMにリクエストすればほぼほぼ大丈夫かなと思いますが、他に良き案があれば教えてください。

※参考サイトにもありますが、PHPer御用達のApnsPHPは、デフォルトで1回送った後に10ミリ秒のスリープ処理を入れるようになっているので、その場合はあまり気にしなくてよいかもしれません。

参考サイト

GCM アーキテクチャの概要:
http://www.techdoctranslator.com/android/guide/google/gcm/gcm
これは罠。PHPでiPhone端末にPUSH通知を送る際の落とし穴:
http://liginc.co.jp/programmer/archives/2355
これは罠。PHPでiPhone端末にPUSH通知を送る際の落とし穴」は(一部)罠:
http://norii.hatenablog.com/entry/2013/10/09/021216
Apple Push Notification Service:
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html

  • この記事は以下の記事からリンクされています
  • AWS料金早見表からリンク