flutter iOS 中如何在通知权限之前请求跟踪透明度权限

问题描述 投票:0回答:1

每次运行我的应用程序时,通知对话框都会先于应用程序跟踪授权出现。我希望用户在通知对话框之前首先看到应用程序跟踪透明度对话框。我尝试在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


ios flutter push-notification apptrackingtransparency
1个回答
0
投票
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()
  1. 函数,它使用
    flutter_app_tracking_transparency
    包请求跟踪透明度权限。
  2. setupPushNotifications()
  3. 函数使用 Firebase Messaging 处理推送通知的设置。
  4. handleInitialMessage()
  5. 函数处理从通知启动应用程序时的初始消息。
    在初始化 Firebase、设置推送通知和运行应用程序之前,这些函数会在 
  6. main()
  7. 函数中按顺序调用。这可确保跟踪透明度权限对话框出现在与权限或服务相关的任何其他对话框之前。
    
        
© www.soinside.com 2019 - 2024. All rights reserved.