7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Android12のFCM対応問題

Posted at

背景

Flutter1.xでアプリを開発しました。

運営でAndroid12を対応しないといけないため、色々苦労しました。

Firebase Clound Messaging(FCM)の対応は一番しんどいでした。

Android12ではServiceに対して、exportしないといけない

export対応

こちらのGoogle先生のドキュメントによると

FCMのServiceはFirebaseMessagingServiceなので、export=falseかと思います。

そして、この後はビルド成功し、特に問題なかった。

リリース審査出す直前、まさかの通知不通のテスト結果出て、exportの影響だなぁと思いきや、他の問題でした。

問題

前提:
FCMの20.0.0を使用しています。

現象:
Android12のセキュリティ対応によって、こんなエラー出ていました。

Targeting S+ (version 10000 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.

しかも、直接crash、やばいですね。

ログを追った結果。

android.app.PendingIntent.checkFlags(PendingIntent.java:375) at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645) at android.app.PendingIntent.getBroadcast(PendingIntent.java:632) at
com.google.firebase.a
com.google.firebase.b
com.google.firebase.FirebaseMessagingService
com.google.firebase.h
com.google.firebase.g

結論:
firebase悪いのだ。
中にPendingIntentする時が、FlagはFLAG_MUTABLEして、onMessageReceivedを呼べなくなっている、ってか、crashしていた。

対応

firebase悪いので、firebaseのバージョンを上がるしかない(下がるのはないでしょ、Android12だぞ、最新だぞ)。

最後はcom.google.firebase:firebase-messaging:21.1.0で安定しました。

firebaseのandroid sdk仕様は近年すごく変更して、まとめにならないですね。

確かに、firebase-coreからfirebase-バラバラになっている。
しかも、バージョンはバラバラのリリースの番号になっています、開発者として管理難しいと思いますが。
みんな様どう思うでしょう。

最後

本文書く目的として、
自分は今日FCMに関して、一個一個試して、結果を探すしかないなので、
時間のロスしないように、共有いたしました。

みんな様のAndroid12対応の道に役に立つ様に祈ります。

7
3
0

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
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?