Firebase onMessageOpenedApp不工作

jhiyze9q  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(128)

我有两个问题:
1-我一直在尝试将推送通知与我的Flutter Web项目集成,onMessage工作正常,但onMessageOpenedApp方法没有被触发,getInitialMessage()也没有。它在android上运行良好,但在web上不行。
2-调用message.getToken('vapidKey:')就足够了吗?
my main.dart:

Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
launch(message.data['url']);
await Firebase.initializeApp();
}

void main() async {
WidgetsFlutterBinding.ensureInitialized();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
_setupLogging();

await EasyLocalization.ensureInitialized();
await Firebase.initializeApp();
await SharedPreferences.getInstance();
runApp(
  EasyLocalization(
      supportedLocales: [Locale('en')],
      path: 'assets/translations',
      assetLoader: CodegenLoader(),
      fallbackLocale: Locale('en'),
      child: MyApp()),
);
await SharedPreferencesManager.instance.initialize();
FirebaseMessaging messaging = FirebaseMessaging.instance;
await messaging.requestPermission(
  alert: true,
  announcement: false,
  badge: true,
  carPlay: false,
  criticalAlert: false,
  provisional: false,
  sound: true,
);

await messaging.getToken(
    vapidKey:
        'my key');
}

我的主页:

class _HomePageState extends State<HomePage> {
  Future setupInteractedMessage() async {
    await FirebaseMessaging.instance
        .getInitialMessage()
        .then((RemoteMessage? message) {
      if (message != null) {
        _handleMessage(message);
      }
    });

    FirebaseMessaging.onMessage.listen((message) {
      showDialog(
          context: context,
          builder: (_) {
            return GestureDetector(
              onTap: () {
                Navigator.of(context).pop();
                _handleMessage(message);
              },
              child: AlertDialog(
                title: Text(message.notification!.title!),
                content: SingleChildScrollView(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: [Text(message.notification!.body!)],
                  ),
                ),
              ),
            );
          });
    });
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'NewOrder') {
      AutoRouter.of(context).pushNamed('/order_list');
    }
    if (message.data['type'] == 'UpdateOrder') {
      AutoRouter.of(context).pushNamed('/order_details/${message.data['id']}');
    }
    if (message.data['type'] == 'NewOrderTab') {
      AutoRouter.of(context).pushNamed('/table_order/${message.data['id']}');
    }
    if (message.data['type'] == 'UpdateOrderTab') {
      AutoRouter.of(context).pushNamed('/table_order/${message.data['id']}');
    }
    if (message.data['type'] == 'NewTable') {
      AutoRouter.of(context).pushNamed('/table_list');
    }
    if (message.data['type'] == 'UpdateTable') {
      AutoRouter.of(context).pushNamed('/table_list');
    }
  }

  @override
  void initState() {
    if (!RestaurantBloc.instance.branch!.hasValue) {
      RestaurantBloc.instance.getBranch(id: widget.id);
    }
    SignalRService signalRService = SignalRService();
    signalRService.init();
    setupInteractedMessage();

    super.initState();
  }
nue99wik

nue99wik1#

我认为解决这个问题的方法是这样返回token:

await messaging.getToken(
    vapidKey:
        'my key').then((value) => value);
}

相关问题