运行 即使我的应用程序关闭,dart 代码也会在后台运行
run dart code in the background even when my app is closed
在 flutter 中,我正在使用 adhara_socket_io to open a socket and receive data from my server to push a notification using flutter_local_notifications,它在应用程序 运行ning 时工作,现在我需要在后台创建这个 运行,这样当我的应用程序不在时运行它仍然从我的服务器接收数据并推送通知,无论如何在 flutter 中都可以这样做吗?
void initSocket() async {
final deviceInfo = await Constants.getDeviceDetails();
final String deviceId = deviceInfo[2];
Uuid uuid = Uuid();
print(deviceInfo);
final id = uuid.v5(Uuid.NAMESPACE_URL, deviceId);
print('id ' + id);
SocketIOManager manager = SocketIOManager();
SocketIO socket = await manager.createInstance(
SocketOptions(URI,
enableLogging: false,
transports: [Transports.WEB_SOCKET /*, Transports.POLLING*/]),
);
socket.onConnect((data) {
print("connected...");
print(data);
socket.emit('settings', [
{'device_id': id}
]);
});
socket.onConnectError((_) => print('connect error'));
socket.onConnectTimeout((_) => print('timeout'));
socket.onError((_) => print('error'));
socket.onDisconnect((_) => print('disconnect'));
socket.on('notif', (data) {
print('notif');
_showNotificationWithDefaultSound(data['heading'],data['content']);
});
socket.connect();
}
initNotifications() {
var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = IOSInitializationSettings();
var initializationSettings = InitializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings,onSelectNotification: onSelectNotification);
}
Future onSelectNotification(String payload)async{
print('payload');
}
Future _showNotificationWithDefaultSound(heading,content) async {
var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel description',
importance: Importance.Max, priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(
androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0,
heading,
content,
platformChannelSpecifics,
payload: 'Default_Sound',
);
}
https://medium.com/vrt-digital-studio/flutter-workmanager-81e0cfbd6f6e
希望这会有所帮助,或者你可以使用 fcm https://fireship.io/lessons/flutter-push-notifications-fcm-guide/
不过我是初学者。我不太了解这个..如果这对你没有帮助,我很抱歉。
在 flutter 中,我正在使用 adhara_socket_io to open a socket and receive data from my server to push a notification using flutter_local_notifications,它在应用程序 运行ning 时工作,现在我需要在后台创建这个 运行,这样当我的应用程序不在时运行它仍然从我的服务器接收数据并推送通知,无论如何在 flutter 中都可以这样做吗?
void initSocket() async {
final deviceInfo = await Constants.getDeviceDetails();
final String deviceId = deviceInfo[2];
Uuid uuid = Uuid();
print(deviceInfo);
final id = uuid.v5(Uuid.NAMESPACE_URL, deviceId);
print('id ' + id);
SocketIOManager manager = SocketIOManager();
SocketIO socket = await manager.createInstance(
SocketOptions(URI,
enableLogging: false,
transports: [Transports.WEB_SOCKET /*, Transports.POLLING*/]),
);
socket.onConnect((data) {
print("connected...");
print(data);
socket.emit('settings', [
{'device_id': id}
]);
});
socket.onConnectError((_) => print('connect error'));
socket.onConnectTimeout((_) => print('timeout'));
socket.onError((_) => print('error'));
socket.onDisconnect((_) => print('disconnect'));
socket.on('notif', (data) {
print('notif');
_showNotificationWithDefaultSound(data['heading'],data['content']);
});
socket.connect();
}
initNotifications() {
var initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher');
var initializationSettingsIOS = IOSInitializationSettings();
var initializationSettings = InitializationSettings(initializationSettingsAndroid,initializationSettingsIOS);
flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
flutterLocalNotificationsPlugin.initialize(initializationSettings,onSelectNotification: onSelectNotification);
}
Future onSelectNotification(String payload)async{
print('payload');
}
Future _showNotificationWithDefaultSound(heading,content) async {
var androidPlatformChannelSpecifics = new AndroidNotificationDetails(
'your channel id', 'your channel name', 'your channel description',
importance: Importance.Max, priority: Priority.High);
var iOSPlatformChannelSpecifics = new IOSNotificationDetails();
var platformChannelSpecifics = new NotificationDetails(
androidPlatformChannelSpecifics, iOSPlatformChannelSpecifics);
await flutterLocalNotificationsPlugin.show(
0,
heading,
content,
platformChannelSpecifics,
payload: 'Default_Sound',
);
}
https://medium.com/vrt-digital-studio/flutter-workmanager-81e0cfbd6f6e
希望这会有所帮助,或者你可以使用 fcm https://fireship.io/lessons/flutter-push-notifications-fcm-guide/
不过我是初学者。我不太了解这个..如果这对你没有帮助,我很抱歉。