前書き
ある日、React Native アプリで androidだけ「プッシュ通知をタップした時のデータを取得できない」ことに気付いた。
調査にめっちゃ時間かかった上に、解決策がネットになかった(AIさんも教えてくれなかった)のでここに書く。
環境
- React Native 0.64.x
- react-native-firebase/messaging
- node v16(元々15)
バグの調査内容
messaging()の各種イベントハンドラで、機能するものと機能しないものがある
- OK: onMessage()
- OK: setBackgroundMessageHandler()
- NG: getInitialNotification()
- NG: onNotificationOpenedApp()
OKのものはイベントが機能していて、データも取得可能。
NGのものは、そもそもイベントが発火しない。データも取れない。
iOSで動いていることからソースコードは問題ないはずなのに、androidでだけ動かない。
ライブラリの問題か、バージョンか?と色々試行錯誤した。
ネットによくある解決策
スプラッシュスクリーンが原因では?
⇒ 使ってない
プッシュ通知のデータの問題では?
⇒ 送ったデータには notificationと dataの両方が含まれていて、データ的におかしなところは見当たらなかった
バージョンの問題?
⇒ firebaseなどのバージョンを上げてみたが、変化なし。そもそもよく起きる事象にしてはネット上の情報が少なすぎるので、バージョンの問題じゃないかもしれない。。。
結局、なんだったのか
Android側の設定の問題だった。
以前、別の修正で「Android Manifestの設定を変更して、MainActivityの他に LaunchActivityを作る」「MainActivityの launchModeを standardにする」といった変更をしていたのだが、このせいでバックグラウンドからの復帰時のデータ取得がうまくいってなかった模様。
この変更を元に戻し、launchModeを singleTaskに設定することで、ちゃんとデータが取れるようになった。
最後に
この記事が刺さる人は少ないと思うが、もし役に立つことがあれば良いなと思う。