diff --git a/lib/initialization.dart b/lib/initialization.dart index dd12633f..679e5518 100644 --- a/lib/initialization.dart +++ b/lib/initialization.dart @@ -1,3 +1,6 @@ +import 'dart:developer'; +import 'dart:io'; + import 'package:app_tracking_transparency/app_tracking_transparency.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; @@ -12,26 +15,68 @@ import 'package:hub/flutter_flow/flutter_flow_util.dart'; import 'package:hub/flutter_flow/nav/nav.dart'; Future initializeApp() async { - WidgetsFlutterBinding.ensureInitialized(); // await _initializeTracking(); - // WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) async => - // await AppTrackingTransparency.requestTrackingAuthorization()); + // WidgetsFlutterBinding.ensureInitialized() + // .addPostFrameCallback((_) => _initializeAppTrackingTransparency()); await StorageHelper().init(); await _initializeFirebase(); await _initializeNotificationService(); - _initializeUrlStrategy(); - _initializeSystemSettings(); + await _initializeUrlStrategy(); + await _initializeSystemSettings(); await _initializeFlutterFlow(); await _initializeNav(); } -// Future _initializeTracking() async { -// print('Requesting tracking authorization...'); +void _initializeAppTrackingTransparency() async { + if (Platform.isIOS) { + final status = await AppTrackingTransparency.trackingAuthorizationStatus; + if (status == TrackingStatus.notDetermined) { + await Future.delayed(const Duration(seconds: 2)); + final request = + await AppTrackingTransparency.requestTrackingAuthorization(); + if (request == TrackingStatus.authorized) { + log('Tracking authorized'); + } else { + log('Tracking not authorized'); + } + } + } +} -// print('Tracking authorization requested'); -// } +Future showCustomTrackingDialog(BuildContext context) async { + // final String title = FFLocalizations.of(context).getVariableText( + // enText: 'Privacy', + // ptText: 'Privacidade', + // ); + // final String content = FFLocalizations.of(context).getVariableText( + // enText: + // 'We care about your privacy and data security. We need your permission to use your data for crash reporting and diagnostics. ' + // 'This helps us improve the app and provide a better user experience.\n\nYou can change your choice anytime in the app settings.', + // ptText: + // 'Prezamos pela sua privacidade e segurança dos seus dados. Precisamos da sua permissão para usar seus dados para relatórios de falhas e diagnósticos.' + // 'Isso nos ajuda a melhorar o aplicativo e fornecer uma melhor experiência ao usuário.\n\nVocê pode alterar sua escolha a qualquer momento nas configurações do aplicativo.', + // ); + const String title = 'Privacy'; + const String content = + 'We care about your privacy and data security. We need your permission to use your data for crash reporting and diagnostics. ' + 'This helps us improve the app and provide a better user experience.\n\nYou can change your choice anytime in the app settings.'; + + return await showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(title), + content: Text(content), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: const Text('Continue'), + ), + ], + ), + ); +} Future _initializeFirebase() async { print('Initializing Firebase...'); @@ -45,7 +90,7 @@ Future _initializeNotificationService() async { print('Notification Service initialized'); } -void _initializeUrlStrategy() { +Future _initializeUrlStrategy() async { print('Initializing URL Strategy...'); setUrlStrategy(PathUrlStrategy()); print('URL Strategy initialized'); diff --git a/lib/main.dart b/lib/main.dart index 88d1607b..ff31ee6e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -22,6 +22,7 @@ import 'initialization.dart'; final GlobalKey navigatorKey = GlobalKey(); void main() async { + WidgetsFlutterBinding.ensureInitialized(); await initializeApp(); runApp(const ProviderScope(child: App())); FirebaseMessaging.onBackgroundMessage(_backgroundHandlerMessage); @@ -169,8 +170,9 @@ class _AppState extends State { @override void initState() { super.initState(); - - FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); + WidgetsBinding.instance.addPostFrameCallback( + (_) => _initializeAppTrackingTransparency(context)); + // FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); _appStateNotifier = AppStateNotifier.instance; _router = createRouter(_appStateNotifier); Future.delayed( @@ -183,15 +185,15 @@ class _AppState extends State { _setupFirebaseMessaging(); // if (TestUtil.isInTest) // DeepLinkService().ensureInitialization(); - WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback( - (_) => _initializeAppTrackingTransparency(context)); } void _initializeAppTrackingTransparency(BuildContext context) async { if (Platform.isIOS) { final status = await AppTrackingTransparency.trackingAuthorizationStatus; if (status == TrackingStatus.notDetermined) { + await Future.delayed(const Duration(seconds: 1)); await showCustomTrackingDialog(context); + await Future.delayed(const Duration(seconds: 1)); final request = await AppTrackingTransparency.requestTrackingAuthorization(); if (request == TrackingStatus.authorized) {