From fe33bb2db0c09ca7f035c9d331d1b3adb8c30cfe Mon Sep 17 00:00:00 2001 From: b3ni15 Date: Fri, 6 Mar 2026 11:14:07 +0100 Subject: [PATCH] Enhance Live Activity dismissal handling by passing deviceId and updating server unregistration logic --- refilc/ios/Runner/AppDelegate.swift | 5 ++++- refilc/ios/livecard/LiveActivityManager.swift | 2 ++ refilc/lib/api/providers/live_card_provider.dart | 4 ++-- .../api/providers/liveactivity/platform_channel.dart | 8 +++++--- .../providers/liveactivity/server_sync_provider.dart | 10 ++++++++-- 5 files changed, 21 insertions(+), 8 deletions(-) diff --git a/refilc/ios/Runner/AppDelegate.swift b/refilc/ios/Runner/AppDelegate.swift index e4b62cd3..5f4a9067 100644 --- a/refilc/ios/Runner/AppDelegate.swift +++ b/refilc/ios/Runner/AppDelegate.swift @@ -38,7 +38,10 @@ import Security object: nil, queue: .main ) { [weak self] _ in - self?.methodChannel?.invokeMethod("liveActivityDismissed", arguments: nil) + let deviceId = self?.getOrCreateDeviceId() ?? "" + self?.methodChannel?.invokeMethod("liveActivityDismissed", arguments: [ + "deviceId": deviceId, + ]) } // Token rotation figyelése: ha az APNs új tokent ad, értesítjük Flutter-t diff --git a/refilc/ios/livecard/LiveActivityManager.swift b/refilc/ios/livecard/LiveActivityManager.swift index eed6d8e1..0cd0f463 100644 --- a/refilc/ios/livecard/LiveActivityManager.swift +++ b/refilc/ios/livecard/LiveActivityManager.swift @@ -95,6 +95,8 @@ final class LiveActivityManager { name: NSNotification.Name("LiveActivityDismissed"), object: nil ) + // Activity formálisan is leállítjuk ha még fut + await activity.end(nil, dismissalPolicy: .immediate) break } } diff --git a/refilc/lib/api/providers/live_card_provider.dart b/refilc/lib/api/providers/live_card_provider.dart index 3fee8ffc..d53bdebc 100644 --- a/refilc/lib/api/providers/live_card_provider.dart +++ b/refilc/lib/api/providers/live_card_provider.dart @@ -73,9 +73,9 @@ class LiveCardProvider extends ChangeNotifier { }; // Ha a user dismiss-eli a Live Activity-t (swipe), értesítjük a szervert - PlatformChannel.onActivityDismissed = () { + PlatformChannel.onActivityDismissed = (deviceId) { debugPrint("Live Activity dismissed - unregistering from server"); - serverSync.unregister(); + serverSync.forceUnregister(deviceId); hasActivityStarted = false; hasUserDismissed = true; }; diff --git a/refilc/lib/api/providers/liveactivity/platform_channel.dart b/refilc/lib/api/providers/liveactivity/platform_channel.dart index 78f8545f..04b85773 100644 --- a/refilc/lib/api/providers/liveactivity/platform_channel.dart +++ b/refilc/lib/api/providers/liveactivity/platform_channel.dart @@ -10,7 +10,7 @@ class PlatformChannel { static void Function(String pushToken, String deviceId, String bundleId)? onTokenUpdated; /// Callback ha a user dismiss-eli a Live Activity-t (swipe left). - static void Function()? onActivityDismissed; + static void Function(String deviceId)? onActivityDismissed; static void _setupMethodCallListener() { _channel.setMethodCallHandler((call) async { @@ -24,8 +24,10 @@ class PlatformChannel { ); } } else if (call.method == 'liveActivityDismissed') { - debugPrint("Live Activity dismissed by user"); - onActivityDismissed?.call(); + final args = call.arguments as Map?; + final deviceId = args?['deviceId'] as String? ?? ''; + debugPrint("Live Activity dismissed by user (device: $deviceId)"); + onActivityDismissed?.call(deviceId); } }); } diff --git a/refilc/lib/api/providers/liveactivity/server_sync_provider.dart b/refilc/lib/api/providers/liveactivity/server_sync_provider.dart index f5e616c6..bccaa42c 100644 --- a/refilc/lib/api/providers/liveactivity/server_sync_provider.dart +++ b/refilc/lib/api/providers/liveactivity/server_sync_provider.dart @@ -119,20 +119,26 @@ class ServerSyncProvider { Future unregister() async { if (_deviceId == null) return; + await forceUnregister(_deviceId!); + } + + /// Unregister egy adott deviceId-vel, akkor is ha a _deviceId nincs beállítva (pl. app restart után). + Future forceUnregister(String deviceId) async { try { final response = await http.post( Uri.parse('$_baseUrl/unregister'), headers: {'Content-Type': 'application/json'}, - body: jsonEncode({'device_id': _deviceId}), + body: jsonEncode({'device_id': deviceId}), ).timeout(const Duration(seconds: 10)); if (response.statusCode == 200) { - debugPrint('ServerSync: schedule törölve (unregister)'); + debugPrint('ServerSync: device + schedule törölve (unregister)'); } else { debugPrint('ServerSync unregister hiba: ${response.statusCode}'); } } catch (e) { debugPrint('ServerSync unregister kivétel: $e'); } + _deviceId = null; } List _filterLessons(List lessons) {