如何解决我无法使用RabbitMQ进行后台服务
在应用程序中,我使用Rabbitmq,background_fetch和flutter_local_notifications。 当启动或最小化应用程序时,一切正常,但是关闭时,我无法在后台运行我的应用程序,找不到任何信息,仅针对FCM的所有其他问题,没有关于amqp抖动的更多信息,我是该框架中的新蜜蜂
main.dart
Future<void> backgroundFetchHeadlessTask(String taskId) async {
await Rabbitmq.getDelivery();
BackgroundFetch.finish(taskId);
}
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
// Streams are created so that app can respond to notification-related events since the plugin is initialised in the `main` function
final BehaviorSubject<ReceivedNotification> didReceiveLocalNotificationSubject = BehaviorSubject<ReceivedNotification>();
final BehaviorSubject<String> selectNotificationSubject = BehaviorSubject<String>();
NotificationAppLaunchDetails notificationAppLaunchDetails;
void main() async {
runApp(MyApp());
await initPlatformState();
}
Future<void> initPlatformState() async {
BackgroundFetch.configure(BackgroundFetchConfig(
startOnBoot: true,minimumFetchInterval: 15,stopOnTerminate: false,enableHeadless: true,requiresBatteryNotLow: false,requiresCharging: false,requiresStorageNotLow: false,requiresDeviceIdle: false,requiredNetworkType: NetworkType.ANY
),(String taskId) async {
await backgroundFetchHeadlessTask(taskId);
}
);
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
_requestIOSPermissions();
_configureDidReceiveLocalNotificationSubject();
_configureSelectNotificationSubject();
BackgroundFetch.registerHeadlessTask(backgroundFetchHeadlessTask);
}
void _requestIOSPermissions() {
flutterLocalNotificationsPlugin
.resolvePlatformSpecificImplementation<
IOSFlutterLocalNotificationsPlugin>()
?.requestPermissions(
alert: true,badge: true,sound: true,);
}
void _configureDidReceiveLocalNotificationSubject() {
didReceiveLocalNotificationSubject.stream
.listen((ReceivedNotification receivedNotification) async {
await showDialog(
context: context,builder: (BuildContext context) => CupertinoAlertDialog(
title: receivedNotification.title != null
? Text(receivedNotification.title)
: null,content: receivedNotification.body != null
? Text(receivedNotification.body)
: null,actions: [
CupertinoDialogAction(
isDefaultAction: true,child: Text('Ok'),onPressed: () async {
Navigator.of(context,rootNavigator: true).pop();
await Navigator.push(
context,MaterialPageRoute(
builder: (context) =>
LandingPage(selectedPage: 3),//SecondScreen(receivedNotification.payload),),);
},)
],);
});
}
void _configureSelectNotificationSubject() {
selectNotificationSubject.stream.listen((String payload) async {
await Navigator.push(
context,MaterialPageRoute(builder: (context) => LandingPage(selectedPage: 3)),//SecondScreen(payload)),);
});
}
@override
void dispose() {
didReceiveLocalNotificationSubject.close();
selectNotificationSubject.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,title: 'My first app',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,home: LandingPage(),);
}
}
在rabbitmq.dart内
class Rabbitmq {
static Future getDelivery() async
{
var auth = await DBProvider.db.getAuth();
print(hash);
Client client = new Client(
settings: ConnectionSettings(
host: 'myhost',authProvider: AmqPlainAuthenticator('user','password')
)
);
client
.channel()
.then((Channel channel) => channel.queue("queue",durable: true))
.then((Queue queue) => queue.consume())
.then((Consumer consumer) => consumer.listen((AmqpMessage message) async {
Map messageBody = message.payloadAsJson;
if(messageBody.containsKey('message') == true && messageBody.containsKey('from') == true)
{
await Rabbitmq()._showNotification(messageBody['message'],messageBody['from']);
}
})
);
}
Future<void> _showNotification(String text,String from) async {
var initializationSettingsAndroid = new AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = new IOSInitializationSettings();
var initializationSettings = new InitializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
FlutterLocalNotificationsPlugin().initialize(initializationSettings);
final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
var androidPlatformChannelSpecifics = AndroidNotificationDetails(
'com.example.g2r_market/chat','Уведомления чата','Настройка уведомлений для чатов',importance: Importance.Max,priority: Priority.High,ticker: 'ticker'
);
var iOSPlatformChannelSpecifics = IOSNotificationDetails();
var platformChannelSpecifics = NotificationDetails(androidPlatformChannelSpecifics,iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0,from,text,platformChannelSpecifics,payload: 'item x');
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。