将自定义数据从 Firebase 云消息传递控制台显示到 Flutter 应用程序?

Posted

技术标签:

【中文标题】将自定义数据从 Firebase 云消息传递控制台显示到 Flutter 应用程序?【英文标题】:Display Custom Data from Firebase Cloud Messaging console to Flutter app? 【发布时间】:2020-04-23 19:19:33 【问题描述】:

您好,有什么方法可以使用我在 Firebase 云消息传递控制台 Additional Options 中设置的 keyvalue 在 Flutter 应用程序中向 DISPLAY 推送通知?

我很难完成这项工作,例如,我在 FCM 控制台中使用了 url 作为键和我的值的链接。

我真正想要的是这样的:当我发送推送通知时,它会显示到我的应用程序中的自定义屏幕/url_launcher/widget,并且该屏幕/url_launcher/widget 显示我使用 FCM 控制台输入的数据我在发送推送通知时设置的 KEYVALUE

问题是如何在我的应用中显示这些数据?我如何使用这些键和值? 我有点迷失了如何编码它tbh

下面是我的代码:

import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'package:url_launcher/url_launcher.dart';

class HomePage extends StatefulWidget 
  HomePage(Key key) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();


class _HomePageState extends State<HomePage> 

  final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();


@override
void initState() 
  super.initState();
  firebaseCloudMessagingListeners();

void firebaseCloudMessagingListeners() 
  if (Platform.isios) iOSPermission();

  _firebaseMessaging.getToken().then((token)
    print(token);
  );

  _firebaseMessaging.configure(
    onMessage: (Map<String, dynamic> message) async 
      print('on message $message');

    ,
    onResume: (Map<String, dynamic> message) async 
      print('on resume $message');
    ,
    onLaunch: (Map<String, dynamic> message) async 
      print('on launch $message');
    ,
  );


void iOSPermission() 
  _firebaseMessaging.requestNotificationPermissions(
      IosNotificationSettings(sound: true, badge: true, alert: true)
  );
  _firebaseMessaging.onIosSettingsRegistered
      .listen((IosNotificationSettings settings)
  
    print("Settings registered: $settings");
  );




  WebViewController _myController;
      final Completer<WebViewController> _controller =
      Completer<WebViewController>();
  @override
  Widget build(BuildContext context) 
    return SafeArea(
            child: Scaffold(
                  body: WebView(
                  initialUrl: 'https://syncshop.online/en/',
                  javascriptMode: JavascriptMode.unrestricted,
                  onWebViewCreated: (controller) 
                  _controller.complete(controller);
                ,
          onPageFinished: (controller) async 
          (await _controller.future).evaluateJavascript("document.getElementsByClassName('footer-container')[0].style.display='none';");
            (await _controller.future).evaluateJavascript("document.getElementById('st_notification_1').style.display='none';");
            (await _controller.future).evaluateJavascript("document.getElementById('sidebar_box').style.display='none';");
          ,
          ),
    floatingActionButton: FutureBuilder<WebViewController>(
        future: _controller.future,
        builder: (BuildContext context, AsyncSnapshot<WebViewController> controller) 
          if (controller.hasData) 
            return FloatingActionButton(
            onPressed: () 
              controller.data.reload();
            ,
            child: Icon(Icons.refresh),
          );
          
          return Container();
        
        ),
          ),
      );
    

【问题讨论】:

【参考方案1】:

这就是您应该从控制台发送自定义数据的方式,

你可以收到这样的通知,

   _firebaseMessaging.configure(
      onMessage: (Map<String, dynamic> message) async 
        print("$message");

输出

通知:标题:rrakkk,正文:wer,数据:url:***

如何从上面获取url 值?

 print("$message['data']['url']");

输出

堆栈溢出

【讨论】:

您好,请问fcmConfigure 是从哪里得到的? 在用户点击通知后,有没有办法将此自定义数据显示到小部件? 这只是一个打印标签,你可以随便拿,实际值为$message 好的,谢谢。但是用户点击通知后是否无法在小部件中显示这些数据? 有可能!要显示通知使用flutter_local_notifications,然后您可以使用onSelectNotification

以上是关于将自定义数据从 Firebase 云消息传递控制台显示到 Flutter 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Kotlin 的 Firebase 云消息传递 Android

设备未收到Firebase云消息传递通知

Firebase 消息传递方法 swizzling 不起作用

如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)

在哪里可以找到 Firebase 云消息传递的 API KEY?

设备未收到 Firebase 云消息通知