Skip to content
This repository has been archived by the owner on Jul 11, 2024. It is now read-only.

flutter_app_badger cannot update badge on iOS when onBackground #76

Open
raymondk25 opened this issue May 19, 2023 · 11 comments
Open

flutter_app_badger cannot update badge on iOS when onBackground #76

raymondk25 opened this issue May 19, 2023 · 11 comments

Comments

@raymondk25
Copy link

raymondk25 commented May 19, 2023

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.

@chiennv23
Copy link

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

@KM9668
Copy link

KM9668 commented May 29, 2023

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

@chiennv23
Copy link

@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!

@raymondk25
Copy link
Author

@chiennv23 Thanks a lot!

@QPAYRE
Copy link

QPAYRE commented Jun 26, 2023

@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 ? 🙂

@rohanddave
Copy link

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,
                    },
                },
            },
        }

@ProFive
Copy link

ProFive commented Sep 7, 2023

@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?

@rohanddave
Copy link

@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

@ProFive
Copy link

ProFive commented Sep 8, 2023

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) } }

@rohanddave
Copy link

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

@maharramg
Copy link

@ProFive Did you manage to solve the issue?

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants