firebase - Flutter Firebase 消息停用可见通知
问题描述
如何停用 Firebase 消息传递中的可见通知并使用 flutter_local_notifications 包手动处理通知,以便通知不会显示两次?我无法编辑服务器集成端,因为我使用的是 wordpress 插件(https://wordpress.org/plugins/fcm-push-notification-from-wp/)为我发送通知请求。
有效负载如下所示:https ://ps.w.org/fcm-push-notification-from-wp/assets/screenshot-6.png?rev=2446404
String selectedNotificationPayload = "";
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
final BehaviorSubject<String> selectNotificationSubject =
BehaviorSubject<String>();
FirebaseMessaging messaging;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
FlutterLocalNotificationsPlugin();
const AndroidInitializationSettings initializationSettingsAndroid =
AndroidInitializationSettings('share_icon');
final IOSInitializationSettings initializationSettingsIOS =
IOSInitializationSettings(
requestSoundPermission: false,
requestBadgePermission: false,
requestAlertPermission: false,
onDidReceiveLocalNotification:
(int id, String title, String body, String payload) async {});
final InitializationSettings initializationSettings = InitializationSettings(
android: initializationSettingsAndroid,
iOS: initializationSettingsIOS,
);
NotificationAppLaunchDetails notificationAppLaunchDetails =
await flutterLocalNotificationsPlugin.getNotificationAppLaunchDetails();
if (notificationAppLaunchDetails?.didNotificationLaunchApp ?? false) {
selectedNotificationPayload = notificationAppLaunchDetails.payload;
}
await flutterLocalNotificationsPlugin.initialize(initializationSettings,
onSelectNotification: (String payload) async {
if (payload != null) {
selectedNotificationPayload = payload;
selectNotificationSubject.add(payload);
}
});
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(Start());
}
class Start extends StatefulWidget {
@override
_StartState createState() => _StartState();
}
class _StartState extends State<Start>{
void initializeFlutterFire() async {
try {
await Firebase.initializeApp();
print("Firebase - initialzed successfully");
} catch (e) {
print("Firebase - initialzed FAILED");
}
messaging = FirebaseMessaging.instance;
}
void _configureSelectNotificationSubject() async {
selectNotificationSubject.stream.listen((String _url) async {
try {
await Future.delayed(Duration(milliseconds: 500), () async {
await Navigator.of(context).push(new Route(_url, ""));
});
} catch (e) {
print("Fehler beim öffnen der Website");
}
});
}
@override
initState() {
super.initState();
initializeFlutterFire();
}
...
}
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
Map<String, dynamic> data = message.data;
String _title = data['title'];
String _description = data['message'];
sendNotification(_title, _description);
}
解决方案
推荐阅读
- react-native - React Native:在兄弟屏幕之间设置状态/传递数据
- cgal - 具有多点的 CGAL 3D 皮肤表面网格化
- android - 数据绑定构建错误,android-sunflower 示例
- angular - 重定向不起作用的发布应用程序
- css - 如何四个框网格边距不是 4n+4 子 css
- git - 无法从 Visual Studio 2013 推送(在 git bash 中工作),libgit2 Category = Net(错误)
- go - 将通道扇入到单通道
- botframework - context.Wait 迭代时的问题
- ios - 如何通过返回应用程序的链接分享到 Facebook?迅速
- python - 通过pywinrm连接并执行触发视频的PowerShell脚本