每次运行我的应用程序时,通知对话框都会先于应用程序跟踪授权出现。我希望用户在通知对话框之前首先看到应用程序跟踪透明度对话框。我尝试在await AppTrackingTransparency.requestTrackingAuthorization();
之前或之后以及推送通知请求
runApp()
之上请求跟踪授权 await PushNotificationService().setupInteractedMessage();
,并在info.plist中添加密钥,但是,结果是相同的,通知对话框先出现。请检查我的代码。int? initScreen;
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// await Firebase.initializeApp();
await Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform,
);
// runApp(MyApp());
SharedPreferences preferences = await SharedPreferences.getInstance();
initScreen = await preferences.getInt('initScreen');
await preferences.setInt('initScreen', 1);
// MobileAds.instance.initialize();
runApp(MyApp());
//await AppTracking
// final status = await AppTrackingTransparency.requestTrackingAuthorization();
await AppTrackingTransparency.requestTrackingAuthorization();
await PushNotificationService().setupInteractedMessage();
MobileAds.instance.initialize();
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
// App received a notification when it was killed
}
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
// final TrackingStatus status;
//
// MyApp({required this.status});
static FirebaseAnalytics analytics = FirebaseAnalytics.instance;
static FirebaseAnalyticsObserver observer =
new FirebaseAnalyticsObserver(analytics: analytics);
@override
Widget build(BuildContext context) {
// String statusText;
// switch (status) {
// case TrackingStatus.authorized:
// statusText = 'Tracking Status Authorized';
// break;
// case TrackingStatus.denied:
// statusText = 'Tracking Status Denied';
// break;
// case TrackingStatus.notDetermined:
// statusText = 'Tracking Status Not Determined';
// break;
// case TrackingStatus.notSupported:
// statusText = 'Tracking Status Not Supported';
// break;
// case TrackingStatus.restricted:
// statusText = 'Tracking Status Restricted';
// break;
// default:
// statusText = 'You should not see this...';
// break;
// }
return GetMaterialApp(
debugShowCheckedModeBanner: false,
title: 'Culture Islamique',
theme: ThemeData(
primarySwatch: Colors.blue,
),
// home:
initialRoute: initScreen == 0 || initScreen == null ? 'onboard' : 'home',
routes: {
'home': (context) => navbar(analytics: analytics, observer: observer),
'onboard': (context) => onboardingHomePage(),
},
);
}
}```
[![enter image description here][1]][1]
[1]: https://i.stack.imgur.com/R3eHd.png
main()
函数的方法:
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:firebase_analytics/observer.dart';
import 'package:flutter_app_tracking_transparency/flutter_app_tracking_transparency.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:google_mobile_ads/google_mobile_ads.dart';
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
// Request tracking transparency permission
await requestTrackingPermission();
// Initialize Firebase
await Firebase.initializeApp();
// Set up push notifications
await setupPushNotifications();
// Initialize Google Mobile Ads
MobileAds.instance.initialize();
// Get initial message if app was launched from a notification
await handleInitialMessage();
// Run the app
runApp(MyApp());
}
Future<void> requestTrackingPermission() async {
await AppTrackingTransparency.requestTrackingAuthorization();
}
Future<void> setupPushNotifications() async {
// Set up push notifications here
// For example, using Firebase Cloud Messaging
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
// Handle incoming message when the app is in the foreground
});
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
// Handle notification when the app is in the background or terminated
});
}
Future<void> handleInitialMessage() async {
RemoteMessage? initialMessage =
await FirebaseMessaging.instance.getInitialMessage();
if (initialMessage != null) {
// Handle the initial message if app was launched from a notification
}
}
void _firebaseMessagingBackgroundHandler(RemoteMessage message) {
// Handle background messages
}
class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer = FirebaseAnalyticsObserver(analytics: analytics);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Your App',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: [observer],
home: // Your home screen widget,
);
}
}
在此修改后的代码中:
这里我们有
requestTrackingPermission()
flutter_app_tracking_transparency
包请求跟踪透明度权限。setupPushNotifications()
handleInitialMessage()
main()