8/31/1
This commit is contained in:
14
.env
14
.env
@@ -19,6 +19,20 @@ seferAlexandriaServer=https://seferalexandria.site/sefer
|
|||||||
seferPaymentServer=https://seferpw.shop/sefer
|
seferPaymentServer=https://seferpw.shop/sefer
|
||||||
seferCairoServer=https://sefer.click/sefer
|
seferCairoServer=https://sefer.click/sefer
|
||||||
seferGizaServer=https://sefergiza.site/sefer
|
seferGizaServer=https://sefergiza.site/sefer
|
||||||
|
privateKeyFCM='''{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''
|
||||||
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
|
cohere=Aulwd8y5SPWos0hJhG0toUf8gOhUUrpf5Q2TPmVGXrXlBl
|
||||||
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
|
claudeAiAPI=zg-qbc-qvo39-xWOxIGwWTOzCFBnIYSKKhfyz_KVAvrH-6_4ZEJL68G_QBH26oeTOMMoQug9KuOjjKSP_A4S3SUDlbxR9duVzoQ-MkX_UQQQXrXlBl
|
||||||
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
|
payPalClientId=QALymfNI5Tzt4s-ysoz6vD4_nqX0SUtkC_qYV-Ugk5gaM_8Z-kg4L53k8Uux_4jEWXDkNpXGSWPpIzDFXrXlBl
|
||||||
|
|||||||
@@ -54,8 +54,8 @@ android {
|
|||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||||
minSdk = 23
|
minSdk = 23
|
||||||
targetSdk = flutter.targetSdkVersion
|
targetSdk = flutter.targetSdkVersion
|
||||||
versionCode = 77
|
versionCode = 79
|
||||||
versionName = '1.5.77'
|
versionName = '1.5.79'
|
||||||
multiDexEnabled =true
|
multiDexEnabled =true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>56</string>
|
<string>57</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>4.0.56</string>
|
<string>4.0.57</string>
|
||||||
<key>FirebaseAppDelegateProxyEnabled</key>
|
<key>FirebaseAppDelegateProxyEnabled</key>
|
||||||
<string>NO</string>
|
<string>NO</string>
|
||||||
<key>GMSApiKey</key>
|
<key>GMSApiKey</key>
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ class AppLink {
|
|||||||
static final String seferCairoServer = Env.seferCairoServer;
|
static final String seferCairoServer = Env.seferCairoServer;
|
||||||
static final String seferGizaServer = Env.seferGizaServer;
|
static final String seferGizaServer = Env.seferGizaServer;
|
||||||
|
|
||||||
static final String endPoint = box.read(BoxName.serverChosen);
|
static final String endPoint =
|
||||||
static final String server = Env.seferCairoServer;
|
box.read(BoxName.serverChosen) ?? Env.seferCairoServer;
|
||||||
|
static final String server = seferCairoServer;
|
||||||
// static final String server = Env.serverPHP;
|
// static final String server = Env.serverPHP;
|
||||||
|
|
||||||
static String googleMapsLink = 'https://maps.googleapis.com/maps/api/';
|
static String googleMapsLink = 'https://maps.googleapis.com/maps/api/';
|
||||||
@@ -204,7 +205,7 @@ class AppLink {
|
|||||||
static String uploadEgypt = "$server/uploadEgypt.php";
|
static String uploadEgypt = "$server/uploadEgypt.php";
|
||||||
|
|
||||||
//==================certifcate==========
|
//==================certifcate==========
|
||||||
static String location = '$server/ride/location';
|
static String location = '$endPoint/ride/location';
|
||||||
static String getCarsLocationByPassenger = "$location/get.php";
|
static String getCarsLocationByPassenger = "$location/get.php";
|
||||||
static String addpassengerLocation = "$location/addpassengerLocation.php";
|
static String addpassengerLocation = "$location/addpassengerLocation.php";
|
||||||
static String getLatestLocationPassenger =
|
static String getLatestLocationPassenger =
|
||||||
@@ -214,8 +215,7 @@ class AppLink {
|
|||||||
static String getDriverCarsLocationToPassengerAfterApplied =
|
static String getDriverCarsLocationToPassengerAfterApplied =
|
||||||
"$location/getDriverCarsLocationToPassengerAfterApplied.php";
|
"$location/getDriverCarsLocationToPassengerAfterApplied.php";
|
||||||
static String addCarsLocationByPassenger = "$location/add.php";
|
static String addCarsLocationByPassenger = "$location/add.php";
|
||||||
static String addCarsLocationGizaEndpoint =
|
static String addCarsLocationGizaEndpoint = "$location/add.php";
|
||||||
"https://sefergiza.site/archive%20(1)/add.php";
|
|
||||||
static String addCarsLocationAlexandriaEndpoint = "$location/add.php";
|
static String addCarsLocationAlexandriaEndpoint = "$location/add.php";
|
||||||
static String addCarsLocationCairoEndpoint = "$location/add.php";
|
static String addCarsLocationCairoEndpoint = "$location/add.php";
|
||||||
static String deleteCarsLocationByPassenger = "$location/delete.php";
|
static String deleteCarsLocationByPassenger = "$location/delete.php";
|
||||||
|
|||||||
53
lib/controller/firebase/access_token.dart
Normal file
53
lib/controller/firebase/access_token.dart
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
import 'dart:convert';
|
||||||
|
import 'package:googleapis_auth/auth_io.dart';
|
||||||
|
|
||||||
|
import '../../print.dart';
|
||||||
|
|
||||||
|
class AccessTokenManager {
|
||||||
|
static final AccessTokenManager _instance = AccessTokenManager._internal();
|
||||||
|
late final String serviceAccountJsonKey;
|
||||||
|
AccessToken? _accessToken;
|
||||||
|
DateTime? _expiryDate;
|
||||||
|
|
||||||
|
AccessTokenManager._internal();
|
||||||
|
|
||||||
|
factory AccessTokenManager(String jsonKey) {
|
||||||
|
if (_instance._isServiceAccountKeyInitialized()) {
|
||||||
|
// Prevent re-initialization
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
_instance.serviceAccountJsonKey = jsonKey;
|
||||||
|
return _instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _isServiceAccountKeyInitialized() {
|
||||||
|
try {
|
||||||
|
serviceAccountJsonKey; // Access to check if initialized
|
||||||
|
return true;
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> getAccessToken() async {
|
||||||
|
if (_accessToken != null && DateTime.now().isBefore(_expiryDate!)) {
|
||||||
|
return _accessToken!.data;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
final serviceAccountCredentials = ServiceAccountCredentials.fromJson(
|
||||||
|
json.decode(serviceAccountJsonKey));
|
||||||
|
final client = await clientViaServiceAccount(
|
||||||
|
serviceAccountCredentials,
|
||||||
|
['https://www.googleapis.com/auth/firebase.messaging'],
|
||||||
|
);
|
||||||
|
|
||||||
|
_accessToken = client.credentials.accessToken;
|
||||||
|
_expiryDate = client.credentials.accessToken.expiry;
|
||||||
|
client.close();
|
||||||
|
Log.print('_accessToken!.data: ${_accessToken!.data}');
|
||||||
|
return _accessToken!.data;
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Failed to obtain access token');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
||||||
|
import 'package:SEFER/env/env.dart';
|
||||||
import 'package:SEFER/views/widgets/mydialoug.dart';
|
import 'package:SEFER/views/widgets/mydialoug.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@@ -19,6 +20,7 @@ import '../../views/home/Captin/orderCaptin/order_speed_request.dart';
|
|||||||
import '../../views/home/Captin/orderCaptin/order_request_page.dart';
|
import '../../views/home/Captin/orderCaptin/order_request_page.dart';
|
||||||
import '../auth/google_sign.dart';
|
import '../auth/google_sign.dart';
|
||||||
import '../functions/face_detect.dart';
|
import '../functions/face_detect.dart';
|
||||||
|
import 'access_token.dart';
|
||||||
import 'local_notification.dart';
|
import 'local_notification.dart';
|
||||||
|
|
||||||
class FirebaseMessagesController extends GetxController {
|
class FirebaseMessagesController extends GetxController {
|
||||||
@@ -439,11 +441,35 @@ class FirebaseMessagesController extends GetxController {
|
|||||||
// box.write(BoxName.tokens, tokens);
|
// box.write(BoxName.tokens, tokens);
|
||||||
tokens = box.read(BoxName.tokens);
|
tokens = box.read(BoxName.tokens);
|
||||||
for (var i = 0; i < tokens.length; i++) {
|
for (var i = 0; i < tokens.length; i++) {
|
||||||
http
|
String serviceAccountKeyJson = '''{
|
||||||
.post(Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''; // As defined above
|
||||||
|
|
||||||
|
// Initialize AccessTokenManager
|
||||||
|
final accessTokenManager = AccessTokenManager(serviceAccountKeyJson);
|
||||||
|
|
||||||
|
// Obtain an OAuth 2.0 access token
|
||||||
|
final accessToken = await accessTokenManager.getAccessToken();
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
|
final response = await http
|
||||||
|
.post(
|
||||||
|
Uri.parse(
|
||||||
|
'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'),
|
||||||
headers: <String, String>{
|
headers: <String, String>{
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'key=${AK.serverAPI}'
|
'Authorization': 'Bearer $accessToken',
|
||||||
},
|
},
|
||||||
body: jsonEncode({
|
body: jsonEncode({
|
||||||
'notification': <String, dynamic>{
|
'notification': <String, dynamic>{
|
||||||
@@ -494,11 +520,34 @@ class FirebaseMessagesController extends GetxController {
|
|||||||
void sendNotificationToPassengerToken(
|
void sendNotificationToPassengerToken(
|
||||||
String title, body, token, List<String> map, String tone) async {
|
String title, body, token, List<String> map, String tone) async {
|
||||||
try {
|
try {
|
||||||
|
String serviceAccountKeyJson = '''{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''; // As defined above
|
||||||
|
|
||||||
|
// Initialize AccessTokenManager
|
||||||
|
final accessTokenManager = AccessTokenManager(serviceAccountKeyJson);
|
||||||
|
|
||||||
|
// Obtain an OAuth 2.0 access token
|
||||||
|
final accessToken = await accessTokenManager.getAccessToken();
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
final response = await http.post(
|
final response = await http.post(
|
||||||
Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
Uri.parse(
|
||||||
|
'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'),
|
||||||
headers: <String, String>{
|
headers: <String, String>{
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'key=${AK.serverAPI}'
|
'Authorization': 'Bearer $accessToken',
|
||||||
},
|
},
|
||||||
body: jsonEncode({
|
body: jsonEncode({
|
||||||
'notification': <String, dynamic>{
|
'notification': <String, dynamic>{
|
||||||
@@ -528,116 +577,250 @@ class FirebaseMessagesController extends GetxController {
|
|||||||
void sendNotificationToPassengerTokenCALL(
|
void sendNotificationToPassengerTokenCALL(
|
||||||
String title, body, token, List<String> map) async {
|
String title, body, token, List<String> map) async {
|
||||||
try {
|
try {
|
||||||
|
String serviceAccountKeyJson = '''{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''; // As defined above
|
||||||
|
|
||||||
|
// Initialize AccessTokenManager
|
||||||
|
final accessTokenManager = AccessTokenManager(serviceAccountKeyJson);
|
||||||
|
|
||||||
|
// Obtain an OAuth 2.0 access token
|
||||||
|
final accessToken = await accessTokenManager.getAccessToken();
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
final response = await http.post(
|
final response = await http.post(
|
||||||
Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
Uri.parse(
|
||||||
|
'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'),
|
||||||
headers: <String, String>{
|
headers: <String, String>{
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'key=${AK.serverAPI}'
|
'Authorization': 'Bearer $accessToken',
|
||||||
},
|
},
|
||||||
body: jsonEncode({
|
body: jsonEncode({
|
||||||
'notification': <String, dynamic>{
|
'message': {
|
||||||
|
'token': token,
|
||||||
|
'notification': {
|
||||||
'title': title,
|
'title': title,
|
||||||
'body': body,
|
'body': body,
|
||||||
'sound': 'iphone_ringtone.wav'
|
|
||||||
},
|
},
|
||||||
'data': {
|
'data': {
|
||||||
'passengerList': map,
|
'passengerList': jsonEncode(map),
|
||||||
|
},
|
||||||
|
'android': {
|
||||||
|
'notification': {
|
||||||
|
'sound': 'iphone_ringtone.wav',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'apns': {
|
||||||
|
'payload': {
|
||||||
|
'aps': {
|
||||||
|
'sound': 'iphone_ringtone.wav',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'priority': 'high',
|
|
||||||
'to': token,
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
// Notification sent successfully
|
print(
|
||||||
|
'Notification sent successfully. Status code: ${response.statusCode}');
|
||||||
|
print('Response body: ${response.body}');
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
print(
|
||||||
'Failed to send notification. Status code: ${response.statusCode}';
|
'Failed to send notification. Status code: ${response.statusCode}');
|
||||||
|
print('Response body: ${response.body}');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Handle other exceptions
|
print('Error sending notification: $e');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendNotificationToAnyWithoutData(
|
void sendNotificationToAnyWithoutData(
|
||||||
String title, String body, String token, String tone) async {
|
String title, String body, String token, String tone) async {
|
||||||
try {
|
try {
|
||||||
|
String serviceAccountKeyJson = '''{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''; // As defined above
|
||||||
|
|
||||||
|
// Initialize AccessTokenManager
|
||||||
|
final accessTokenManager = AccessTokenManager(serviceAccountKeyJson);
|
||||||
|
|
||||||
|
// Obtain an OAuth 2.0 access token
|
||||||
|
final accessToken = await accessTokenManager.getAccessToken();
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
final response = await http.post(
|
final response = await http.post(
|
||||||
Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
Uri.parse(
|
||||||
|
'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'),
|
||||||
headers: <String, String>{
|
headers: <String, String>{
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'key=${AK.serverAPI}'
|
'Authorization': 'Bearer $accessToken',
|
||||||
},
|
},
|
||||||
body: jsonEncode({
|
body: jsonEncode({
|
||||||
'notification': <String, dynamic>{
|
'message': {
|
||||||
|
'token': token,
|
||||||
|
'notification': {
|
||||||
'title': title,
|
'title': title,
|
||||||
'body': body,
|
'body': body,
|
||||||
'sound': tone
|
|
||||||
},
|
},
|
||||||
'data': <String, dynamic>{
|
'data': {
|
||||||
'click_action': 'FLUTTER_NOTIFICATION_CLICK',
|
'DriverList': jsonEncode([]),
|
||||||
'id': '1',
|
},
|
||||||
'status': 'done'
|
'android': {
|
||||||
|
'notification': {
|
||||||
|
'sound': tone,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'apns': {
|
||||||
|
'payload': {
|
||||||
|
'aps': {
|
||||||
|
'sound': tone,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'priority': 'high',
|
|
||||||
'to': token,
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
// Notification sent successfully
|
print(
|
||||||
|
'Notification sent successfully. Status code: ${response.statusCode}');
|
||||||
|
print('Response body: ${response.body}');
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
print(
|
||||||
'Failed to send notification. Status code: ${response.statusCode}';
|
'Failed to send notification. Status code: ${response.statusCode}');
|
||||||
|
print('Response body: ${response.body}');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Handle other exceptions
|
print('Error sending notification: $e');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendNotificationToDriverMAP(String title, String body, String token,
|
void sendNotificationToDriverMAP(String title, String body, String token,
|
||||||
List<String> data, String tone) async {
|
List<String> data, String tone) async {
|
||||||
try {
|
try {
|
||||||
|
String serviceAccountKeyJson = '''{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''; // As defined above
|
||||||
|
|
||||||
|
// Initialize AccessTokenManager
|
||||||
|
final accessTokenManager = AccessTokenManager(serviceAccountKeyJson);
|
||||||
|
|
||||||
|
// Obtain an OAuth 2.0 access token
|
||||||
|
final accessToken = await accessTokenManager.getAccessToken();
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
final response = await http.post(
|
final response = await http.post(
|
||||||
Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
Uri.parse(
|
||||||
|
'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'),
|
||||||
headers: <String, String>{
|
headers: <String, String>{
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'key=${AK.serverAPI}'
|
'Authorization': 'Bearer $accessToken',
|
||||||
},
|
},
|
||||||
body: jsonEncode({
|
body: jsonEncode({
|
||||||
'notification': <String, dynamic>{
|
'message': {
|
||||||
|
'token': token,
|
||||||
|
'notification': {
|
||||||
'title': title,
|
'title': title,
|
||||||
'body': body,
|
'body': body,
|
||||||
// 'sound': 'tone2.wav',
|
|
||||||
'sound': tone
|
|
||||||
},
|
},
|
||||||
'data': {
|
'data': {
|
||||||
'DriverList': data,
|
'DriverList': jsonEncode(data),
|
||||||
|
},
|
||||||
|
'android': {
|
||||||
|
'notification': {
|
||||||
|
'sound': tone,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
'apns': {
|
||||||
|
'payload': {
|
||||||
|
'aps': {
|
||||||
|
'sound': tone,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
'priority': 'high',
|
|
||||||
'to': token,
|
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
if (response.statusCode == 200) {
|
if (response.statusCode == 200) {
|
||||||
// Notification sent successfully
|
print(
|
||||||
|
'Notification sent successfully. Status code: ${response.statusCode}');
|
||||||
|
print('Response body: ${response.body}');
|
||||||
} else {
|
} else {
|
||||||
// Handle error response
|
print(
|
||||||
'Failed to send notification. Status code: ${response.statusCode}';
|
'Failed to send notification. Status code: ${response.statusCode}');
|
||||||
|
print('Response body: ${response.body}');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Handle other exceptions
|
print('Error sending notification: $e');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendNotificationToDriverMapPolyline(String title, String body,
|
void sendNotificationToDriverMapPolyline(String title, String body,
|
||||||
String token, List<String> data, String polylineJson) async {
|
String token, List<String> data, String polylineJson) async {
|
||||||
try {
|
try {
|
||||||
|
String serviceAccountKeyJson = '''{
|
||||||
|
"type": "service_account",
|
||||||
|
"project_id": "ride-b1bd8",
|
||||||
|
"private_key_id": "75e817c0b902db2ef35edf2c2bd159dec1f13249",
|
||||||
|
"private_key": "-----BEGIN PRIVATE KEY-----\\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQD0zH9TQGDQHUv3\\na3/JAD1UKPwAp3wNKT0a6fxiIzjI3JxQWI30QvZCcfl6CdMhIcydX1ncSaYTcEeC\\n/AdPVCPkqyJx1YIGGg6P/mRzCWeaN8fsp6z250m5vcObDCZc3dbJEkepbep+6FPY\\n21m3KO+AHh1glgsTGZOTm5xiU8NGXpdk2QEh8wpiIIlR/HuKwVw9g8urNe3Sno+U\\nDm3z37iFqvZdmpqO8aWTJu6beb3hsREK9XK2I9JqC2JUwiGQRo3idOvPP6hkqrWx\\nKSX96vglQFYfakvJdDp2ZATOlpBYPMtS/IWhJ985u58TSS+Kl8qpnpaZBSxgJirf\\nhWzhnKLfAgMBAAECggEAJP785SePGhS7ZN6ltspm+l+hSjYFrPWFCxq+rlQ1YkHZ\\nC9l+RqKSFhOkiPmQI2s4wbXl3kFxLHHlFNoi/q2wKQBmGb8TQfnRJpjjNHGA61Ev\\n0Ue7/6qPvVb9B2MsLw/FxKiTFPuMG3bgKR9pbSFuJLYoaW7zqITOhVnYphGTqwAY\\nBVVcvISSLvELDmH9VZcv/9DVqVlqbbESHWh1Z4W6XGPoEqeDH/upNTyQQ/46Msgm\\nTGE6VqLHpWuSf6SqHp+r0Y0lI3vIPM1vz5FAJDJbOE/enHa0fSup0OHSMxl0HVMn\\nnO1yrGF3vsIPOej5HKr5d71bEIckzk73/yjNC1/mDQKBgQD7RtUvc9omsSsFMJ6e\\nBASAn6Dktx/QY/XNJjFzHQj69cywLDe5t5AL2gUi3phQ2oqB5XJdwnd5bTIEPEPZ\\nDOuOai2802p6FJk6kjmZAMVGx5JtXBH+vs6jrmQQSMiKbjwN1TT6xIWakvLOonUi\\nX6ZvjYYjU/E0YJU3jSiXWEr76wKBgQD5Zn4SouJ6BCDZMbausJVMBkk3qxsYooip\\np89WakC6e7AZinpkRcqjGGV9GOvc8crJs6fyXAA9ORepGP47Mc0ZrDssOkstznsM\\npr8R0S6MKwEZaT9ixOHdOcLZ47ps+JzA2Wr4KN2OvFHksUkB/46ATD1j9WZVgB8M\\namsYp/Y73QKBgHOo+PvsoZ9psVmkNX6abtAdqdtdB0HOoRea2uwXk0ig12TIFaZg\\nfedWpUKVnxqoXVTJHklV99RmlL0qWDiSH+LfsMnXro0e6iDxqZ1po2Se/CFmXcoa\\nXdctsFVmixhdATuExewfhTfPKABA+xWlXWC/jdy5CK+JPWXijaqMM4edAoGAE5Bj\\nsWiPpYyvWvpYX0nA3G7dzX0hqgQN/mkIjbnWDArp3IcNZNJIvBSM2Yxb7EAXbU0n\\njo6DAkp5Pa2VO+WDNlFZbvW/sf8xjeOCt44WPa6d7nVgIIpbQXRngZoopKW3/jTP\\n/FmQT8McFXmGxZ5belsAsdetSGW9icbLUerTGQ0CgYEAmf/G8Ag3XxmqTXvvHuv2\\n14OP7WnrVqkEMnydrftEwn4peXd/Lz+/GYX5Zc4ZoNgbN8IvZ5z0+OmRsallsbiW\\nBw0/tc68CjzxXOvReWxDluUopqWVGj5tlGqE5xUDku9SWJSxbkiQ3rqutzBdPXpr\\noqHwPyDrmK/Zgqn+uiIm4Ck=\\n-----END PRIVATE KEY-----\\n",
|
||||||
|
"client_email": "firebase-adminsdk-o2wqi@ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"client_id": "111210077025005706623",
|
||||||
|
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
|
||||||
|
"token_uri": "https://oauth2.googleapis.com/token",
|
||||||
|
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
|
||||||
|
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-o2wqi%40ride-b1bd8.iam.gserviceaccount.com",
|
||||||
|
"universe_domain": "googleapis.com"
|
||||||
|
}
|
||||||
|
'''; // As defined above
|
||||||
|
|
||||||
|
// Initialize AccessTokenManager
|
||||||
|
final accessTokenManager = AccessTokenManager(serviceAccountKeyJson);
|
||||||
|
|
||||||
|
// Obtain an OAuth 2.0 access token
|
||||||
|
final accessToken = await accessTokenManager.getAccessToken();
|
||||||
|
|
||||||
|
// Send the notification
|
||||||
final response = await http.post(
|
final response = await http.post(
|
||||||
Uri.parse('https://fcm.googleapis.com/fcm/send'),
|
Uri.parse(
|
||||||
|
'https://fcm.googleapis.com/v1/projects/ride-b1bd8/messages:send'),
|
||||||
headers: <String, String>{
|
headers: <String, String>{
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'Authorization': 'key=${AK.serverAPI}'
|
'Authorization': 'Bearer $accessToken',
|
||||||
},
|
},
|
||||||
body: jsonEncode({
|
body: jsonEncode({
|
||||||
'notification': <String, dynamic>{
|
'notification': <String, dynamic>{
|
||||||
|
|||||||
@@ -45,33 +45,24 @@ class LocationController extends GetxController {
|
|||||||
} // Function to determine which area the coordinates belong to
|
} // Function to determine which area the coordinates belong to
|
||||||
|
|
||||||
String getLocationArea(double latitude, double longitude) {
|
String getLocationArea(double latitude, double longitude) {
|
||||||
// Giza Boundary Check
|
if (latitude >= 29.918901 &&
|
||||||
if (latitude >= 29.904975 &&
|
|
||||||
latitude <= 30.143372 &&
|
|
||||||
longitude >= 30.787030 &&
|
|
||||||
longitude <= 31.238843) {
|
|
||||||
// box.write(BoxName.serverChosen, AppLink.seferGizaServer);
|
|
||||||
return 'Giza';
|
|
||||||
}
|
|
||||||
// Cairo Boundary Check
|
|
||||||
else if (latitude >= 29.918901 &&
|
|
||||||
latitude <= 30.198857 &&
|
latitude <= 30.198857 &&
|
||||||
longitude >= 31.215009 &&
|
longitude >= 31.215009 &&
|
||||||
longitude <= 31.532186) {
|
longitude <= 31.532186) {
|
||||||
// box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
|
||||||
return 'Cairo';
|
return 'Cairo';
|
||||||
}
|
} else if (latitude >= 29.904975 &&
|
||||||
// Alexandria Boundary Check
|
latitude <= 30.143372 &&
|
||||||
else if (latitude >= 30.396286 &&
|
longitude >= 30.787030 &&
|
||||||
|
longitude <= 31.238843) {
|
||||||
|
return 'Giza';
|
||||||
|
} else if (latitude >= 30.396286 &&
|
||||||
latitude <= 31.654458 &&
|
latitude <= 31.654458 &&
|
||||||
longitude >= 29.041139 &&
|
longitude >= 29.041139 &&
|
||||||
longitude <= 32.626259) {
|
longitude <= 32.626259) {
|
||||||
// box.write(BoxName.serverChosen, AppLink.seferAlexandriaServer);
|
|
||||||
return 'Alexandria';
|
return 'Alexandria';
|
||||||
|
} else {
|
||||||
|
return 'Outside';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return 'Unknown' if outside defined areas
|
|
||||||
return 'Unknown';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> startLocationUpdates() async {
|
Future<void> startLocationUpdates() async {
|
||||||
@@ -82,27 +73,54 @@ class LocationController extends GetxController {
|
|||||||
totalPoints =
|
totalPoints =
|
||||||
Get.find<CaptainWalletController>().totalPoints.toString();
|
Get.find<CaptainWalletController>().totalPoints.toString();
|
||||||
isActive = Get.find<HomeCaptainController>().isActive;
|
isActive = Get.find<HomeCaptainController>().isActive;
|
||||||
|
|
||||||
if (isActive) {
|
if (isActive) {
|
||||||
if (double.parse(totalPoints) > -3000) {
|
if (double.parse(totalPoints) > -3000) {
|
||||||
await getLocation();
|
await getLocation();
|
||||||
|
|
||||||
|
// Determine the area based on current location
|
||||||
|
String area =
|
||||||
|
getLocationArea(myLocation.latitude, myLocation.longitude);
|
||||||
|
print('Determined Area: $area');
|
||||||
|
|
||||||
String endpoint;
|
String endpoint;
|
||||||
|
|
||||||
switch (
|
switch (area) {
|
||||||
getLocationArea(myLocation.latitude, myLocation.longitude)) {
|
|
||||||
case 'Cairo':
|
case 'Cairo':
|
||||||
endpoint = AppLink.addCarsLocationCairoEndpoint;
|
endpoint = AppLink.addCarsLocationCairoEndpoint;
|
||||||
|
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
||||||
|
Log.print('Endpoint: $endpoint');
|
||||||
break;
|
break;
|
||||||
case 'Giza':
|
case 'Giza':
|
||||||
endpoint = AppLink.addCarsLocationGizaEndpoint;
|
endpoint = AppLink.addCarsLocationGizaEndpoint;
|
||||||
|
Log.print('Endpoint: $endpoint');
|
||||||
|
box.write(BoxName.serverChosen, AppLink.seferGizaServer);
|
||||||
break;
|
break;
|
||||||
case 'Alexandria':
|
case 'Alexandria':
|
||||||
endpoint = AppLink.addCarsLocationAlexandriaEndpoint;
|
endpoint = AppLink.addCarsLocationAlexandriaEndpoint;
|
||||||
|
Log.print('Endpoint: $endpoint');
|
||||||
|
box.write(
|
||||||
|
BoxName.serverChosen, AppLink.seferAlexandriaServer);
|
||||||
|
break;
|
||||||
|
case 'Outside':
|
||||||
|
// Handle cases outside of Cairo, Giza, and Alexandria
|
||||||
|
print('Location outside Cairo, Giza, or Alexandria');
|
||||||
|
endpoint = AppLink
|
||||||
|
.addCarsLocationCairoEndpoint; // Fallback to Cairo endpoint
|
||||||
|
Log.print('Fallback Endpoint: $endpoint');
|
||||||
|
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
print('Location outside Cairo, Giza, or Alexandria');
|
// Handle any other unexpected cases
|
||||||
endpoint = AppLink.addCarsLocationByPassenger;
|
print('Unknown location area');
|
||||||
|
endpoint = AppLink
|
||||||
|
.addCarsLocationCairoEndpoint; // Fallback to Cairo endpoint
|
||||||
|
Log.print('Fallback Endpoint: $endpoint');
|
||||||
|
box.write(BoxName.serverChosen, AppLink.seferCairoServer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure driver ID exists before making the API call
|
||||||
if (box.read(BoxName.driverID) != null) {
|
if (box.read(BoxName.driverID) != null) {
|
||||||
await CRUD().post(link: endpoint, payload: {
|
await CRUD().post(link: endpoint, payload: {
|
||||||
'driver_id': box.read(BoxName.driverID).toString(),
|
'driver_id': box.read(BoxName.driverID).toString(),
|
||||||
@@ -115,46 +133,26 @@ class LocationController extends GetxController {
|
|||||||
: totalDistance < 1
|
: totalDistance < 1
|
||||||
? totalDistance.toStringAsFixed(3)
|
? totalDistance.toStringAsFixed(3)
|
||||||
: totalDistance.toStringAsFixed(1),
|
: totalDistance.toStringAsFixed(1),
|
||||||
'status': box.read(BoxName.statusDriverLocation).toString()
|
'status': box.read(BoxName.statusDriverLocation).toString(),
|
||||||
});
|
});
|
||||||
// Animate camera to user location (optional)
|
|
||||||
// if (Get.find<HomeCaptainController>().rideId == 'rideId') {
|
// Update the camera position on the map
|
||||||
// Get.find<MapDriverController>()
|
|
||||||
// .mapController!
|
|
||||||
// .animateCamera(CameraUpdate.newLatLng(LatLng(
|
|
||||||
// Get.find<LocationController>().myLocation.latitude,
|
|
||||||
// Get.find<LocationController>().myLocation.longitude,
|
|
||||||
// )));
|
|
||||||
}
|
|
||||||
Get.find<HomeCaptainController>()
|
Get.find<HomeCaptainController>()
|
||||||
.mapHomeCaptainController!
|
.mapHomeCaptainController
|
||||||
.animateCamera(CameraUpdate.newLatLng(LatLng(
|
?.animateCamera(
|
||||||
|
CameraUpdate.newLatLng(
|
||||||
|
LatLng(
|
||||||
Get.find<LocationController>().myLocation.latitude,
|
Get.find<LocationController>().myLocation.latitude,
|
||||||
Get.find<LocationController>().myLocation.longitude,
|
Get.find<LocationController>().myLocation.longitude,
|
||||||
)));
|
),
|
||||||
// if (Get.find<HomeCaptainController>().rideId == '0') {
|
),
|
||||||
// await sql.insertData({
|
);
|
||||||
// 'driver_id': box.read(BoxName.driverID),
|
}
|
||||||
// 'latitude': myLocation.latitude.toString(),
|
|
||||||
// 'longitude': myLocation.longitude.toString(),
|
|
||||||
// 'created_at': DateTime.now().toString(),
|
|
||||||
// }, TableName.carLocations);
|
|
||||||
// } else {
|
|
||||||
// await sql.insertData({
|
|
||||||
// 'order_id': Get.find<MapDriverController>().rideId,
|
|
||||||
// 'created_at': DateTime.now().toString(),
|
|
||||||
// 'lat': myLocation.latitude.toString(),
|
|
||||||
// 'lng': myLocation.longitude.toString(),
|
|
||||||
// }, TableName.rideLocation);
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// }
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// Handle the error gracefully
|
// Handle the error gracefully
|
||||||
|
Log.print('Error during location update: $e');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
|||||||
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
import 'package:google_maps_flutter/google_maps_flutter.dart';
|
||||||
|
|
||||||
import '../../../../../constant/colors.dart';
|
import '../../../../../constant/colors.dart';
|
||||||
|
import '../../../../../controller/firebase/firbase_messge.dart';
|
||||||
import '../../../../../print.dart';
|
import '../../../../../print.dart';
|
||||||
import '../../../../Rate/ride_calculate_driver.dart';
|
import '../../../../Rate/ride_calculate_driver.dart';
|
||||||
import '../../../../../controller/functions/location_controller.dart';
|
import '../../../../../controller/functions/location_controller.dart';
|
||||||
@@ -279,7 +280,15 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
|
|||||||
// child: Builder(builder: (context) {
|
// child: Builder(builder: (context) {
|
||||||
// return IconButton(
|
// return IconButton(
|
||||||
// onPressed: () async {
|
// onPressed: () async {
|
||||||
// Get.to(() => EgyptCardAI());
|
// FirebaseMessagesController().sendNotificationToAnyWithoutData(
|
||||||
|
// 'Order'.tr,
|
||||||
|
// 'from: ',
|
||||||
|
// // jsonDecode(value)['message'].toString(),
|
||||||
|
// 'dEugS-JOT4Ka5riF4s5TEN:APA91bEDL_W7BuEQGbyL-RMaKiMWDlURXhFuaybe5WurTUV8K5eIooSGe22yY22_U2hEZcfPr46ig1v--l00dbOGiivazxvmTyhUyQQW6lJsuIN-wordGtBxtREyeYtEKvxIa1J4ApEu',
|
||||||
|
// 'order.wav'
|
||||||
|
|
||||||
|
// // polylineCoordinates.toString()
|
||||||
|
// );
|
||||||
// },
|
// },
|
||||||
// icon: const Icon(
|
// icon: const Icon(
|
||||||
// FontAwesome5.closed_captioning,
|
// FontAwesome5.closed_captioning,
|
||||||
|
|||||||
@@ -1079,6 +1079,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.4+1"
|
version: "0.12.4+1"
|
||||||
|
googleapis_auth:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: googleapis_auth
|
||||||
|
sha256: befd71383a955535060acde8792e7efc11d2fccd03dd1d3ec434e85b68775938
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.6.0"
|
||||||
graphs:
|
graphs:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ dependencies:
|
|||||||
flutter_image_compress: ^2.3.0
|
flutter_image_compress: ^2.3.0
|
||||||
flutter_contacts: ^1.1.8
|
flutter_contacts: ^1.1.8
|
||||||
flutter_overlay_window: ^0.4.4
|
flutter_overlay_window: ^0.4.4
|
||||||
|
googleapis_auth: ^1.6.0
|
||||||
# dash_bubble: ^2.0.0
|
# dash_bubble: ^2.0.0
|
||||||
# bubble_head: ^0.0.4
|
# bubble_head: ^0.0.4
|
||||||
# google_mlkit_face_detection: ^0.11.0
|
# google_mlkit_face_detection: ^0.11.0
|
||||||
|
|||||||
Reference in New Issue
Block a user