Date: 2017/3/22 Cate: Android, Objective-C Tags:  

Firebaseのプッシュ通知を使ってみて、今すぐに通知を送るとちゃんとプッシュ通知が届くのですが、受信者のタイムゾーンでプッシュ通知を打つと通知が来ない、ということで結構ハマったのでメモ。

受信者のタイムゾーンで通知の仕組み

今すぐに通知だと送信ボタンを押したタイミングでプッシュ通知を送ってるんだろうな、というのはわかるかと思います。
受信者のタイムゾーンで数時間後にプッシュ通知をセットした場合、最初は「アプリのタイムゾーン情報をサーバーでプッシュのトークンと紐付けて、セットした時間になったらプッシュ通知が送られるのかな」と思っていました。ですが、実際は「送信ボタンを押したタイミングですぐにプッシュ通知を送っておいて、受け取ったアプリ側でタイムゾーンをみて、指定した時間に通知が表示されるようにローカル通知を設定する」という挙動だったようです。
なので

  • 送信ボタンを押したタイミングでアプリがインストールされてないといけない
  • プッシュ通知を受け取った後、アプリ内でローカル通知をキャンセルする処理があると、Firebaseが設定したローカル通知も一緒に消してしまう

ということに気づかず、プッシュ通知が来ないなと結構ハマってしまいました。

また、iOSに関してはBackground ModesのRemote notificationsをオンにしておかないといけない、ということも気づかずかなり時間をとられてしまいました。
仕組みがわかると、バックグラウンドでプッシュ通知を受け取って、指定時間にローカル通知をセットする必要があるからオンにしないとダメなんだなとわかりますが、仕組みを勘違いしていたのでなかなか気づかなかったです。

結論

  • Firebaseのコンソールで送信ボタンを押す前にアプリをインストールしておく
  • アプリ内でローカル通知をキャンセルする処理がある場合、Firebaseのローカル通知も一緒に消してしまわないように注意する
  • iOSはBackground ModesのRemote notificationsをオンにする

で無事、受信者のタイムゾーンでのプッシュ通知を受け取ることができました。

Leave a Reply