flutter_app_badger icon indicating copy to clipboard operation
flutter_app_badger copied to clipboard

flutter_app_badger cannot update badge on iOS when onBackground

Open raymondk25 opened this issue 1 year ago • 11 comments

I have implemented firebase messaging and I am using this one for notification. My goal is that when receiving a notification sent from firebase in the background or with the app closed, the counter is incremented as the notifications arrive.

My code looks like this :

Future<void> main() async {
  FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
  runApp(child: const MyApp()));
}

@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage remoteMessage) async {
  await Firebase.initializeApp();
  FlutterAppBadger.updateBadgeCount(1);
}

background or terminated not triggering for me no matter what, only foreground can incremented the badge counter.

raymondk25 avatar May 19 '23 03:05 raymondk25

Have you fixed it? can you show me some code for me pls, I have a problem like you. Thanks!

chiennv23 avatar May 25 '23 04:05 chiennv23

@raymondk25 @chiennv23 Did you find a way to fix this problem ?

KM9668 avatar May 29 '23 08:05 KM9668

@KM9668 yes im done, iam using firebase message and push badge in notification json like this: "notification" : { "body" : "Body of Your Notification", "title": "Title of Your Notification", "badge":"22" }, "data" : { "click_action":"FLUTTER_NOTIFICATION_CLICK", "body" : "Body of Your Notification in Data", "title": "Title of Your Notification in Title", "url" : "LOGIN_SCREEN", "key_2" : "Value for key_2" }

IOS automatic update badge on background. hope u do it!

chiennv23 avatar May 29 '23 08:05 chiennv23

@chiennv23 Thanks a lot!

raymondk25 avatar Jun 05 '23 16:06 raymondk25

@KM9668 yes im done, iam using firebase message and push badge in notification json like this: "notification" : { "body" : "Body of Your Notification", "title": "Title of Your Notification", "badge":"22" }, "data" : { "click_action":"FLUTTER_NOTIFICATION_CLICK", "body" : "Body of Your Notification in Data", "title": "Title of Your Notification in Title", "url" : "LOGIN_SCREEN", "key_2" : "Value for key_2" }

IOS automatic update badge on background. hope u do it!

Hey @chiennv23 could you add more explanation on what you do exactly ? 🙂

QPAYRE avatar Jun 26 '23 08:06 QPAYRE

HI @raymondk25 this seems to be an issue with your background handler not firing instead of the library.

Try adding content-available: true for iOS and priority: high for android as a part of your FCM message from your server.

const message: Message = {
            notification: {
                title: "Test notification",
                body: 'test content',
            },
            data: {
               // notification data here
            },
            token: deviceToken,
            android: {
                priority: 'high',
            },
            apns: {
                payload: {
                    aps: {
                        contentAvailable: true,
                    },
                },
            },
        }

rohanddave avatar Aug 16 '23 06:08 rohanddave

@rohanddave I tried to set contentAvailable: true on iOS, but the app was still not updated when the app was closed. Do you have another solution to fix it?

ProFive avatar Sep 07 '23 07:09 ProFive

@ProFive you need to ensure your background handler function is a static or top level function since flutter runs on an Isolate in the background. Additionally, I would check XCode to ensure Background Processing, Background Fetch and Remote Notifications are selected under Background Modes. Also, check if you have Push Notifications enabled in XCode too

rohanddave avatar Sep 07 '23 07:09 rohanddave

Hi @rohanddave

Main.dart @pragma('vm:entry-point') Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async { // If you're going to use other Firebase services in the background, such as Firestore, // make sure you callinitializeAppbefore using other Firebase services. await Firebase.initializeApp(); // print('A background message just showed up : $message'); int count = (SpUtil.getInt(PREF_APP_BADGER, defValue: 0) ?? 0) + 1; // print("A background message PREF_APP_BADGER count:$count"); FlutterAppBadger.updateBadgeCount(count); SpUtil.putInt(PREF_APP_BADGER, count); } Xcode: I checked Background fetch Remote notification Background processing

AppDelegate @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { if #available(iOS 10.0, *) { UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate } GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } }

ProFive avatar Sep 08 '23 00:09 ProFive

Hi @ProFive can you try putting FirebaseMessaging.onBackgroundMessage(handleBackgroundNotification); in your app's initState method where handleBackgroundNotification is a top level function i.e. not nested inside any class

rohanddave avatar Nov 17 '23 19:11 rohanddave

@ProFive Did you manage to solve the issue?

maharramg avatar Jan 14 '24 10:01 maharramg