From fff8d42759f3ee0b53f013a2efb799abf9442fa3 Mon Sep 17 00:00:00 2001 From: llsajjad Date: Sat, 20 Sep 2025 13:02:02 +0330 Subject: [PATCH] added firebase for notification --- android/app/build.gradle.kts | 5 ++ android/app/google-services.json | 29 ++++++++++++ android/build.gradle.kts | 11 +++++ lib/core/services/messaging_service.dart | 14 ++++++ lib/main.dart | 25 ++++++++++ pubspec.lock | 60 +++++++++++++++++++++++- pubspec.yaml | 2 + web/firebase-messaging-sw.js | 14 ++++++ web/index.html | 3 ++ 9 files changed, 161 insertions(+), 2 deletions(-) create mode 100644 android/app/google-services.json create mode 100644 lib/core/services/messaging_service.dart create mode 100644 web/firebase-messaging-sw.js diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 1b99fba..7b4b3c7 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("kotlin-android") // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id("dev.flutter.flutter-gradle-plugin") + id("com.google.gms.google-services") } android { @@ -42,3 +43,7 @@ android { flutter { source = "../.." } + +dependencies { + implementation(platform("com.google.firebase:firebase-bom:32.7.2")) + } diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..03e737b --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "1071558853812", + "project_id": "opplens", + "storage_bucket": "opplens.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1071558853812:android:7831119a56a99c5948c3e1", + "android_client_info": { + "package_name": "com.opplens.app" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyD5LaGXppjGEdTf-a0Ha25FX1p0v_h-c8A" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/build.gradle.kts b/android/build.gradle.kts index 89176ef..5d07de8 100644 --- a/android/build.gradle.kts +++ b/android/build.gradle.kts @@ -1,3 +1,13 @@ +buildscript { + repositories { + google() + mavenCentral() + } + dependencies { + classpath("com.google.gms:google-services:4.4.1") + } +} + allprojects { repositories { google() @@ -12,6 +22,7 @@ subprojects { val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name) project.layout.buildDirectory.value(newSubprojectBuildDir) } + subprojects { project.evaluationDependsOn(":app") } diff --git a/lib/core/services/messaging_service.dart b/lib/core/services/messaging_service.dart new file mode 100644 index 0000000..d39da55 --- /dev/null +++ b/lib/core/services/messaging_service.dart @@ -0,0 +1,14 @@ +import 'package:firebase_messaging/firebase_messaging.dart'; + +import 'package:logger/logger.dart'; + +class MessagingService { + //create an instance of firebase messaging + final _firebaseMessaging = FirebaseMessaging.instance; + + Future initNotifications() async { + await _firebaseMessaging.requestPermission(); + final fcmToken = await _firebaseMessaging.getToken(); + Logger().i('FCMToken: $fcmToken'); + } +} diff --git a/lib/main.dart b/lib/main.dart index f6082e0..52e7bb3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,15 +1,19 @@ // main.dart import 'dart:ui'; +import 'package:firebase_core/firebase_core.dart'; +import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:logger/logger.dart'; import 'package:provider/provider.dart'; import 'package:provider/single_child_widget.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:tm_app/core/config/dependencies.dart'; import 'package:tm_app/core/config/web_url_strategy.dart'; import 'package:tm_app/core/services/cache_init.dart'; +import 'package:tm_app/core/services/messaging_service.dart'; import 'package:tm_app/core/theme/theme_provider.dart'; import 'core/routes/app_routes.dart'; @@ -39,6 +43,27 @@ void main() async { // Configure web URL strategy if running on web configureWebUrlStrategy(); + if (kIsWeb) { + await Firebase.initializeApp( + options: const FirebaseOptions( + apiKey: 'AIzaSyAUQhM789-0qZIaIWtwTQXyz9gEtN-TnnU', + authDomain: 'opplens.firebaseapp.com', + appId: '1:1071558853812:web:d9ca896b088ee7da48c3e1', + messagingSenderId: '1071558853812', + projectId: 'opplens', + storageBucket: 'opplens.firebasestorage.app', + measurementId: 'G-GJGP9WB28B', + ), + ); + final _firebaseMessaging = FirebaseMessaging.instance; + await _firebaseMessaging.requestPermission(); + final fcmToken = await _firebaseMessaging.getToken(); + Logger().i('FCMToken: $fcmToken'); + } else { + await Firebase.initializeApp(); + await MessagingService().initNotifications(); + } + runApp(MultiProvider(providers: providers, child: const MyApp())); } diff --git a/pubspec.lock b/pubspec.lock index 57e754e..386acf0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "85.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: "948f7d74f41dd6f2d563ea9f4c21d7ea764f8e047d2b24138974c19c24d37eb6" + url: "https://pub.dev" + source: hosted + version: "1.3.61" analyzer: dependency: transitive description: @@ -289,6 +297,54 @@ packages: url: "https://pub.dev" source: hosted version: "10.3.3" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: "967dae9a65f69377beb9f4ab292ea63ce5befa1ce24682cab1b69ca4b7a46927" + url: "https://pub.dev" + source: hosted + version: "4.1.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: "5dbc900677dcbe5873d22ad7fbd64b047750124f1f9b7ebe2a33b9ddccc838eb" + url: "https://pub.dev" + source: hosted + version: "6.0.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: f7ee08febc1c4451588ce58ffcf28edaee857e9a196fee88b85deb889990094a + url: "https://pub.dev" + source: hosted + version: "3.1.0" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: aad5dcdea5698499b70d74d5a53b1f6a9972f85f97225e4b7ac006dd8d4f9bac + url: "https://pub.dev" + source: hosted + version: "16.0.1" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: "825bc11767bf50a43dccf49b3026f847ec31d0f176139bfc48d662cc128b5014" + url: "https://pub.dev" + source: hosted + version: "4.7.1" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: db8dbdd79921245c4de02407e33cae2d1868683be18a5ba948d2af5311e3ef5d + url: "https://pub.dev" + source: hosted + version: "4.0.1" fixnum: dependency: transitive description: @@ -492,10 +548,10 @@ packages: dependency: transitive description: name: js - sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 url: "https://pub.dev" source: hosted - version: "0.7.2" + version: "0.6.7" json_annotation: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 23e4a3c..fa1fa58 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -31,6 +31,8 @@ dependencies: path_provider: ^2.1.5 dotted_border: ^3.1.0 file_picker: ^10.3.3 + firebase_core: ^4.1.0 + firebase_messaging: ^16.0.1 dev_dependencies: diff --git a/web/firebase-messaging-sw.js b/web/firebase-messaging-sw.js new file mode 100644 index 0000000..4630252 --- /dev/null +++ b/web/firebase-messaging-sw.js @@ -0,0 +1,14 @@ +importScripts("https://www.gstatic.com/firebasejs/9.22.2/firebase-app-compat.js"); +importScripts("https://www.gstatic.com/firebasejs/9.22.2/firebase-messaging-compat.js"); + +firebase.initializeApp({ + apiKey: 'AIzaSyAUQhM789-0qZIaIWtwTQXyz9gEtN-TnnU', + authDomain: 'opplens.firebaseapp.com', + appId: '1:1071558853812:web:d9ca896b088ee7da48c3e1', + messagingSenderId: '1071558853812', + projectId: 'opplens', + storageBucket: 'opplens.firebasestorage.app', + measurementId: 'G-GJGP9WB28B', +}); + +const messaging = firebase.messaging(); diff --git a/web/index.html b/web/index.html index 37bcea5..21d9ffb 100644 --- a/web/index.html +++ b/web/index.html @@ -2,6 +2,9 @@ + + +