diff --git a/lib/main.dart b/lib/main.dart index 5b22460c..93b04752 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -183,11 +183,55 @@ class _AppState extends State { _setupFirebaseMessaging(); // if (TestUtil.isInTest) // DeepLinkService().ensureInitialization(); - WidgetsFlutterBinding.ensureInitialized().addPostFrameCallback((_) async { - await AppTrackingTransparency.requestTrackingAuthorization(); - }); + WidgetsFlutterBinding.ensureInitialized() + .addPostFrameCallback((_) => _initializeAppTrackingTransparency()); } + void _initializeAppTrackingTransparency() async { + if (Platform.isIOS) { + final status = await AppTrackingTransparency.trackingAuthorizationStatus; + if (status == TrackingStatus.notDetermined) { + 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 keep this app free by showing ads. ' + 'Can we continue to use your data to tailor ads for you?\n\nYou can change your choice anytime in the app settings. ' + 'Our partners will collect data and use a unique identifier on your device to show you ads.', + ptText: 'Prezamos pela sua privacidade e segurança dos seus dados. Mantemos este aplicativo gratuito exibindo anúncios.' + 'Podemos continuar a usar seus dados para personalizar anúncios para você?\n\nVocê pode alterar sua escolha a qualquer momento nas configurações do aplicativo.' + 'Nossos parceiros coletarão dados e usarão um identificador exclusivo em seu dispositivo para mostrar anúncios.', + ) + await showCustomTrackingDialog(context, title, content); + + final request = + await AppTrackingTransparency.requestTrackingAuthorization(); + if (request == TrackingStatus.authorized) { + log('Tracking authorized'); + } else { + log('Tracking not authorized'); + } + } + } + } + + Future showCustomTrackingDialog( + BuildContext context, String title, String content) async => + await showDialog( + context: context, + builder: (context) => AlertDialog( + title: Text(title), + content: Text(content), + actions: [ + TextButton( + onPressed: () => Navigator.pop(context), + child: const Text('Continue'), + ), + ], + ), + ); + @override void dispose() { super.dispose();