これは、Google Cloud Messagingの非現実的なハートビート間隔が原因である可能性があります。
GCM は、Android デバイスから Google のサーバーへのアイドル ソケット接続を維持することで機能します。これは、(ポーリングとは対照的に) バッテリー電力をほとんど消費せず、メッセージが到着するとすぐにデバイスを起動できるため、優れています。
接続がアクティブなままであることを確認するために、Android はモバイル接続では 28 分ごと、WiFi では 15 分ごとにハートビートを送信します。ハートビートが失敗した場合、接続は終了しており、GCM は接続を再確立し、保留中のプッシュ通知を取得しようとします。ハートビート間隔が長いほど、バッテリーの消費が少なくなり、デバイスがスリープから復帰する回数が少なくなります。
ただし、これには大きな代償が伴います。ハートビート間隔が長くなるほど、切断されたソケット接続を特定するのに時間がかかります。Google は、GCM をデプロイする前に、実際の状況でこれらの間隔を十分にテストしていません。これらの間隔の問題は、ネットワーク ルーターとモバイル キャリアが原因で発生します。これらは、アイドル状態のソケット接続が数分間非アクティブになると切断されます。
詳細については、私のブログをご覧ください。
http://eladnava.com/google-cloud-messaging-extremely-unreliable/
回避策として、通知速度と信頼性を大幅に向上させる GCM/FCM のドロップイン代替品であるPushy ( https://pushy.me ) を検討してください (完全開示 - 私は Pushy を設立しました)。