将自定义数据从 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
中设置的 key
和 value
在 Flutter 应用程序中向 DISPLAY 推送通知?
我很难完成这项工作,例如,我在 FCM 控制台中使用了 url
作为键和我的值的链接。
我真正想要的是这样的:当我发送推送通知时,它会显示到我的应用程序中的自定义屏幕/url_launcher/widget,并且该屏幕/url_launcher/widget 显示我使用 FCM 控制台输入的数据我在发送推送通知时设置的 KEY 和 VALUE。
问题是如何在我的应用中显示这些数据?我如何使用这些键和值? 我有点迷失了如何编码它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 消息传递方法 swizzling 不起作用
如何在不点击通知的情况下从通知中获取数据(firebase 云消息传递和本机反应)