diff --git a/backend/ride/invitor/claim.php b/backend/ride/invitor/claim.php index 1d4fd0b..bf5978e 100644 --- a/backend/ride/invitor/claim.php +++ b/backend/ride/invitor/claim.php @@ -37,18 +37,18 @@ try { if (!empty($driverId)) { // Driver Invitation Reward Logic - $stmt = $con->prepare("SELECT * FROM invit_driver WHERE id = :invite_id AND driverId = :driver_id AND isGiftToken = 0 FOR UPDATE"); + $stmt = $con->prepare("SELECT * FROM invites WHERE id = :invite_id AND driverId = :driver_id AND isGiftToken = 0 FOR UPDATE"); $stmt->execute([':invite_id' => $inviteId, ':driver_id' => $driverId]); $invitation = $stmt->fetch(PDO::FETCH_ASSOC); if ($invitation) { - $upd = $con->prepare("UPDATE invit_driver SET isGiftToken = 1 WHERE id = :invite_id"); + $upd = $con->prepare("UPDATE invites SET isGiftToken = 1 WHERE id = :invite_id"); $upd->execute([':invite_id' => $inviteId]); // Reward for current driver addWalletBalance($walletUrl, $driverId, "driver", $rewardAmount); // Reward for inviter - addWalletBalance($walletUrl, $invitation['driverInviterId'], "driver", $rewardAmount); + addWalletBalance($walletUrl, $invitation['driverId'], "driver", $rewardAmount); $con->commit(); echo json_encode(["status" => "success", "message" => "Reward of $rewardAmount $currency claimed successfully."]); @@ -59,12 +59,12 @@ try { } elseif (!empty($passengerId)) { // Passenger Invitation Reward Logic - $stmt = $con->prepare("SELECT * FROM invit_passenger WHERE id = :invite_id AND passengerInviterId = :passenger_id AND isGiftToken = 0 FOR UPDATE"); + $stmt = $con->prepare("SELECT * FROM invitesToPassengers WHERE id = :invite_id AND passengerID = :passenger_id AND isGiftToken = 0 FOR UPDATE"); $stmt->execute([':invite_id' => $inviteId, ':passenger_id' => $passengerId]); $invitation = $stmt->fetch(PDO::FETCH_ASSOC); if ($invitation) { - $upd = $con->prepare("UPDATE invit_passenger SET isGiftToken = 1 WHERE id = :invite_id"); + $upd = $con->prepare("UPDATE invitesToPassengers SET isGiftToken = 1 WHERE id = :invite_id"); $upd->execute([':invite_id' => $inviteId]); // Call Wallet Server diff --git a/backend/ride/invitor/updatePassengersInvitation.php b/backend/ride/invitor/updatePassengersInvitation.php index a4e795d..6e6dc42 100644 --- a/backend/ride/invitor/updatePassengersInvitation.php +++ b/backend/ride/invitor/updatePassengersInvitation.php @@ -9,9 +9,6 @@ if (empty($inviteCode) || empty($passengerID)) { exit; } -// 🔐 تشفير كود الدعوة قبل البحث -$inviteCodeEncrypted = $encryptionHelper->encryptData($inviteCode); - try { $checkSql = "SELECT `id`, `expirationTime` FROM `invitesToPassengers` WHERE `inviteCode` = :inviteCode @@ -19,7 +16,7 @@ try { AND `isGiftToken` = 0"; $checkStmt = $con->prepare($checkSql); - $checkStmt->bindParam(':inviteCode', $inviteCodeEncrypted); + $checkStmt->bindParam(':inviteCode', $inviteCode); $checkStmt->execute(); if ($checkStmt->rowCount() > 0) { diff --git a/siro_driver/android/app/google-services.json b/siro_driver/android/app/google-services.json index 485e75f..3875b02 100644 --- a/siro_driver/android/app/google-services.json +++ b/siro_driver/android/app/google-services.json @@ -5,6 +5,25 @@ "storage_bucket": "siro-a6957.firebasestorage.app" }, "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:caa30eaac3524de51632ca", + "android_client_info": { + "package_name": "com.siro.admin" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, { "client_info": { "mobilesdk_app_id": "1:825988584191:android:4525a21b00173d361632ca", @@ -42,6 +61,63 @@ "other_platform_oauth_client": [] } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:be08180beef7d65e1632ca", + "android_client_info": { + "package_name": "com.siro.service" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:492d9bc1df6b40c51632ca", + "android_client_info": { + "package_name": "com.siro.siro_driver" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:7e9088b719dcb7061632ca", + "android_client_info": { + "package_name": "com.siro.siro_rider" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } } ], "configuration_version": "1" diff --git a/siro_driver/android/app/src/main/AndroidManifest.xml b/siro_driver/android/app/src/main/AndroidManifest.xml index cce5eea..ef996ee 100644 --- a/siro_driver/android/app/src/main/AndroidManifest.xml +++ b/siro_driver/android/app/src/main/AndroidManifest.xml @@ -31,6 +31,22 @@ + + + + + + + + + + + + + + + + PLIST_VERSION 1 BUNDLE_ID - com.siro.driver + com.siro.siro-driver PROJECT_ID siro-a6957 STORAGE_BUCKET @@ -25,6 +25,6 @@ IS_SIGNIN_ENABLED GOOGLE_APP_ID - 1:825988584191:ios:4002b88e618f0c4e1632ca + 1:825988584191:ios:a86f1a54f0b1aaa21632ca \ No newline at end of file diff --git a/siro_driver/ios/Runner/Info.plist b/siro_driver/ios/Runner/Info.plist index ba5b06f..5c5d1fe 100644 --- a/siro_driver/ios/Runner/Info.plist +++ b/siro_driver/ios/Runner/Info.plist @@ -57,6 +57,7 @@ googlechromes comgooglemaps + whatsapp LSMinimumSystemVersion 12.0 diff --git a/siro_driver/lib/constant/links.dart b/siro_driver/lib/constant/links.dart index fc3906a..195b33d 100755 --- a/siro_driver/lib/constant/links.dart +++ b/siro_driver/lib/constant/links.dart @@ -17,6 +17,13 @@ class AppLink { static const String appDomain = 'siromove.com'; + static String get inviteRedirectUrl { + if (currentCountry == 'Syria') { + return "https://siromove.com/inviteSyria.php"; + } + return "https://siromove.com/invite.php"; + } + static String get location { switch (currentCountry) { case 'Syria': return 'https://api-syria.siromove.com/siro_v3/ride/location'; diff --git a/siro_driver/lib/controller/auth/captin/invit_controller.dart b/siro_driver/lib/controller/auth/captin/invit_controller.dart index 9e4668d..19cd713 100755 --- a/siro_driver/lib/controller/auth/captin/invit_controller.dart +++ b/siro_driver/lib/controller/auth/captin/invit_controller.dart @@ -45,7 +45,8 @@ class InviteController extends GetxController { final String shareText = '''Join Siro as a driver using my referral code! Use code: $driverCouponCode -Download the Siro Driver app now and earn rewards! +Download the Siro Driver app now and earn rewards: +https://siromove.com/invite.php?code=$driverCouponCode&app=driver '''; await Share.share(shareText); } @@ -55,7 +56,8 @@ Download the Siro Driver app now and earn rewards! if (couponCode != null) { final String shareText = '''Get a discount on your first Siro ride! Use my referral code: $couponCode -Download the Siro app now and enjoy your ride! +Download the Siro app now and enjoy your ride: +https://siromove.com/invite.php?code=$couponCode&app=rider '''; await Share.share(shareText); } @@ -491,15 +493,15 @@ Download the Siro app now and enjoy your ride! if (response != 'failure') { var d = (response); mySnackbarSuccess('Invite sent successfully'.tr); + String inviteCode = d['message']['inviteCode'].toString(); String message = '${'*Siro DRIVER CODE*'.tr}\n\n' '${"Use this code in registration".tr}\n' '${"To get a gift for both".tr}\n\n' '${"The period of this code is 24 hours".tr}\n\n' '${'before'.tr} *${d['message']['expirationTime'].toString()}*\n\n' - '_*${d['message']['inviteCode'].toString()}*_\n\n' - '${"Install our app:".tr}\n' - '*Android:* https://play.google.com/store/apps/details?id=com.siro_driver \n\n\n' - '*iOS:* https://apps.apple.com/st/app/siro-driver/id6482995159'; + '_*${inviteCode}*_\n\n' + '${"Quick Invite Link:".tr}\n' + '${AppLink.inviteRedirectUrl}?code=$inviteCode&app=driver'; launchCommunication('whatsapp', formattedPhoneNumber, message); invitePhoneController.clear(); @@ -534,18 +536,16 @@ Download the Siro app now and enjoy your ride! if (response != 'failure') { var d = response; mySnackbarSuccess('Invite sent successfully'.tr); + String inviteCode = d['message']['inviteCode'].toString(); String message = '${'*Siro APP CODE*'.tr}\n\n' '${"Use this code in registration".tr}\n\n' '${"To get a gift for both".tr}\n\n' '${"The period of this code is 24 hours".tr}\n\n' '${'before'.tr} *${d['message']['expirationTime'].toString()}*\n\n' - '_*${d['message']['inviteCode'].toString()}*_\n\n' + '_*${inviteCode}*_\n\n' '${"Quick Invite Link:".tr}\n' - 'https://${AppLink.appDomain}/?inviteCode=${d['message']['inviteCode'].toString()}\n\n' - '${"Install our app:".tr}\n' - '*Android:* https://play.google.com/store/apps/details?id=com.Siro.siro\n\n\n' - '*iOS:* https://apps.apple.com/st/app/siro-rider/id6748075179'; + '${AppLink.inviteRedirectUrl}?code=$inviteCode&app=rider'; launchCommunication('whatsapp', formattedPhoneNumber, message); invitePhoneController.clear(); diff --git a/siro_driver/lib/firebase_options.dart b/siro_driver/lib/firebase_options.dart index ccb630d..c0e1ae0 100644 --- a/siro_driver/lib/firebase_options.dart +++ b/siro_driver/lib/firebase_options.dart @@ -51,17 +51,17 @@ class DefaultFirebaseOptions { static const FirebaseOptions android = FirebaseOptions( apiKey: 'AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8', - appId: '1:825988584191:android:4525a21b00173d361632ca', + appId: '1:825988584191:android:492d9bc1df6b40c51632ca', messagingSenderId: '825988584191', projectId: 'siro-a6957', storageBucket: 'siro-a6957.firebasestorage.app', ); static const FirebaseOptions ios = FirebaseOptions( apiKey: 'AIzaSyDk6x6KZUY0IQtxoCMXX0F7N_yik8O19eA', - appId: '1:825988584191:ios:4002b88e618f0c4e1632ca', + appId: '1:825988584191:ios:a86f1a54f0b1aaa21632ca', messagingSenderId: '825988584191', projectId: 'siro-a6957', storageBucket: 'siro-a6957.firebasestorage.app', - iosBundleId: 'com.siro.driver', + iosBundleId: 'com.siro.siro-driver', ); } diff --git a/siro_driver/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart b/siro_driver/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart index 1136b22..1c6928d 100755 --- a/siro_driver/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart +++ b/siro_driver/lib/views/home/Captin/mapDriverWidgets/sos_connect.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; -import 'package:qr_flutter/qr_flutter.dart'; import 'package:siro_driver/views/widgets/error_snakbar.dart'; import 'package:siro_driver/views/widgets/my_textField.dart'; import 'package:siro_driver/views/widgets/elevated_btn.dart'; // Checked import @@ -40,29 +39,13 @@ class SosConnect extends StatelessWidget { ), ], ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - // === SOS Button === - _buildModernActionButton( - icon: MaterialIcons.warning, - color: Colors.white, - bgColor: AppColor.redColor, - tooltip: 'EMERGENCY SOS', - isPulsing: true, - onTap: () => _handleSosCall(controller), - ), - const SizedBox(height: 8), - // === Quick Invite Button === - _buildModernActionButton( - icon: Icons.qr_code_rounded, - color: Colors.white, - bgColor: AppColor.blueColor, - tooltip: 'Quick Invite', - isPulsing: false, - onTap: () => _showQuickInviteDialog(controller), - ), - ], + child: _buildModernActionButton( + icon: MaterialIcons.warning, + color: Colors.white, + bgColor: AppColor.redColor, + tooltip: 'EMERGENCY SOS', + isPulsing: true, + onTap: () => _handleSosCall(controller), ), ); }, @@ -140,70 +123,4 @@ class SosConnect extends StatelessWidget { launchCommunication('phone', box.read(BoxName.sosPhoneDriver), ''); } } - - void _showQuickInviteDialog(MapDriverController controller) { - // In a real scenario, this code would be fetched from the backend (ReferralController) - // For now we will use a generated code or driverId. We should use the one from ReferralController - // But since we are accessing it globally, we can just use the driverID + 123 for now until it's linked - String driverId = box.read(BoxName.driverID).toString(); - String inviteCode = "SR$driverId"; // Placeholder code - String deepLink = "https://${AppLink.appDomain}/invite?ref=$inviteCode"; - - Get.defaultDialog( - title: "Quick Invite".tr, - titleStyle: AppStyle.title.copyWith(fontWeight: FontWeight.bold), - content: Column( - children: [ - Text( - "Let the passenger scan this code to sign up".tr, - textAlign: TextAlign.center, - style: const TextStyle(fontSize: 14, color: Colors.grey), - ), - const SizedBox(height: 20), - Container( - padding: const EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.05), - blurRadius: 10, - offset: const Offset(0, 4), - ), - ], - ), - child: QrImageView( - data: deepLink, - version: QrVersions.auto, - size: 200.0, - backgroundColor: Colors.white, - ), - ), - const SizedBox(height: 20), - Container( - padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12), - decoration: BoxDecoration( - color: AppColor.blueColor.withOpacity(0.1), - borderRadius: BorderRadius.circular(12), - border: Border.all(color: AppColor.blueColor.withOpacity(0.3)), - ), - child: Text( - inviteCode, - style: TextStyle( - fontSize: 24, - fontWeight: FontWeight.w900, - color: AppColor.blueColor, - letterSpacing: 4, - ), - ), - ), - ], - ), - confirm: MyElevatedButton( - title: 'Done'.tr, - onPressed: () => Get.back(), - ), - ); - } } diff --git a/siro_driver/pubspec.lock b/siro_driver/pubspec.lock index 7975e40..761bec7 100644 --- a/siro_driver/pubspec.lock +++ b/siro_driver/pubspec.lock @@ -1732,22 +1732,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" - qr: - dependency: transitive - description: - name: qr - sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - qr_flutter: - dependency: "direct main" - description: - name: qr_flutter - sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" - url: "https://pub.dev" - source: hosted - version: "4.1.0" quick_actions: dependency: "direct main" description: diff --git a/siro_driver/pubspec.yaml b/siro_driver/pubspec.yaml index a5f7bcf..aca3265 100644 --- a/siro_driver/pubspec.yaml +++ b/siro_driver/pubspec.yaml @@ -41,7 +41,6 @@ dependencies: lottie: ^3.3.1 shimmer: ^3.0.0 slide_to_act: ^2.0.2 - qr_flutter: ^4.1.0 # Services & Hardware battery_plus: ^7.0.0 diff --git a/siro_rider/android/app/google-services.json b/siro_rider/android/app/google-services.json index 8a9269e..94068ba 100644 --- a/siro_rider/android/app/google-services.json +++ b/siro_rider/android/app/google-services.json @@ -5,6 +5,44 @@ "storage_bucket": "siro-a6957.firebasestorage.app" }, "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:caa30eaac3524de51632ca", + "android_client_info": { + "package_name": "com.siro.admin" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:4525a21b00173d361632ca", + "android_client_info": { + "package_name": "com.siro.driver" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, { "client_info": { "mobilesdk_app_id": "1:825988584191:android:06782b540c7681ad1632ca", @@ -23,6 +61,44 @@ "other_platform_oauth_client": [] } } + }, + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:be08180beef7d65e1632ca", + "android_client_info": { + "package_name": "com.siro.service" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + }, + { + "client_info": { + "mobilesdk_app_id": "1:825988584191:android:7e9088b719dcb7061632ca", + "android_client_info": { + "package_name": "com.siro.siro_rider" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } } ], "configuration_version": "1" diff --git a/siro_rider/android/app/src/main/AndroidManifest.xml b/siro_rider/android/app/src/main/AndroidManifest.xml index 585fd9d..0ddad7f 100644 --- a/siro_rider/android/app/src/main/AndroidManifest.xml +++ b/siro_rider/android/app/src/main/AndroidManifest.xml @@ -19,6 +19,21 @@ + + + + + + + + + + + + + + + - + diff --git a/siro_rider/firebase.json b/siro_rider/firebase.json index 4d402a7..65a5084 100644 --- a/siro_rider/firebase.json +++ b/siro_rider/firebase.json @@ -1 +1 @@ -{"flutter":{"platforms":{"android":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:android:06782b540c7681ad1632ca","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:ios:1d880fc7fc98b7671632ca","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"siro-a6957","configurations":{"android":"1:825988584191:android:06782b540c7681ad1632ca","ios":"1:825988584191:ios:1d880fc7fc98b7671632ca"}}}}}} \ No newline at end of file +{"flutter":{"platforms":{"android":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:android:7e9088b719dcb7061632ca","fileOutput":"android/app/google-services.json"}},"ios":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:ios:4f60966dd0a69b3f1632ca","uploadDebugSymbols":false,"fileOutput":"ios/Runner/GoogleService-Info.plist"}},"dart":{"lib/firebase_options.dart":{"projectId":"siro-a6957","configurations":{"android":"1:825988584191:android:7e9088b719dcb7061632ca","ios":"1:825988584191:ios:4f60966dd0a69b3f1632ca","macos":"1:825988584191:ios:7b48f585862d5cfc1632ca"}}},"macos":{"default":{"projectId":"siro-a6957","appId":"1:825988584191:ios:7b48f585862d5cfc1632ca","uploadDebugSymbols":false,"fileOutput":"macos/Runner/GoogleService-Info.plist"}}}}} \ No newline at end of file diff --git a/siro_rider/ios/Podfile b/siro_rider/ios/Podfile index f61c2cb..908c441 100644 --- a/siro_rider/ios/Podfile +++ b/siro_rider/ios/Podfile @@ -1,4 +1,4 @@ -platform :ios, '16.1' # This is often set in the generated Podfile section +platform :ios, '16.5' # This is often set in the generated Podfile section ENV['COCOAPODS_DISABLE_STATS'] = 'true' diff --git a/siro_rider/ios/Podfile.lock b/siro_rider/ios/Podfile.lock index 2b95974..396abac 100644 --- a/siro_rider/ios/Podfile.lock +++ b/siro_rider/ios/Podfile.lock @@ -1,68 +1,58 @@ PODS: - app_links (7.0.0): - Flutter - - AppAuth (2.0.0): - - AppAuth/Core (= 2.0.0) - - AppAuth/ExternalUserAgent (= 2.0.0) - - AppAuth/Core (2.0.0) - - AppAuth/ExternalUserAgent (2.0.0): - - AppAuth/Core - - AppCheckCore (11.2.0): - - GoogleUtilities/Environment (~> 8.0) - - GoogleUtilities/UserDefaults (~> 8.0) - - PromisesObjC (~> 2.4) - audio_session (0.0.1): - Flutter - connectivity_plus (0.0.1): - Flutter - device_info_plus (0.0.1): - Flutter - - Firebase/Auth (12.8.0): + - Firebase/Auth (12.14.0): - Firebase/CoreOnly - - FirebaseAuth (~> 12.8.0) - - Firebase/CoreOnly (12.8.0): - - FirebaseCore (~> 12.8.0) - - Firebase/Messaging (12.8.0): + - FirebaseAuth (~> 12.14.0) + - Firebase/CoreOnly (12.14.0): + - FirebaseCore (~> 12.14.0) + - Firebase/Messaging (12.14.0): - Firebase/CoreOnly - - FirebaseMessaging (~> 12.8.0) - - firebase_auth (6.1.4): - - Firebase/Auth (= 12.8.0) + - FirebaseMessaging (~> 12.14.0) + - firebase_auth (6.5.2): + - Firebase/Auth (= 12.14.0) - firebase_core - Flutter - - firebase_core (4.4.0): - - Firebase/CoreOnly (= 12.8.0) + - firebase_core (4.10.0): + - Firebase/CoreOnly (= 12.14.0) - Flutter - - firebase_messaging (16.1.1): - - Firebase/Messaging (= 12.8.0) + - firebase_messaging (16.3.0): + - Firebase/Messaging (= 12.14.0) - firebase_core - Flutter - - FirebaseAppCheckInterop (12.8.0) - - FirebaseAuth (12.8.0): - - FirebaseAppCheckInterop (~> 12.8.0) - - FirebaseAuthInterop (~> 12.8.0) - - FirebaseCore (~> 12.8.0) - - FirebaseCoreExtension (~> 12.8.0) + - FirebaseAppCheckInterop (12.14.0) + - FirebaseAuth (12.14.0): + - FirebaseAppCheckInterop (~> 12.14.0) + - FirebaseAuthInterop (~> 12.14.0) + - FirebaseCore (~> 12.14.0) + - FirebaseCoreExtension (~> 12.14.0) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/Environment (~> 8.1) - GTMSessionFetcher/Core (< 6.0, >= 3.4) - RecaptchaInterop (~> 101.0) - - FirebaseAuthInterop (12.8.0) - - FirebaseCore (12.8.0): - - FirebaseCoreInternal (~> 12.8.0) + - FirebaseAuthInterop (12.14.0) + - FirebaseCore (12.14.0): + - FirebaseCoreInternal (~> 12.14.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/Logger (~> 8.1) - - FirebaseCoreExtension (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseCoreInternal (12.8.0): + - FirebaseCoreExtension (12.14.0): + - FirebaseCore (~> 12.14.0) + - FirebaseCoreInternal (12.14.0): - "GoogleUtilities/NSData+zlib (~> 8.1)" - - FirebaseInstallations (12.8.0): - - FirebaseCore (~> 12.8.0) + - FirebaseInstallations (12.14.0): + - FirebaseCore (~> 12.14.0) - GoogleUtilities/Environment (~> 8.1) - GoogleUtilities/UserDefaults (~> 8.1) - PromisesObjC (~> 2.4) - - FirebaseMessaging (12.8.0): - - FirebaseCore (~> 12.8.0) - - FirebaseInstallations (~> 12.8.0) + - FirebaseMessaging (12.14.0): + - FirebaseCore (~> 12.14.0) + - FirebaseInstallations (~> 12.14.0) - GoogleDataTransport (~> 10.1) - GoogleUtilities/AppDelegateSwizzler (~> 8.1) - GoogleUtilities/Environment (~> 8.1) @@ -87,51 +77,44 @@ PODS: - geolocator_apple (1.2.0): - Flutter - FlutterMacOS - - google_sign_in_ios (0.0.1): - - Flutter - - FlutterMacOS - - GoogleSignIn (~> 9.0) - - GTMSessionFetcher (>= 3.4.0) - GoogleDataTransport (10.1.0): - nanopb (~> 3.30910.0) - PromisesObjC (~> 2.4) - - GoogleSignIn (9.1.0): - - AppAuth (~> 2.0) - - AppCheckCore (~> 11.0) - - GTMAppAuth (~> 5.0) - - GTMSessionFetcher/Core (~> 3.3) - - GoogleUtilities/AppDelegateSwizzler (8.1.0): + - GoogleMLKit/BarcodeScanning (7.0.0): + - GoogleMLKit/MLKitCore + - MLKitBarcodeScanning (~> 6.0.0) + - GoogleMLKit/MLKitCore (7.0.0): + - MLKitCommon (~> 12.0.0) + - GoogleToolboxForMac/Defines (4.2.1) + - GoogleToolboxForMac/Logger (4.2.1): + - GoogleToolboxForMac/Defines (= 4.2.1) + - "GoogleToolboxForMac/NSData+zlib (4.2.1)": + - GoogleToolboxForMac/Defines (= 4.2.1) + - GoogleUtilities/AppDelegateSwizzler (8.1.1): - GoogleUtilities/Environment - GoogleUtilities/Logger - GoogleUtilities/Network - GoogleUtilities/Privacy - - GoogleUtilities/Environment (8.1.0): + - GoogleUtilities/Environment (8.1.1): - GoogleUtilities/Privacy - - GoogleUtilities/Logger (8.1.0): + - GoogleUtilities/Logger (8.1.1): - GoogleUtilities/Environment - GoogleUtilities/Privacy - - GoogleUtilities/Network (8.1.0): + - GoogleUtilities/Network (8.1.1): - GoogleUtilities/Logger - "GoogleUtilities/NSData+zlib" - GoogleUtilities/Privacy - GoogleUtilities/Reachability - - "GoogleUtilities/NSData+zlib (8.1.0)": + - "GoogleUtilities/NSData+zlib (8.1.1)": - GoogleUtilities/Privacy - - GoogleUtilities/Privacy (8.1.0) - - GoogleUtilities/Reachability (8.1.0): + - GoogleUtilities/Privacy (8.1.1) + - GoogleUtilities/Reachability (8.1.1): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - GoogleUtilities/UserDefaults (8.1.0): + - GoogleUtilities/UserDefaults (8.1.1): - GoogleUtilities/Logger - GoogleUtilities/Privacy - - GTMAppAuth (5.0.0): - - AppAuth/Core (~> 2.0) - - GTMSessionFetcher/Core (< 4.0, >= 3.3) - - GTMSessionFetcher (3.5.0): - - GTMSessionFetcher/Full (= 3.5.0) - GTMSessionFetcher/Core (3.5.0) - - GTMSessionFetcher/Full (3.5.0): - - GTMSessionFetcher/Core - image_cropper (0.0.4): - Flutter - TOCropViewController (~> 2.8.0) @@ -155,6 +138,26 @@ PODS: - maplibre_gl (0.25.0): - Flutter - MapLibre (= 6.19.1) + - MLImage (1.0.0-beta6) + - MLKitBarcodeScanning (6.0.0): + - MLKitCommon (~> 12.0) + - MLKitVision (~> 8.0) + - MLKitCommon (12.0.0): + - GoogleDataTransport (~> 10.0) + - GoogleToolboxForMac/Logger (< 5.0, >= 4.2.1) + - "GoogleToolboxForMac/NSData+zlib (< 5.0, >= 4.2.1)" + - GoogleUtilities/Logger (~> 8.0) + - GoogleUtilities/UserDefaults (~> 8.0) + - GTMSessionFetcher/Core (< 4.0, >= 3.3.2) + - MLKitVision (8.0.0): + - GoogleToolboxForMac/Logger (< 5.0, >= 4.2.1) + - "GoogleToolboxForMac/NSData+zlib (< 5.0, >= 4.2.1)" + - GTMSessionFetcher/Core (< 4.0, >= 3.3.2) + - MLImage (= 1.0.0-beta6) + - MLKitCommon (~> 12.0) + - mobile_scanner (6.0.2): + - Flutter + - GoogleMLKit/BarcodeScanning (~> 7.0.0) - nanopb (3.30910.0): - nanopb/decode (= 3.30910.0) - nanopb/encode (= 3.30910.0) @@ -162,13 +165,13 @@ PODS: - nanopb/encode (3.30910.0) - package_info_plus (0.4.5): - Flutter - - permission_handler_apple (9.3.0): + - permission_handler_apple (9.4.8): - Flutter - - PromisesObjC (2.4.0) + - PromisesObjC (2.4.1) - quick_actions_ios (0.0.1): - Flutter - RecaptchaInterop (101.0.0) - - record_ios (1.2.0): + - record_ios (1.2.1): - Flutter - sensors_plus (0.0.1): - Flutter @@ -179,66 +182,6 @@ PODS: - sqflite_darwin (0.0.4): - Flutter - FlutterMacOS - - Stripe (25.6.4): - - StripeApplePay (= 25.6.4) - - StripeCore (= 25.6.4) - - StripeIssuing (= 25.6.4) - - StripePayments (= 25.6.4) - - StripePaymentsUI (= 25.6.4) - - StripeUICore (= 25.6.4) - - stripe_ios (0.0.1): - - Flutter - - Stripe (~> 25.6.0) - - stripe_ios/stripe_ios (= 0.0.1) - - stripe_ios/stripe_objc (= 0.0.1) - - StripeApplePay (~> 25.6.0) - - StripeFinancialConnections (~> 25.6.0) - - StripePayments (~> 25.6.0) - - StripePaymentSheet (~> 25.6.0) - - StripePaymentsUI (~> 25.6.0) - - stripe_ios/stripe_ios (0.0.1): - - Flutter - - Stripe (~> 25.6.0) - - stripe_ios/stripe_objc - - StripeApplePay (~> 25.6.0) - - StripeFinancialConnections (~> 25.6.0) - - StripePayments (~> 25.6.0) - - StripePaymentSheet (~> 25.6.0) - - StripePaymentsUI (~> 25.6.0) - - stripe_ios/stripe_objc (0.0.1): - - Flutter - - Stripe (~> 25.6.0) - - StripeApplePay (~> 25.6.0) - - StripeFinancialConnections (~> 25.6.0) - - StripePayments (~> 25.6.0) - - StripePaymentSheet (~> 25.6.0) - - StripePaymentsUI (~> 25.6.0) - - StripeApplePay (25.6.4): - - StripeCore (= 25.6.4) - - StripeCore (25.6.4) - - StripeFinancialConnections (25.6.4): - - StripeCore (= 25.6.4) - - StripeUICore (= 25.6.4) - - StripeIssuing (25.6.4): - - StripeCore (= 25.6.4) - - StripePayments (= 25.6.4) - - StripePaymentsUI (= 25.6.4) - - StripePayments (25.6.4): - - StripeCore (= 25.6.4) - - StripePayments/Stripe3DS2 (= 25.6.4) - - StripePayments/Stripe3DS2 (25.6.4): - - StripeCore (= 25.6.4) - - StripePaymentSheet (25.6.4): - - StripeApplePay (= 25.6.4) - - StripeCore (= 25.6.4) - - StripePayments (= 25.6.4) - - StripePaymentsUI (= 25.6.4) - - StripePaymentsUI (25.6.4): - - StripeCore (= 25.6.4) - - StripePayments (= 25.6.4) - - StripeUICore (= 25.6.4) - - StripeUICore (25.6.4): - - StripeCore (= 25.6.4) - TOCropViewController (2.8.0) - url_launcher_ios (0.0.1): - Flutter @@ -270,7 +213,6 @@ DEPENDENCIES: - flutter_tts (from `.symlinks/plugins/flutter_tts/ios`) - flutter_webrtc (from `.symlinks/plugins/flutter_webrtc/ios`) - geolocator_apple (from `.symlinks/plugins/geolocator_apple/darwin`) - - google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`) - image_cropper (from `.symlinks/plugins/image_cropper/ios`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - jailbreak_root_detection (from `.symlinks/plugins/jailbreak_root_detection/ios`) @@ -279,6 +221,7 @@ DEPENDENCIES: - local_auth_darwin (from `.symlinks/plugins/local_auth_darwin/darwin`) - location (from `.symlinks/plugins/location/ios`) - maplibre_gl (from `.symlinks/plugins/maplibre_gl/ios`) + - mobile_scanner (from `.symlinks/plugins/mobile_scanner/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - quick_actions_ios (from `.symlinks/plugins/quick_actions_ios/ios`) @@ -287,7 +230,6 @@ DEPENDENCIES: - share_plus (from `.symlinks/plugins/share_plus/ios`) - sign_in_with_apple (from `.symlinks/plugins/sign_in_with_apple/ios`) - sqflite_darwin (from `.symlinks/plugins/sqflite_darwin/darwin`) - - stripe_ios (from `.symlinks/plugins/stripe_ios/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - vibration (from `.symlinks/plugins/vibration/ios`) - video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`) @@ -296,8 +238,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - - AppAuth - - AppCheckCore - Firebase - FirebaseAppCheckInterop - FirebaseAuth @@ -308,24 +248,19 @@ SPEC REPOS: - FirebaseInstallations - FirebaseMessaging - GoogleDataTransport - - GoogleSignIn + - GoogleMLKit + - GoogleToolboxForMac - GoogleUtilities - - GTMAppAuth - GTMSessionFetcher - IOSSecuritySuite - MapLibre + - MLImage + - MLKitBarcodeScanning + - MLKitCommon + - MLKitVision - nanopb - PromisesObjC - RecaptchaInterop - - Stripe - - StripeApplePay - - StripeCore - - StripeFinancialConnections - - StripeIssuing - - StripePayments - - StripePaymentSheet - - StripePaymentsUI - - StripeUICore - TOCropViewController - WebRTC-SDK @@ -360,8 +295,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_webrtc/ios" geolocator_apple: :path: ".symlinks/plugins/geolocator_apple/darwin" - google_sign_in_ios: - :path: ".symlinks/plugins/google_sign_in_ios/darwin" image_cropper: :path: ".symlinks/plugins/image_cropper/ios" image_picker_ios: @@ -378,6 +311,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/location/ios" maplibre_gl: :path: ".symlinks/plugins/maplibre_gl/ios" + mobile_scanner: + :path: ".symlinks/plugins/mobile_scanner/ios" package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" permission_handler_apple: @@ -394,8 +329,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/sign_in_with_apple/ios" sqflite_darwin: :path: ".symlinks/plugins/sqflite_darwin/darwin" - stripe_ios: - :path: ".symlinks/plugins/stripe_ios/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" vibration: @@ -409,23 +342,21 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: app_links: a754cbec3c255bd4bbb4d236ecc06f28cd9a7ce8 - AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063 - AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0 connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe - Firebase: 9a58fdbc9d8655ed7b79a19cf9690bb007d3d46d - firebase_auth: e9031a1dbe04a90d98e8d11ff2302352a1c6d9e8 - firebase_core: ee30637e6744af8e0c12a6a1e8a9718506ec2398 - firebase_messaging: 343de01a8d3e18b60df0c6d37f7174c44ae38e02 - FirebaseAppCheckInterop: ba3dc604a89815379e61ec2365101608d365cf7d - FirebaseAuth: 4c289b1a43f5955283244a55cf6bd616de344be5 - FirebaseAuthInterop: 95363fe96493cb4f106656666a0768b420cba090 - FirebaseCore: 0dbad74bda10b8fb9ca34ad8f375fb9dd3ebef7c - FirebaseCoreExtension: 6605938d51f765d8b18bfcafd2085276a252bee2 - FirebaseCoreInternal: fe5fa466aeb314787093a7dce9f0beeaad5a2a21 - FirebaseInstallations: 6a14ab3d694ebd9f839c48d330da5547e9ca9dc0 - FirebaseMessaging: 7f42cfd10ec64181db4e01b305a613791c8e782c + Firebase: 7cc10425300768ec86292688af5cb228f0604bde + firebase_auth: d4091ec40b52cc2ea56171ea521c30b388844acb + firebase_core: 383e19b49a08df5d7a6cf5017616de6a357ed7af + firebase_messaging: ab03d6090864c0fb8136521231df6a66cb13be49 + FirebaseAppCheckInterop: f123c0261a7b46f060e98fc2961651f1ac68f384 + FirebaseAuth: 01a77d472aec77ec008141e7d859d1b9cb8dc2cf + FirebaseAuthInterop: 63056ef7f9602e79a8f8d756d4cb35f38e2927c3 + FirebaseCore: 4939b340b9c598dc1f965d68f8fe57e630b65407 + FirebaseCoreExtension: ee3e3697acea1062288b1900bcdcab4d59ab93b4 + FirebaseCoreInternal: 090369a5fffd7423cf88006ab4d2ccc2173a8db9 + FirebaseInstallations: 7cdc919e29dc54306edeffdbdc1eed1a40d7d1e7 + FirebaseMessaging: 4803888ce3002188f24e19faa8d2326261538426 Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 flutter_app_group_directory: 55b5362007d1c0cb45dc1dd1e94f67d615f45a6b flutter_contacts: 5383945387e7ca37cf963d4be57c21f2fc15ca9f @@ -434,11 +365,10 @@ SPEC CHECKSUMS: flutter_tts: 35ac3c7d42412733e795ea96ad2d7e05d0a75113 flutter_webrtc: ec91d94b484ad49cf191ef93413f64a40ffd3b4c geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e - google_sign_in_ios: 000870aa06da9b28d1d0bf7ef70ff0213059dd28 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 - GoogleSignIn: fcee2257188d5eda57a5e2b6a715550ffff9206d - GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238 + GoogleMLKit: eff9e23ec1d90ea4157a1ee2e32a4f610c5b3318 + GoogleToolboxForMac: d1a2cbf009c453f4d6ded37c105e2f67a32206d8 + GoogleUtilities: 4f2618a4a1e762a1ee134a1e2323bba9843e06da GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6 image_cropper: 64567491beea6cd1bc4b11948e2babb590de5826 image_picker_ios: e0ece4aa2a75771a7de3fa735d26d90817041326 @@ -450,35 +380,30 @@ SPEC CHECKSUMS: location: 155caecf9da4f280ab5fe4a55f94ceccfab838f8 MapLibre: 7f24faba45439f80ccb0f83393c29fa32cb81952 maplibre_gl: a2114567cbd1065866614fbd34dfb75ab782aaa2 + MLImage: 0ad1c5f50edd027672d8b26b0fee78a8b4a0fc56 + MLKitBarcodeScanning: 0a3064da0a7f49ac24ceb3cb46a5bc67496facd2 + MLKitCommon: 07c2c33ae5640e5380beaaa6e4b9c249a205542d + MLKitVision: 45e79d68845a2de77e2dd4d7f07947f0ed157b0e + mobile_scanner: af8f71879eaba2bbcb4d86c6a462c3c0e7f23036 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 - permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d - PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 + permission_handler_apple: 92d754bbaa7361d436db2d6c3c1c2a0fdcec462e + PromisesObjC: 752c3227f599e3467650e47ea36f433eeb10c273 quick_actions_ios: 500fcc11711d9f646739093395c4ae8eec25f779 RecaptchaInterop: 11e0b637842dfb48308d242afc3f448062325aba - record_ios: 412daca2350b228e698fffcd08f1f94ceb1e3844 + record_ios: 980fd386a97a35987d0fce3dfda4b26a38c90f4c sensors_plus: 3c3bac724a2128c895623e03efd82cf0e94fd8e8 share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a sign_in_with_apple: c5dcc141574c8c54d5ac99dd2163c0c72ad22418 sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 - Stripe: 7cb1009980324c6c16b6a4af5843b8ef54549065 - stripe_ios: eebee52319de946cc0da2d6ddc98a89b04cec95e - StripeApplePay: 91000b0927f53c58a2a1f829a4ee246d508bd1c4 - StripeCore: f6ca805768a7807ec014c0523cd99a3d16d21d6b - StripeFinancialConnections: 2cb9bc81468599d1b4b41178f49879a65c8ac52e - StripeIssuing: 7ffde774af77d713aff204858fcf765eeb3677d3 - StripePayments: 4de3976a0d5f626cfc8ad4e010aff1cbda8dc1e5 - StripePaymentSheet: 29443db7e8635e2d3a00758f1ecebbb17a24ff19 - StripePaymentsUI: 37551e684263db449368ccac27438947e1b45f84 - StripeUICore: f1e43a68ab1e1428f8738df821eb64efac1d871a TOCropViewController: 797deaf39c90e6e9ddd848d88817f6b9a8a09888 url_launcher_ios: 7a95fa5b60cc718a708b8f2966718e93db0cef1b vibration: ca8104a8875b9c493e15b21b04e456befd0ff6eb - video_player_avfoundation: dd410b52df6d2466a42d28550e33e4146928280a + video_player_avfoundation: 3453f792138786248960ca029747fcd9f318ef52 wakelock_plus: e29112ab3ef0b318e58cfa5c32326458be66b556 WebRTC-SDK: ab9b5319e458c2bfebdc92b3600740da35d5630d webview_flutter_wkwebview: 8ebf4fded22593026f7dbff1fbff31ea98573c8d -PODFILE CHECKSUM: 2ba2e4898a3d9a1615dafa81db0705bd67da92c3 +PODFILE CHECKSUM: bd6e2f6541b0ca1731e9c8557eb4a4f6036c5508 COCOAPODS: 1.16.2 diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152 1.png b/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152 1.png deleted file mode 100644 index 9393ec5..0000000 Binary files a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152 1.png and /dev/null differ diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152 2.png b/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152 2.png deleted file mode 100644 index 9393ec5..0000000 Binary files a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152 2.png and /dev/null differ diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152.png b/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152.png deleted file mode 100644 index 9393ec5..0000000 Binary files a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/152.png and /dev/null differ diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/Contents.json b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/Contents.json similarity index 70% rename from siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/Contents.json rename to siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/Contents.json index a626b3d..0f088b2 100644 --- a/siro_rider/ios/RideWidget/Assets.xcassets/IntaleqIcon.imageset/Contents.json +++ b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/Contents.json @@ -1,17 +1,17 @@ { "images" : [ { - "filename" : "152.png", + "filename" : "logo_siro.png", "idiom" : "universal", "scale" : "1x" }, { - "filename" : "152 1.png", + "filename" : "logo_siro 1.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "152 2.png", + "filename" : "logo_siro 2.png", "idiom" : "universal", "scale" : "3x" } diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro 1.png b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro 1.png new file mode 100644 index 0000000..ed2fa2b Binary files /dev/null and b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro 1.png differ diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro 2.png b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro 2.png new file mode 100644 index 0000000..ed2fa2b Binary files /dev/null and b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro 2.png differ diff --git a/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro.png b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro.png new file mode 100644 index 0000000..ed2fa2b Binary files /dev/null and b/siro_rider/ios/RideWidget/Assets.xcassets/SiroIcon.imageset/logo_siro.png differ diff --git a/siro_rider/ios/RideWidget/RideWidgetLiveActivity.swift b/siro_rider/ios/RideWidget/RideWidgetLiveActivity.swift index 0e7de5c..7b5f61f 100644 --- a/siro_rider/ios/RideWidget/RideWidgetLiveActivity.swift +++ b/siro_rider/ios/RideWidget/RideWidgetLiveActivity.swift @@ -17,7 +17,7 @@ extension LiveActivitiesAppAttributes { } // 3️⃣ Shared App Group -let sharedDefault = UserDefaults(suiteName: "group.com.siro.siro_rider")! +let sharedDefault = UserDefaults(suiteName: "group.com.Siro.siro")! @available(iOS 16.1, *) struct RideWidgetLiveActivity: Widget { diff --git a/siro_rider/ios/Runner.xcodeproj/project.pbxproj b/siro_rider/ios/Runner.xcodeproj/project.pbxproj index 03cc591..947d109 100644 --- a/siro_rider/ios/Runner.xcodeproj/project.pbxproj +++ b/siro_rider/ios/Runner.xcodeproj/project.pbxproj @@ -672,7 +672,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.siro.siro_rider; + PRODUCT_BUNDLE_IDENTIFIER = com.siroapp.rider; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -861,7 +861,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.siro.siro_rider; + PRODUCT_BUNDLE_IDENTIFIER = com.siroapp.rider; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -887,7 +887,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = com.siro.siro_rider; + PRODUCT_BUNDLE_IDENTIFIER = com.siroapp.rider; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -927,7 +927,7 @@ MARKETING_VERSION = 1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.siro.siro_rider.RideWidget; + PRODUCT_BUNDLE_IDENTIFIER = com.siroapp.rider.RideWidgetExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -972,7 +972,7 @@ LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.siro.siro_rider.RideWidget; + PRODUCT_BUNDLE_IDENTIFIER = com.siroapp.rider.RideWidgetExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; @@ -1015,7 +1015,7 @@ LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MARKETING_VERSION = 1.0; MTL_FAST_MATH = YES; - PRODUCT_BUNDLE_IDENTIFIER = com.siro.siro_rider.RideWidget; + PRODUCT_BUNDLE_IDENTIFIER = com.siroapp.rider.RideWidgetExtension; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRING_CATALOG_GENERATE_SYMBOLS = YES; diff --git a/siro_rider/ios/Runner/GoogleService-Info.plist b/siro_rider/ios/Runner/GoogleService-Info.plist index aec30c3..e28a901 100644 --- a/siro_rider/ios/Runner/GoogleService-Info.plist +++ b/siro_rider/ios/Runner/GoogleService-Info.plist @@ -9,7 +9,7 @@ PLIST_VERSION 1 BUNDLE_ID - com.siro.rider + com.siroapp.rider PROJECT_ID siro-a6957 STORAGE_BUCKET @@ -25,6 +25,6 @@ IS_SIGNIN_ENABLED GOOGLE_APP_ID - 1:825988584191:ios:1d880fc7fc98b7671632ca + 1:825988584191:ios:4f60966dd0a69b3f1632ca \ No newline at end of file diff --git a/siro_rider/ios/Runner/Info.plist b/siro_rider/ios/Runner/Info.plist index 60d43c9..9d3cdf1 100644 --- a/siro_rider/ios/Runner/Info.plist +++ b/siro_rider/ios/Runner/Info.plist @@ -48,6 +48,7 @@ googlechromes comgooglemaps + whatsapp LSRequiresIPhoneOS diff --git a/siro_rider/lib/constant/links.dart b/siro_rider/lib/constant/links.dart index 0e60009..c25b700 100644 --- a/siro_rider/lib/constant/links.dart +++ b/siro_rider/lib/constant/links.dart @@ -3,6 +3,14 @@ import 'package:siro_rider/main.dart'; class AppLink { static const String appDomain = 'siromove.com'; + + static String get inviteRedirectUrl { + if (currentCountry == 'Syria') { + return "https://siromove.com/inviteSyria.php"; + } + return "https://siromove.com/invite.php"; + } + static String get currentCountry => box.read(BoxName.countryCode) ?? 'Jordan'; static String get paymentServer { diff --git a/siro_rider/lib/controller/home/profile/invit_controller.dart b/siro_rider/lib/controller/home/profile/invit_controller.dart index d1de71b..5a2f4d6 100644 --- a/siro_rider/lib/controller/home/profile/invit_controller.dart +++ b/siro_rider/lib/controller/home/profile/invit_controller.dart @@ -51,7 +51,8 @@ class InviteController extends GetxController { final String shareText = ''' ${'Join Siro as a driver using my referral code!'.tr} ${'Use code:'.tr} $driverCouponCode -${'Download the Siro Driver app now and earn rewards!'.tr} +${'Download the Siro Driver app now and earn rewards:'.tr} +${AppLink.inviteRedirectUrl}?code=$driverCouponCode&app=driver '''; await Share.share(shareText); } @@ -62,7 +63,8 @@ ${'Download the Siro Driver app now and earn rewards!'.tr} final String shareText = ''' ${'Get a discount on your first Siro ride!'.tr} ${'Use my referral code:'.tr} $couponCode -${'Download the Siro app now and enjoy your ride!'.tr} +${'Download the Siro app now and enjoy your ride:'.tr} +${AppLink.inviteRedirectUrl}?code=$couponCode&app=rider '''; await Share.share(shareText); } @@ -248,9 +250,8 @@ ${'Download the Siro app now and enjoy your ride!'.tr} "${'Your personal invitation code is:'.tr}\n" "*$inviteCode*\n\n" "⏳ ${'Be sure to use it quickly! This code expires at'.tr} *$expirationTime*.\n\n" - "📲 ${'Download the app now:'.tr}\n" - "• *Android:* https://play.google.com/store/apps/details?id=com.Siro.siro\n" - "• *iOS:* https://apps.apple.com/st/app/siro-rider/id6748075179\n\n" + "🔗 ${'Quick Invite Link:'.tr}\n" + "${AppLink.inviteRedirectUrl}?code=$inviteCode&app=rider\n\n" "${'See you on the road!'.tr} 🚗"; launchCommunication('whatsapp', formattedPhoneNumber, message); diff --git a/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart b/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart index 55ed32b..0ebeddf 100644 --- a/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart +++ b/siro_rider/lib/controller/home/profile/invites_rewards_controller.dart @@ -46,22 +46,6 @@ class InvitesRewardsController extends GetxController { update(); } - Future processScannedQRCode(String code) async { - if (code.contains('inviteCode=')) { - Uri uri = Uri.parse(code); - String? inviteCode = uri.queryParameters['inviteCode']; - - if (inviteCode != null && inviteCode.isNotEmpty) { - await linkInviteCode(inviteCode); - } else { - Get.snackbar("Error".tr, "Invalid QR Code".tr); - } - } else if (code.length >= 4 && code.length <= 15) { - await linkInviteCode(code); - } else { - Get.snackbar("Error".tr, "Invalid QR Code format".tr); - } - } Future linkInviteCode(String inviteCode) async { Get.dialog(const Center(child: CircularProgressIndicator()), barrierDismissible: false); diff --git a/siro_rider/lib/firebase_options.dart b/siro_rider/lib/firebase_options.dart index 68b8f42..ce959ee 100644 --- a/siro_rider/lib/firebase_options.dart +++ b/siro_rider/lib/firebase_options.dart @@ -28,10 +28,7 @@ class DefaultFirebaseOptions { case TargetPlatform.iOS: return ios; case TargetPlatform.macOS: - throw UnsupportedError( - 'DefaultFirebaseOptions have not been configured for macos - ' - 'you can reconfigure this by running the FlutterFire CLI again.', - ); + return macos; case TargetPlatform.windows: throw UnsupportedError( 'DefaultFirebaseOptions have not been configured for windows - ' @@ -51,17 +48,25 @@ class DefaultFirebaseOptions { static const FirebaseOptions android = FirebaseOptions( apiKey: 'AIzaSyAEoply_UcEP6KaCu_ziCy_ZDIjAKvi7b8', - appId: '1:825988584191:android:06782b540c7681ad1632ca', + appId: '1:825988584191:android:7e9088b719dcb7061632ca', messagingSenderId: '825988584191', projectId: 'siro-a6957', storageBucket: 'siro-a6957.firebasestorage.app', ); static const FirebaseOptions ios = FirebaseOptions( apiKey: 'AIzaSyDk6x6KZUY0IQtxoCMXX0F7N_yik8O19eA', - appId: '1:825988584191:ios:1d880fc7fc98b7671632ca', + appId: '1:825988584191:ios:4f60966dd0a69b3f1632ca', messagingSenderId: '825988584191', projectId: 'siro-a6957', storageBucket: 'siro-a6957.firebasestorage.app', - iosBundleId: 'com.siro.rider', + iosBundleId: 'com.siroapp.rider', + ); + static const FirebaseOptions macos = FirebaseOptions( + apiKey: 'AIzaSyDk6x6KZUY0IQtxoCMXX0F7N_yik8O19eA', + appId: '1:825988584191:ios:7b48f585862d5cfc1632ca', + messagingSenderId: '825988584191', + projectId: 'siro-a6957', + storageBucket: 'siro-a6957.firebasestorage.app', + iosBundleId: 'com.siro.siroRider', ); } diff --git a/siro_rider/lib/views/home/HomePage/qr_scanner_page.dart b/siro_rider/lib/views/home/HomePage/qr_scanner_page.dart deleted file mode 100644 index 48f0f0e..0000000 --- a/siro_rider/lib/views/home/HomePage/qr_scanner_page.dart +++ /dev/null @@ -1,67 +0,0 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:mobile_scanner/mobile_scanner.dart'; -import 'package:siro_rider/constant/colors.dart'; -import 'package:siro_rider/controller/home/profile/invites_rewards_controller.dart'; - -class QRScannerPage extends StatefulWidget { - @override - _QRScannerPageState createState() => _QRScannerPageState(); -} - -class _QRScannerPageState extends State { - final InvitesRewardsController controller = Get.find(); - bool _isScanned = false; - - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Colors.black, - appBar: AppBar( - backgroundColor: Colors.black, - iconTheme: const IconThemeData(color: Colors.white), - title: Text("Scan QR Code".tr, style: const TextStyle(color: Colors.white)), - ), - body: Stack( - children: [ - MobileScanner( - onDetect: (capture) { - if (_isScanned) return; - final List barcodes = capture.barcodes; - for (final barcode in barcodes) { - if (barcode.rawValue != null) { - setState(() => _isScanned = true); - Get.back(); // close scanner page - controller.processScannedQRCode(barcode.rawValue!); - break; - } - } - }, - ), - Center( - child: Container( - width: 250, - height: 250, - decoration: BoxDecoration( - border: Border.all(color: AppColor.primaryColor, width: 3), - borderRadius: BorderRadius.circular(12), - ), - ), - ), - Positioned( - bottom: 50, - left: 0, - right: 0, - child: Center( - child: Text( - "Align QR Code within the frame".tr, - style: const TextStyle(color: Colors.white, fontSize: 16), - ), - ), - ), - ], - ), - ); - } -} diff --git a/siro_rider/lib/views/home/HomePage/share_app_page.dart b/siro_rider/lib/views/home/HomePage/share_app_page.dart index 36e99cb..66f064e 100644 --- a/siro_rider/lib/views/home/HomePage/share_app_page.dart +++ b/siro_rider/lib/views/home/HomePage/share_app_page.dart @@ -7,8 +7,6 @@ import '../../../constant/links.dart'; import '../../../constant/style.dart'; import '../../../controller/home/profile/invit_controller.dart'; import '../../../controller/home/profile/invites_rewards_controller.dart'; -import 'package:qr_flutter/qr_flutter.dart'; -import 'qr_scanner_page.dart'; import '../../../print.dart'; class ShareAppPage extends StatelessWidget { @@ -48,12 +46,6 @@ class ShareAppPage extends StatelessWidget { }, ), ), - floatingActionButton: FloatingActionButton.extended( - backgroundColor: AppColor.primaryColor, - onPressed: () => Get.to(() => QRScannerPage()), - icon: const Icon(CupertinoIcons.qrcode_viewfinder, color: Colors.white), - label: Text("Scan QR".tr, style: const TextStyle(color: Colors.white)), - ), ); } @@ -61,8 +53,6 @@ class ShareAppPage extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - _buildQRCodeSection(), - const SizedBox(height: 20), Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( @@ -603,51 +593,7 @@ class ShareAppPage extends StatelessWidget { // ); } - Widget _buildQRCodeSection() { - return GetBuilder( - builder: (rewardsController) { - if (rewardsController.isLoading) { - return const Center(child: CupertinoActivityIndicator()); - } - String qrData = - 'https://${AppLink.appDomain}/?inviteCode=${rewardsController.referralCode ?? ''}'; - return Center( - child: Column( - children: [ - Text("Your QR Code".tr, - style: const TextStyle( - fontSize: 18, fontWeight: FontWeight.bold)), - const SizedBox(height: 10), - if (rewardsController.referralCode != null) - Container( - padding: const EdgeInsets.all(12), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(16), - ), - child: QrImageView( - data: qrData, - version: QrVersions.auto, - size: 200.0, - backgroundColor: Colors.white, - ), - ), - const SizedBox(height: 10), - if (rewardsController.referralCode != null) - Text( - rewardsController.referralCode!, - style: const TextStyle( - fontSize: 24, - fontWeight: FontWeight.bold, - letterSpacing: 2), - ), - ], - ), - ); - }, - ); - } Widget _buildUnifiedRewardsList() { return GetBuilder( diff --git a/siro_rider/lib/views/widgets/error_snakbar.dart b/siro_rider/lib/views/widgets/error_snakbar.dart index 8016844..fe71597 100644 --- a/siro_rider/lib/views/widgets/error_snakbar.dart +++ b/siro_rider/lib/views/widgets/error_snakbar.dart @@ -240,53 +240,65 @@ class _SnackContentState extends State<_SnackContent> // ───────────────────────────────────────────────────────────────────────────── // Internal dispatcher — single source of truth // ───────────────────────────────────────────────────────────────────────────── -SnackbarController _show(_SnackVariant variant, String message) { - // Dismiss any existing snackbar first (no stacking) - if (Get.isSnackbarOpen) Get.closeCurrentSnackbar(); - - switch (variant.haptic) { - case HapticFeedbackType.light: - HapticFeedback.lightImpact(); - case HapticFeedbackType.medium: - HapticFeedback.mediumImpact(); - case HapticFeedbackType.selection: - HapticFeedback.selectionClick(); +SnackbarController? _show(_SnackVariant variant, String message) { + // Prevent crash if Navigator or Overlay context is not yet initialized at early startup + if (Get.context == null || Get.overlayContext == null) { + debugPrint("⚠️ Cannot show snackbar: Overlay/Navigator is not ready yet. Message: $message"); + return null; } - return Get.snackbar( - '', - '', - snackPosition: SnackPosition.TOP, - backgroundColor: Colors.transparent, - margin: EdgeInsets.zero, - padding: EdgeInsets.zero, - duration: const Duration(seconds: 4), - animationDuration: const Duration(milliseconds: 380), - barBlur: 0, - overlayBlur: 0, - overlayColor: Colors.transparent, - isDismissible: true, - dismissDirection: DismissDirection.up, - forwardAnimationCurve: Curves.easeOutCubic, - reverseAnimationCurve: Curves.easeInCubic, - snackStyle: SnackStyle.FLOATING, - userInputForm: Form( - child: _SnackContent(message: message, variant: variant), - ), - ); + try { + // Dismiss any existing snackbar first (no stacking) + if (Get.isSnackbarOpen) Get.closeCurrentSnackbar(); + + switch (variant.haptic) { + case HapticFeedbackType.light: + HapticFeedback.lightImpact(); + case HapticFeedbackType.medium: + HapticFeedback.mediumImpact(); + case HapticFeedbackType.selection: + HapticFeedback.selectionClick(); + } + + return Get.snackbar( + '', + '', + snackPosition: SnackPosition.TOP, + backgroundColor: Colors.transparent, + margin: EdgeInsets.zero, + padding: EdgeInsets.zero, + duration: const Duration(seconds: 4), + animationDuration: const Duration(milliseconds: 380), + barBlur: 0, + overlayBlur: 0, + overlayColor: Colors.transparent, + isDismissible: true, + dismissDirection: DismissDirection.up, + forwardAnimationCurve: Curves.easeOutCubic, + reverseAnimationCurve: Curves.easeInCubic, + snackStyle: SnackStyle.FLOATING, + userInputForm: Form( + child: _SnackContent(message: message, variant: variant), + ), + ); + } catch (e) { + debugPrint("⚠️ Exception caught showing snackbar: $e"); + return null; + } } // ───────────────────────────────────────────────────────────────────────────── // Public API — drop-in replacements for the old functions // ───────────────────────────────────────────────────────────────────────────── -SnackbarController mySnackbarSuccess(String message) => +SnackbarController? mySnackbarSuccess(String message) => _show(_SnackVariant.success, message); -SnackbarController mySnackeBarError(String message) => +SnackbarController? mySnackeBarError(String message) => _show(_SnackVariant.error, message); -SnackbarController mySnackbarInfo(String message) => +SnackbarController? mySnackbarInfo(String message) => _show(_SnackVariant.info, message); -SnackbarController mySnackbarWarning(String message) => +SnackbarController? mySnackbarWarning(String message) => _show(_SnackVariant.warning, message); + diff --git a/siro_rider/macos/Flutter/GeneratedPluginRegistrant.swift b/siro_rider/macos/Flutter/GeneratedPluginRegistrant.swift index 099eacc..bd1cc9e 100644 --- a/siro_rider/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/siro_rider/macos/Flutter/GeneratedPluginRegistrant.swift @@ -22,7 +22,6 @@ import geolocator_apple import just_audio import local_auth_darwin import location -import mobile_scanner import package_info_plus import record_macos import share_plus @@ -51,7 +50,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin")) LocalAuthPlugin.register(with: registry.registrar(forPlugin: "LocalAuthPlugin")) LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin")) - MobileScannerPlugin.register(with: registry.registrar(forPlugin: "MobileScannerPlugin")) FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin")) RecordMacOsPlugin.register(with: registry.registrar(forPlugin: "RecordMacOsPlugin")) SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin")) diff --git a/siro_rider/macos/Runner.xcodeproj/project.pbxproj b/siro_rider/macos/Runner.xcodeproj/project.pbxproj index 099ce91..e390b12 100644 --- a/siro_rider/macos/Runner.xcodeproj/project.pbxproj +++ b/siro_rider/macos/Runner.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 16396FA43926BDE6F011EC7C /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 37E101A228C86107D9AA7AE3 /* GoogleService-Info.plist */; }; 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; @@ -64,7 +65,7 @@ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* siro_rider.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "siro_rider.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* siro_rider.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = siro_rider.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -76,6 +77,7 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 37E101A228C86107D9AA7AE3 /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; /* End PBXFileReference section */ @@ -125,6 +127,7 @@ 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 37E101A228C86107D9AA7AE3 /* GoogleService-Info.plist */, ); sourceTree = ""; }; @@ -285,6 +288,7 @@ files = ( 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + 16396FA43926BDE6F011EC7C /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/siro_rider/macos/Runner/GoogleService-Info.plist b/siro_rider/macos/Runner/GoogleService-Info.plist new file mode 100644 index 0000000..8601dcc --- /dev/null +++ b/siro_rider/macos/Runner/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyDk6x6KZUY0IQtxoCMXX0F7N_yik8O19eA + GCM_SENDER_ID + 825988584191 + PLIST_VERSION + 1 + BUNDLE_ID + com.siro.siroRider + PROJECT_ID + siro-a6957 + STORAGE_BUCKET + siro-a6957.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:825988584191:ios:7b48f585862d5cfc1632ca + + \ No newline at end of file diff --git a/siro_rider/pubspec.lock b/siro_rider/pubspec.lock index 73284d3..ad5c5a1 100644 --- a/siro_rider/pubspec.lock +++ b/siro_rider/pubspec.lock @@ -340,10 +340,10 @@ packages: dependency: "direct main" description: name: device_info_plus - sha256: b4fed1b2835da9d670d7bed7db79ae2a94b0f5ad6312268158a9b5479abbacdd + sha256: "4df8babf73058181227e18b08e6ea3520cf5fc5d796888d33b7cb0f33f984b7c" url: "https://pub.dev" source: hosted - version: "12.4.0" + version: "12.3.0" device_info_plus_platform_interface: dependency: transitive description: @@ -1333,14 +1333,6 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.0" - mobile_scanner: - dependency: "direct main" - description: - name: mobile_scanner - sha256: d234581c090526676fd8fab4ada92f35c6746e3fb4f05a399665d75a399fb760 - url: "https://pub.dev" - source: hosted - version: "5.2.3" nested: dependency: transitive description: @@ -1581,22 +1573,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.5.0" - qr: - dependency: transitive - description: - name: qr - sha256: "5a1d2586170e172b8a8c8470bbbffd5eb0cd38a66c0d77155ea138d3af3a4445" - url: "https://pub.dev" - source: hosted - version: "3.0.2" - qr_flutter: - dependency: "direct main" - description: - name: qr_flutter - sha256: "5095f0fc6e3f71d08adef8feccc8cea4f12eec18a2e31c2e8d82cb6019f4b097" - url: "https://pub.dev" - source: hosted - version: "4.1.0" quick_actions: dependency: "direct main" description: diff --git a/siro_rider/pubspec.yaml b/siro_rider/pubspec.yaml index f002941..e68f380 100644 --- a/siro_rider/pubspec.yaml +++ b/siro_rider/pubspec.yaml @@ -61,7 +61,7 @@ dependencies: # share: ^2.0.4 sign_in_with_apple: ^7.0.1 firebase_auth: ^6.1.4 - device_info_plus: ^12.1.0 + device_info_plus: 12.3.0 # uni_links: ^0.5.1 flutter_confetti: ^0.5.1 # intl_phone_field: ^3.1.0 @@ -82,10 +82,9 @@ dependencies: app_links: ^7.0.0 intaleq_maps: ^2.2.0 socket_io_client: 1.0.2 - mobile_scanner: ^5.2.3 - qr_flutter: ^4.1.0 # home_widget: ^0.7.0+1 + dev_dependencies: flutter_test: sdk: flutter diff --git a/siromove.com/invite.php b/siromove.com/invite.php new file mode 100644 index 0000000..24df798 --- /dev/null +++ b/siromove.com/invite.php @@ -0,0 +1,86 @@ + [ + 'ios_store' => 'https://apps.apple.com/st/app/siro-rider/id6748075179', + 'android_store' => 'https://play.google.com/store/apps/details?id=com.Siro.siro' + ], + 'driver' => [ + 'ios_store' => 'https://apps.apple.com/st/app/siro-driver/id6482995159', + 'android_store' => 'https://play.google.com/store/apps/details?id=com.siro_driver' + ] +]; + +$code = htmlspecialchars($_GET['code'] ?? '', ENT_QUOTES, 'UTF-8'); +$appType = ($_GET['app'] ?? 'rider') === 'driver' ? 'driver' : 'rider'; +$appConfig = $config[$appType]; + +// 2. Helper Functions +function getVisitorCountry() { + if (!empty($_SERVER['HTTP_CF_IPCOUNTRY'])) { + return strtoupper($_SERVER['HTTP_CF_IPCOUNTRY']); + } + + if (session_status() === PHP_SESSION_NONE) { + session_start(); + } + if (!empty($_SESSION['visitor_country'])) { + return $_SESSION['visitor_country']; + } + + $ip = $_SERVER['REMOTE_ADDR']; + if ($ip === '127.0.0.1' || $ip === '::1' || filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false) { + return 'JO'; // Default Jordan + } + + try { + $ctx = stream_context_create(['http' => ['timeout' => 2]]); + $apiResponse = @file_get_contents("http://ip-api.com/json/{$ip}", false, $ctx); + if ($apiResponse) { + $data = json_decode($apiResponse, true); + if (!empty($data['countryCode'])) { + $_SESSION['visitor_country'] = strtoupper($data['countryCode']); + return $_SESSION['visitor_country']; + } + } + } catch (Exception $e) { + // Fallback + } + return 'JO'; +} + +function getDeviceOS() { + $userAgent = strtolower($_SERVER['HTTP_USER_AGENT'] ?? ''); + if (strpos($userAgent, 'iphone') !== false || strpos($userAgent, 'ipad') !== false || strpos($userAgent, 'ipod') !== false) { + return 'ios'; + } + if (strpos($userAgent, 'android') !== false) { + return 'android'; + } + return 'desktop'; +} + +$country = getVisitorCountry(); +$os = getDeviceOS(); + +// 3. Fallback Handoff for Syrian Users +if ($country === 'SY') { + header("Location: https://siromove.com/inviteSyria.php?code=" . urlencode($code) . "&app=" . urlencode($appType)); + exit; +} + +// 4. One-Click Instant Redirection (Jordan / Egypt / others) +if ($os === 'ios') { + header("Location: " . $appConfig['ios_store']); + exit; +} else { + // Android or Desktop default + header("Location: " . $appConfig['android_store']); + exit; +} +?> diff --git a/siromove.com/inviteSyria.php b/siromove.com/inviteSyria.php new file mode 100644 index 0000000..2c937e6 --- /dev/null +++ b/siromove.com/inviteSyria.php @@ -0,0 +1,351 @@ + [ + 'ios_store' => 'https://apps.apple.com/st/app/siro-rider/id6748075179', + 'android_store' => 'https://play.google.com/store/apps/details?id=com.Siro.siro', + 'direct_apk' => 'https://api-syria.siromove.com/downloads/siro_rider.apk', + 'app_name' => 'Siro Rider', + 'app_name_ar' => 'سيرو الراكب' + ], + 'driver' => [ + 'ios_store' => 'https://apps.apple.com/st/app/siro-driver/id6482995159', + 'android_store' => 'https://play.google.com/store/apps/details?id=com.siro_driver', + 'direct_apk' => 'https://api-syria.siromove.com/downloads/siro_driver.apk', + 'app_name' => 'Siro Driver', + 'app_name_ar' => 'سيرو الكابتن' + ] +]; + +$code = htmlspecialchars($_GET['code'] ?? '', ENT_QUOTES, 'UTF-8'); +$appType = ($_GET['app'] ?? 'rider') === 'driver' ? 'driver' : 'rider'; +$appConfig = $config[$appType]; +?> + + + + + + تحميل تطبيق <?php echo $appConfig['app_name_ar']; ?> + + + + + + + + + + + + + + +
+
+
+
+ + +
+ +
+ + +
+ + +
+

+ SIRO +

+

مرحباً بك في سيرو

+

+ تمت دعوتك للانضمام إلى منصة التوصيل الأسرع والأوفر. يرجى اتباع التعليمات بالأسفل لتحميل التطبيق. +

+ + + +
+ + + +
+ كود الإحالة الخاص بك + + + +
+ + + +
+ + +
+
+ المتجر الرسمي +

🔒 متجر التطبيقات محظور

+
+

+ نظراً للقيود الجغرافية، يرجى تفعيل تطبيق الـ VPN على هاتفك أولاً، ثم الضغط على الزر بالأسفل للانتقال لصفحة التحميل الرسمية على متجر آبل. +

+ + + + التحميل من App Store + +
+ + +
+
+ ✅ لا يحتاج VPN +

🚀 تحميل مباشر (APK) - بدون VPN

+
+

+ يمكنك تحميل وتثبيت التطبيق مباشرة كملف تثبيت أندرويد دون الحاجة لمتجر جوجل بلاي أو تفعيل VPN. +

+ + + + تحميل تطبيق APK مباشرة + +
+ + +
+
+ ⚠️ قد يحتاج VPN +

🤖 التحميل من Google Play

+
+

+ إذا كنت تستخدم شبكة VPN نشطة على جهازك، يمكنك التحميل من متجر جوجل بلاي الرسمي. +

+ + + + التحميل من Google Play + +
+ +
+ +
+ حقوق النشر © سيرو. جميع الحقوق محفوظة. +
+
+ + + + +