h5x*_*xde 7 notifications android rabbitmq flutter
在应用程序中,我使用rabbitmq、background_fetch和flutter_local_notifications。\n当应用程序启动或最小化时,一切正常,但是当它关闭时,我无法在后台运行我的应用程序,我找不到任何关于此的信息,所有其他问题仅针对FCM,没有更多关于 flutter 和 amqp 的信息,我是这个框架的新手
\n主程序.dart
\nFuture<void> backgroundFetchHeadlessTask(String taskId) async {\n\n await Rabbitmq.getDelivery();\n\n BackgroundFetch.finish(taskId);\n}\n\nfinal FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();\n\n// Streams are created so that app can respond to notification-related events since the plugin is initialised in the `main` function\nfinal BehaviorSubject<ReceivedNotification> didReceiveLocalNotificationSubject = BehaviorSubject<ReceivedNotification>();\n\nfinal BehaviorSubject<String> selectNotificationSubject = BehaviorSubject<String>();\n\nNotificationAppLaunchDetails notificationAppLaunchDetails;\n\nvoid main() async {\n\n runApp(MyApp());\n\n await initPlatformState();\n \n}\n\nFuture<void> initPlatformState() async {\n \n BackgroundFetch.configure(BackgroundFetchConfig(\n startOnBoot: true,\n minimumFetchInterval: 15,\n stopOnTerminate: false,\n enableHeadless: true,\n requiresBatteryNotLow: false,\n requiresCharging: false,\n requiresStorageNotLow: false,\n requiresDeviceIdle: false,\n requiredNetworkType: NetworkType.ANY\n ), (String taskId) async {\n await backgroundFetchHeadlessTask(taskId);\n } \n );\n }\n\nclass MyApp extends StatefulWidget {\n @override\n _MyAppState createState() => _MyAppState();\n}\n\nclass _MyAppState extends State<MyApp> {\n\n @override\n void initState() {\n super.initState();\n _requestIOSPermissions();\n _configureDidReceiveLocalNotificationSubject();\n _configureSelectNotificationSubject();\n\n BackgroundFetch.registerHeadlessTask(backgroundFetchHeadlessTask);\n \n }\n\n void _requestIOSPermissions() {\n flutterLocalNotificationsPlugin\n .resolvePlatformSpecificImplementation<\n IOSFlutterLocalNotificationsPlugin>()\n ?.requestPermissions(\n alert: true,\n badge: true,\n sound: true,\n );\n }\n\n void _configureDidReceiveLocalNotificationSubject() {\n didReceiveLocalNotificationSubject.stream\n .listen((ReceivedNotification receivedNotification) async {\n await showDialog(\n context: context,\n builder: (BuildContext context) => CupertinoAlertDialog(\n title: receivedNotification.title != null\n ? Text(receivedNotification.title)\n : null,\n content: receivedNotification.body != null\n ? Text(receivedNotification.body)\n : null,\n actions: [\n CupertinoDialogAction(\n isDefaultAction: true,\n child: Text('Ok'),\n onPressed: () async {\n Navigator.of(context, rootNavigator: true).pop();\n await Navigator.push(\n context,\n MaterialPageRoute(\n builder: (context) =>\n LandingPage(selectedPage: 3),\n //SecondScreen(receivedNotification.payload),\n ),\n );\n },\n )\n ],\n ),\n );\n });\n }\n\n void _configureSelectNotificationSubject() {\n selectNotificationSubject.stream.listen((String payload) async {\n await Navigator.push(\n context,\n MaterialPageRoute(builder: (context) => LandingPage(selectedPage: 3)),//SecondScreen(payload)),\n );\n });\n }\n\n @override\n void dispose() {\n didReceiveLocalNotificationSubject.close();\n selectNotificationSubject.close();\n super.dispose();\n }\n\n @override\n Widget build(BuildContext context) {\n return MaterialApp(\n debugShowCheckedModeBanner: false,\n title: 'My first app',\n theme: ThemeData(\n primarySwatch: Colors.blue,\n visualDensity: VisualDensity.adaptivePlatformDensity,\n ),\n home: LandingPage(),\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n在rabbitmq.dart里面
\nclass Rabbitmq {\n\n static Future getDelivery() async\n {\n var auth = await DBProvider.db.getAuth();\n\n print(hash);\n\n Client client = new Client(\n settings: ConnectionSettings(\n host: 'myhost',\n authProvider: AmqPlainAuthenticator('user', 'password')\n )\n );\n\n client\n .channel()\n .then((Channel channel) => channel.queue("queue", durable: true))\n .then((Queue queue) => queue.consume())\n .then((Consumer consumer) => consumer.listen((AmqpMessage message) async {\n\n Map messageBody = message.payloadAsJson;\n\n if(messageBody.containsKey('message') == true && messageBody.containsKey('from') == true)\n {\n await Rabbitmq()._showNotification(messageBody['message'], messageBody['from']);\n }\n\n })\n );\n }\n\n Future<void> _showNotification(String text, String from) async {\n\n var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');\n var initializationSettingsIOS = new IOSInitializationSettings();\n var initializationSettings = new InitializationSettings(initializationSettingsAndroid, initializationSettingsIOS);\n\n FlutterLocalNotificationsPlugin().initialize(initializationSettings);\n \n final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();\n\n var androidPlatformChannelSpecifics = AndroidNotificationDetails(\n 'com.example.g2r_market/chat', '\xd0\xa3\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbc\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd1\x8f \xd1\x87\xd0\xb0\xd1\x82\xd0\xb0', '\xd0\x9d\xd0\xb0\xd1\x81\xd1\x82\xd1\x80\xd0\xbe\xd0\xb9\xd0\xba\xd0\xb0 \xd1\x83\xd0\xb2\xd0\xb5\xd0\xb4\xd0\xbe\xd0\xbc\xd0\xbb\xd0\xb5\xd0\xbd\xd0\xb8\xd0\xb9 \xd0\xb4\xd0\xbb\xd1\x8f \xd1\x87\xd0\xb0\xd1\x82\xd0\xbe\xd0\xb2',\n importance: Importance.Max, priority: Priority.High, ticker: 'ticker'\n );\n\n var iOSPlatformChannelSpecifics = IOSNotificationDetails();\n\n var platformChannelSpecifics = NotificationDetails(androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);\n\n await flutterLocalNotificationsPlugin.show( \n 0, from, text, platformChannelSpecifics,\n payload: 'item x');\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2370 次 |
| 最近记录: |