You can then call processFirebaseCloudMessagingData function to handle push notifications, as shown below.
When app is running in the foreground, callback is automatically handled by an already registered ChannelListener.
When app is in the background, app is currently not running and may not have a callback already registered. In that case, you can register an anonymous callback to handle events as shown below:
(processFirebaseCloudMessagingData function accepts boolean value for its last parameter forceCallback. You must set forceCallback to true to receive callbacks from FCM, regardless of whether you are already receiving callbacks from the realtime connection.)
classApplicationextendsStatefulWidget {@overrideState<StatefulWidget> createState() =>_Application();}class_ApplicationextendsState<Application> {// It is assumed that all messages contain a data field with the key 'type'Future<void> setupInteractedMessage() async {// Get any messages which caused the application to open from// a terminated state.RemoteMessage? initialMessage =awaitFirebaseMessaging.instance.getInitialMessage();// If the message also contains a data property with a "type" of "chat",// navigate to a chat screenif (initialMessage !=null) {_handleMessage(initialMessage); }// Also handle any interaction when the app is in the background via a// Stream listenerFirebaseMessaging.onMessageOpenedApp.listen(_handleMessage); }void_handleMessage(RemoteMessage message) {if (message.data.containsKey("talkplus")) {// channelId, title, body 정보가 필요한 경우 아래와 같이 사용합니다.// var msg = convert.jsonDecode(message.data['talkplus'])// String channelId = talkplus.getString("channelId");// String messageId = talkplus.getString("messageId"); // available only for message event// String title = talkplus.getString("title");// String body = talkplus.getString("body");awaitTalkPlusAPI.processFirebaseCloudMessagingData(message.data, onetimeListener, forceCallback); } }@overridevoidinitState() { super.initState();// Run code required to handle interacted messages in an async function// as initState() must not be asyncsetupInteractedMessage(); }@overrideWidgetbuild(BuildContext context) {returnText("..."); }}
In order to have complete control of FCM push notification both in foreground and background, you need to receive FCM data type push notification and handle it via onMessageReceived. To enable this feature, you need to make sure the following settings are in place in dashboard:
Enable push notification
Disable push notification for Android (this allows only data type FCM notifications for Android)