programing

Float에서 최신 버전으로 Firebase Messaging을 구성하는 방법은 무엇입니까?

subpage 2023. 6. 18. 16:01
반응형

Float에서 최신 버전으로 Firebase Messaging을 구성하는 방법은 무엇입니까?

Floatter 알림 구성을 위해 Firebase 메시징 구성에 아래 코드를 사용하고 있었지만, 최신 버전의 Firebase 메시징에 통합한 후 오류가 발생합니다.

코드 라인

 messaging.configure(onMessage: (Map<String, dynamic> message){}

DART 분석 오류

error: The method 'configure' isn't defined for the type 'FirebaseMessaging'. 

FirebaseMessaging.configure()가 Firebase 팀에 의해 제거되었습니다. per https://firebase.flutter.dev/docs/migration/#messaging

이유: 의 이전 구현configure()다른 핸들러를 등록하거나 핸들러를 제거하기 위해 여러 번 호출할 경우 의도하지 않은 부작용이 발생합니다.이러한 변경을 통해 개발자가 스트림을 통해 다른 사용자에게 영향을 주지 않고 핸들러를 등록하고 핸들러를 제거하는 것에 대해 보다 명확하게 설명할 수 있습니다.

사용하다FirebaseMessaging.onMessage 메시지를 받는 방법

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      RemoteNotification notification = message.notification;
      AndroidNotification android = message.notification?.android;
    });

사용하다FirebaseMessaging.onMessageOpenedApp을 대신하여onLaunch그리고.onResume핸들러:

FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('A new onMessageOpenedApp event was published!');
      Navigator.pushNamed(context, '/message',
          arguments: MessageArguments(message, true));
    });

아래의 예를 확인해주시기 바랍니다.

https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_messaging/firebase_messaging/example/lib/main.dart

  @override
  void initState() {
    super.initState();
    FirebaseMessaging.instance
        .getInitialMessage()
        .then((RemoteMessage message) {
      if (message != null) {
        Navigator.pushNamed(context, '/message',
            arguments: MessageArguments(message, true));
      }
    });

    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      RemoteNotification notification = message.notification;
      AndroidNotification android = message.notification?.android;

      if (notification != null && android != null) {
        flutterLocalNotificationsPlugin.show(
            notification.hashCode,
            notification.title,
            notification.body,
            NotificationDetails(
              android: AndroidNotificationDetails(
                channel.id,
                channel.name,
                channel.description,
                // TODO add a proper drawable resource to android, for now using
                //      one that already exists in example app.
                icon: 'launch_background',
              ),
            ));
      }
    });

    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('A new onMessageOpenedApp event was published!');
      Navigator.pushNamed(context, '/message',
          arguments: MessageArguments(message, true));
    });
  }

Jitesh의 답변을 기반으로, 내가 구현하기 위해.getInitialMessage앱이 종료될 때 내비게이션이 작동하도록 하는 데 필요합니다(런칭 시 대체).

    // workaround for onLaunch: When the app is completely closed (not in the background) and opened directly from the push notification
    FirebaseMessaging.instance.getInitialMessage().then((RemoteMessage message) {
      print('getInitialMessage data: ${message.data}');
      _serialiseAndNavigate(message);
    });

    // onMessage: When the app is open and it receives a push notification
    FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      print("onMessage data: ${message.data}");
    });

    // replacement for onResume: When the app is in the background and opened directly from the push notification.
    FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('onMessageOpenedApp data: ${message.data}');
      _serialiseAndNavigate(message);
    });

업데이트된 항목:

Firebase Messaging Service는 앱 시작 시 중요합니다.이러한 이유로 다음을 수행해야 합니다.이 함수를 먼저 선언합니다.

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
  debugPrint("Firebase Messaging firebase is initialized");
  await Firebase.initializeApp();
}

그리고 앱의 메인(){}에서 이 함수를 호출합니다.

 FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

그러면 다음 기능을 사용할 수 있습니다.

메시지를 가져오는 FirebaseMessaging.onMessage 메서드

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
      RemoteNotification notification = message.notification;
      AndroidNotification android = message.notification?.android;
    });

FirebaseMessaging.onMessageOpenedApp을 onLaunch 및 onResume 핸들러의 대체품으로 사용합니다.

FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
      print('A new onMessageOpenedApp event was published!');
      Navigator.pushNamed(context, '/message',
          arguments: MessageArguments(message, true));
    });

이벤트 처리:

이벤트 처리는 개발자에게 보다 직관적인 API를 제공하기 위해 수정되었습니다.이제 스트림을 통해 포그라운드 기반 이벤트에 액세스할 수 있습니다.

Flutter 인스턴스가 포그라운드에 있는 동안 수신 FCM 페이로드가 수신되면 [RemoteMessage]를 포함하는 스트림을 반환합니다.

FirebaseMessaging.onMessageOpenedApp 사용자가 FCM을 통해 표시되는 알림을 누를 때 호출되는 [Stream]을 반환합니다.이전 onLaunch 및 resume 핸들러를 대체합니다.

FirebaseMessaging.onBackgroundMessage() 앱이 백그라운드에 있거나 종료될 때 트리거할 백그라운드 메시지 처리기를 설정합니다.IOS 알림 설정:

언급URL : https://stackoverflow.com/questions/65056272/how-to-configure-firebase-messaging-with-latest-version-in-flutter

반응형