From b514d3c9310e89ec33ceb5f3ec07ec6e33789d7a Mon Sep 17 00:00:00 2001 From: suvaysov Date: Fri, 23 Jun 2023 14:08:01 +0600 Subject: [PATCH] firebase messaging crashlytics --- android/app/build.gradle | 4 ++ android/app/google-services.json | 46 +++++++++++++++ android/app/src/main/AndroidManifest.xml | 6 ++ android/build.gradle | 4 ++ ios/Runner/GoogleService-Info.plist | 34 +++++++++++ ios/Runner/Info.plist | 2 + ios/firebase_app_id_file.json | 7 +++ lib/firebase_options.dart | 69 +++++++++++++++++++++++ lib/main.dart | 70 +++++++++++++++++++++++ pubspec.lock | 72 ++++++++++++++++++++++++ pubspec.yaml | 3 + 11 files changed, 317 insertions(+) create mode 100644 android/app/google-services.json create mode 100644 ios/Runner/GoogleService-Info.plist create mode 100644 ios/firebase_app_id_file.json create mode 100644 lib/firebase_options.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index b7289d2..13d7763 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -22,6 +22,10 @@ if (flutterVersionName == null) { } apply plugin: 'com.android.application' +// START: FlutterFire Configuration +apply plugin: 'com.google.gms.google-services' +apply plugin: 'com.google.firebase.crashlytics' +// END: FlutterFire Configuration apply plugin: 'kotlin-android' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" diff --git a/android/app/google-services.json b/android/app/google-services.json new file mode 100644 index 0000000..facea88 --- /dev/null +++ b/android/app/google-services.json @@ -0,0 +1,46 @@ +{ + "project_info": { + "project_number": "351765347506", + "project_id": "satu-59e73", + "storage_bucket": "satu-59e73.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:351765347506:android:edd4e6634e187e299cddab", + "android_client_info": { + "package_name": "kz.com.aman.satu" + } + }, + "oauth_client": [ + { + "client_id": "351765347506-l4vmirged6hrkufaaksj44gnald5pk42.apps.googleusercontent.com", + "client_type": 3 + } + ], + "api_key": [ + { + "current_key": "AIzaSyALBO3oTbR35qMlhjVJ9ksknpFjyAlE69k" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [ + { + "client_id": "351765347506-l4vmirged6hrkufaaksj44gnald5pk42.apps.googleusercontent.com", + "client_type": 3 + }, + { + "client_id": "351765347506-7jh0p4iv29fmh1pjhe1hsq73ruef0g3m.apps.googleusercontent.com", + "client_type": 2, + "ios_info": { + "bundle_id": "kz.com.amansatu" + } + } + ] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index cf1be9e..ba8dba0 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -49,5 +49,11 @@ + + diff --git a/android/build.gradle b/android/build.gradle index b760931..fc2caee 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -7,6 +7,10 @@ buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.3.0' + // START: FlutterFire Configuration + classpath 'com.google.gms:google-services:4.3.15' + classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1' + // END: FlutterFire Configuration classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/ios/Runner/GoogleService-Info.plist b/ios/Runner/GoogleService-Info.plist new file mode 100644 index 0000000..efcce03 --- /dev/null +++ b/ios/Runner/GoogleService-Info.plist @@ -0,0 +1,34 @@ + + + + + CLIENT_ID + 351765347506-qaa1oe42bgf8hmmac7bea8lra2uosc7a.apps.googleusercontent.com + REVERSED_CLIENT_ID + com.googleusercontent.apps.351765347506-qaa1oe42bgf8hmmac7bea8lra2uosc7a + API_KEY + AIzaSyAjXnh2r1Ds8lkbLEWAh4JUfkB_rnTsMUQ + GCM_SENDER_ID + 351765347506 + PLIST_VERSION + 1 + BUNDLE_ID + kz.com.aman.satu + PROJECT_ID + satu-59e73 + STORAGE_BUCKET + satu-59e73.appspot.com + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:351765347506:ios:4e50508bc0271b1e9cddab + + \ No newline at end of file diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 895cbe0..e023df6 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -57,5 +57,7 @@ UIApplicationSupportsIndirectInputEvents + FirebaseMessagingAutoInitEnabled + NO diff --git a/ios/firebase_app_id_file.json b/ios/firebase_app_id_file.json new file mode 100644 index 0000000..a8fbfc9 --- /dev/null +++ b/ios/firebase_app_id_file.json @@ -0,0 +1,7 @@ +{ + "file_generated_by": "FlutterFire CLI", + "purpose": "FirebaseAppID & ProjectID for this Firebase app in this directory", + "GOOGLE_APP_ID": "1:351765347506:ios:4e50508bc0271b1e9cddab", + "FIREBASE_PROJECT_ID": "satu-59e73", + "GCM_SENDER_ID": "351765347506" +} \ No newline at end of file diff --git a/lib/firebase_options.dart b/lib/firebase_options.dart new file mode 100644 index 0000000..b963344 --- /dev/null +++ b/lib/firebase_options.dart @@ -0,0 +1,69 @@ +// File generated by FlutterFire CLI. +// ignore_for_file: lines_longer_than_80_chars, avoid_classes_with_only_static_members +import 'package:firebase_core/firebase_core.dart' show FirebaseOptions; +import 'package:flutter/foundation.dart' + show defaultTargetPlatform, kIsWeb, TargetPlatform; + +/// Default [FirebaseOptions] for use with your Firebase apps. +/// +/// Example: +/// ```dart +/// import 'firebase_options.dart'; +/// // ... +/// await Firebase.initializeApp( +/// options: DefaultFirebaseOptions.currentPlatform, +/// ); +/// ``` +class DefaultFirebaseOptions { + static FirebaseOptions get currentPlatform { + if (kIsWeb) { + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for web - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + } + switch (defaultTargetPlatform) { + case TargetPlatform.android: + return android; + 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.', + ); + case TargetPlatform.windows: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for windows - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + case TargetPlatform.linux: + throw UnsupportedError( + 'DefaultFirebaseOptions have not been configured for linux - ' + 'you can reconfigure this by running the FlutterFire CLI again.', + ); + default: + throw UnsupportedError( + 'DefaultFirebaseOptions are not supported for this platform.', + ); + } + } + + static const FirebaseOptions android = FirebaseOptions( + apiKey: 'AIzaSyALBO3oTbR35qMlhjVJ9ksknpFjyAlE69k', + appId: '1:351765347506:android:edd4e6634e187e299cddab', + messagingSenderId: '351765347506', + projectId: 'satu-59e73', + storageBucket: 'satu-59e73.appspot.com', + ); + + static const FirebaseOptions ios = FirebaseOptions( + apiKey: 'AIzaSyAjXnh2r1Ds8lkbLEWAh4JUfkB_rnTsMUQ', + appId: '1:351765347506:ios:4e50508bc0271b1e9cddab', + messagingSenderId: '351765347506', + projectId: 'satu-59e73', + storageBucket: 'satu-59e73.appspot.com', + iosClientId: '351765347506-qaa1oe42bgf8hmmac7bea8lra2uosc7a.apps.googleusercontent.com', + iosBundleId: 'kz.com.aman.satu', + ); +} diff --git a/lib/main.dart b/lib/main.dart index d049877..485d352 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,10 +1,15 @@ import 'dart:io'; +import 'package:firebase_crashlytics/firebase_crashlytics.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:flutter_redux/flutter_redux.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:firebase_core/firebase_core.dart'; +import 'firebase_options.dart'; + import 'package:satu/routes/router.dart'; import 'package:satu/shared/app_colors.dart'; import 'package:satu/views/start_up/start_up_view.dart'; @@ -27,10 +32,75 @@ void main() async { yield LicenseEntryWithLineBreaks(['google_fonts'], license); }); + await Firebase.initializeApp( + options: DefaultFirebaseOptions.currentPlatform, + ); + + await messaging(); + await crashing(); + await Redux.init(); runApp(MainApplication()); } +Future messaging() async { + FirebaseMessaging messaging = FirebaseMessaging.instance; + await messaging.setAutoInitEnabled(true); + + NotificationSettings settings = await messaging.requestPermission( + alert: true, + announcement: false, + badge: true, + carPlay: false, + criticalAlert: false, + provisional: false, + sound: true, + ); + + print('User granted permission: ${settings.authorizationStatus}'); + + await FirebaseMessaging.instance.subscribeToTopic('all'); + if (Platform.isAndroid) { + // Android-specific code + await FirebaseMessaging.instance.subscribeToTopic('android'); + } else if (Platform.isIOS) { + // iOS-specific code + await FirebaseMessaging.instance.subscribeToTopic('ios'); + } + + FirebaseMessaging.onMessage.listen((RemoteMessage message) { + if (message.notification != null) { + locator() + .showDialog(description: message.notification?.body ?? ''); + } + }); + + FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) async { + if (message.notification != null) { + locator() + .showDialog(description: message.notification?.body ?? ''); + } + }); + FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler); +} + +Future crashing() async { + FlutterError.onError = (errorDetails) { + FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails); + }; + // Pass all uncaught asynchronous errors that aren't handled by the Flutter framework to Crashlytics + PlatformDispatcher.instance.onError = (error, stack) { + FirebaseCrashlytics.instance.recordError(error, stack, fatal: true); + return true; + }; +} + +Future _firebaseMessagingBackgroundHandler(RemoteMessage message) async { + // If you're going to use other Firebase services in the background, such as Firestore, + // make sure you call `initializeApp` before using other Firebase services. + await Firebase.initializeApp(); +} + class MainApplication extends StatelessWidget { @override Widget build(BuildContext context) { diff --git a/pubspec.lock b/pubspec.lock index 0aabcfe..63d3e92 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "61.0.0" + _flutterfire_internals: + dependency: transitive + description: + name: _flutterfire_internals + sha256: a742f71d7f3484253a623b30e19256aa4668ecbb3de6ad1beb0bcf8d4777ecd8 + url: "https://pub.dev" + source: hosted + version: "1.3.3" ai_barcode: dependency: "direct main" description: @@ -305,6 +313,70 @@ packages: url: "https://pub.dev" source: hosted version: "6.1.4" + firebase_core: + dependency: "direct main" + description: + name: firebase_core + sha256: a4a99204da264a0aa9d54a332ea0315ce7b0768075139c77abefe98093dd98be + url: "https://pub.dev" + source: hosted + version: "2.14.0" + firebase_core_platform_interface: + dependency: transitive + description: + name: firebase_core_platform_interface + sha256: b63e3be6c96ef5c33bdec1aab23c91eb00696f6452f0519401d640938c94cba2 + url: "https://pub.dev" + source: hosted + version: "4.8.0" + firebase_core_web: + dependency: transitive + description: + name: firebase_core_web + sha256: "0fd5c4b228de29b55fac38aed0d9e42514b3d3bd47675de52bf7f8fccaf922fa" + url: "https://pub.dev" + source: hosted + version: "2.6.0" + firebase_crashlytics: + dependency: "direct main" + description: + name: firebase_crashlytics + sha256: "398012cf7838f8a373a25da65dd62fc3a3f4abe4b5f886caa634952c3387dce3" + url: "https://pub.dev" + source: hosted + version: "3.3.3" + firebase_crashlytics_platform_interface: + dependency: transitive + description: + name: firebase_crashlytics_platform_interface + sha256: "39dfcc9a5ddfaa0588ad67f1016174dd9e19f6b31f592b8641bd559399567592" + url: "https://pub.dev" + source: hosted + version: "3.6.3" + firebase_messaging: + dependency: "direct main" + description: + name: firebase_messaging + sha256: "77d93f897c893fa7c8de433f6950123bd9c56f27fd7f88a032a53102ca23fcee" + url: "https://pub.dev" + source: hosted + version: "14.6.3" + firebase_messaging_platform_interface: + dependency: transitive + description: + name: firebase_messaging_platform_interface + sha256: e9e9dc48a3d8ffa67aaba3d6b1ebf74bc7d7d8c83d10b1458ff97878b9d8a2b0 + url: "https://pub.dev" + source: hosted + version: "4.5.3" + firebase_messaging_web: + dependency: transitive + description: + name: firebase_messaging_web + sha256: "381f217e41e0e407baf8df21787b97e46fabfacefd6a953425be3a6cdf2269f4" + url: "https://pub.dev" + source: hosted + version: "3.5.3" fixnum: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 43fcaee..b16ca58 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,6 +60,9 @@ dependencies: location_permissions: ^4.0.1 esc_pos_utils: ^1.1.0 esc_pos_bluetooth: ^0.4.1 + firebase_core: ^2.14.0 + firebase_messaging: ^14.6.3 + firebase_crashlytics: ^3.3.3 dev_dependencies: build_runner: ^2.4.5 flutter_test: