LoginSignup
108
109

More than 5 years have passed since last update.

APNS / GCMのリクエスト制限

Last updated at Posted at 2015-01-15

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

108
109
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
108
109