From e6504acdea4ad7e89f1140190b9d737271d4ab78 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Mon, 27 Jul 2026 01:20:52 +0300 Subject: [PATCH] =?UTF-8?q?=D8=A5=D8=B1=D8=B3=D8=A7=D9=84=20platform=20?= =?UTF-8?q?=D9=81=D9=8A=20=D9=85=D8=B5=D8=A7=D9=81=D8=AD=D8=A9=20=D8=B3?= =?UTF-8?q?=D9=88=D9=83=D9=8A=D8=AA=20=D8=A7=D9=84=D8=B3=D8=A7=D8=A6=D9=82?= =?UTF-8?q?=20=E2=80=94=20=D9=83=D8=A8=D8=A7=D8=AA=D9=86=20iOS=20=D9=83?= =?UTF-8?q?=D8=A7=D9=86=D9=88=D8=A7=20=D9=8A=D9=81=D9=88=D8=AA=D9=87=D9=85?= =?UTF-8?q?=20=D8=A7=D9=84=D8=B7=D9=84=D8=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit driver_socket.php عند توزيع الطلب (dispatch_order) يرسل إشعار FCM احتياطياً **فقط** إذا كانت المنصّة ios، لأن iOS يخنق أحداث السوكيت في الخلفية: $platform = $connectedDrivers[$driverId]['platform'] ?? 'android'; if ($platform === 'ios' && !empty($token)) { sendFCM_Async(...) } وتطبيق السائق لم يكن يرسل platform في الـ query إطلاقاً، فالافتراضي 'android' — أي أن كابتن الآيفون لا يستلم الإشعار الاحتياطي ويفوته الطلب وهو في الخلفية، ويعتمد على السوكيت وحده وهو مخنوق أصلاً. ظهر بالعين في لوج الإنتاج على جهاز آيفون: ✅ Driver Connected: #243ea897954387c9 (android) أُضيف الحقل في موضعي الاتصال: location_controller و background_service. Co-Authored-By: Claude Opus 5 --- .../lib/controller/functions/background_service.dart | 3 +++ .../lib/controller/functions/location_controller.dart | 11 ++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/siro_driver/lib/controller/functions/background_service.dart b/siro_driver/lib/controller/functions/background_service.dart index 513dd44f..47417ce3 100644 --- a/siro_driver/lib/controller/functions/background_service.dart +++ b/siro_driver/lib/controller/functions/background_service.dart @@ -40,6 +40,9 @@ Future onStart(ServiceInstance service) async { .setQuery({ 'driver_id': driverId, 'token': token, + // ‏نفس سبب location_controller: بلا platform يعتبره السيرفر + // ‏أندرويد فلا يرسل إشعار FCM الاحتياطي لكباتن الآيفون. + 'platform': Platform.isIOS ? 'ios' : 'android', 'EIO': '3', // توافقية مع Workerman }) .setReconnectionAttempts(double.infinity) diff --git a/siro_driver/lib/controller/functions/location_controller.dart b/siro_driver/lib/controller/functions/location_controller.dart index f060630b..612f394f 100755 --- a/siro_driver/lib/controller/functions/location_controller.dart +++ b/siro_driver/lib/controller/functions/location_controller.dart @@ -234,7 +234,16 @@ class LocationController extends GetxController with WidgetsBindingObserver { AppLink.locationSocketUrl, IO.OptionBuilder() .setTransports(['websocket']) - .setQuery({'driver_id': driverId, 'token': token, 'EIO': '3'}) + // ‏إرسال platform إجباري: driver_socket.php يرسل إشعار FCM + // ‏احتياطياً عند توزيع الطلب **فقط** إذا كانت المنصّة ios، لأن iOS + // ‏يخنق أحداث السوكيت في الخلفية. وبلا هذا الحقل يصير الافتراضي + // ‏'android' فيفوت كابتن الآيفون الطلب وهو في الخلفية. + .setQuery({ + 'driver_id': driverId, + 'token': token, + 'platform': Platform.isIOS ? 'ios' : 'android', + 'EIO': '3', + }) .enableForceNew() .build());