通知权限弹出窗口将始终出现在 flutter 应用程序中

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

我几天来一直在尝试摆脱首次运行应用程序时出现在我的 Flutter 应用程序中的“通知权限”弹出窗口。

我的代码如下:

void main() async {
  await Hive.initFlutter();
  runApp(MyApp());
}


class MyApp extends StatefulWidget {
  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    check_internet_connection();
    super.initState();
  }
    @override
    Widget build(BuildContext context) {
      return GetMaterialApp(
        title: 'Myapp',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: Text('test')
      );
    }
}

一般来说,我在我的应用程序中使用 firebase 和 firebase 消息传递。 在尝试禁用权限请求时,我想看看是什么导致了弹出窗口的出现,因此我从主目录中删除了几乎所有内容(试验和错误),只留下上面的代码。 我仍然在我的 iOS 真实设备上收到通知权限请求。

在我的 pubspec.yaml 中,我有这个:firebase_messaging:^11.1.0

如何禁用弹出窗口?

flutter firebase firebase-cloud-messaging
4个回答
4
投票

我想我已经找到了为什么我有这种行为。 这是因为我在 AppDelegate.swift 文件中添加了以下内容:

UNUserNotificationCenter.current().delegate = self

let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
  options: authOptions,
  completionHandler: { _, _ in }
)

application.registerForRemoteNotifications()

通过删除 requestAuthorization() 我不再收到弹出窗口。


2
投票

Faz的回答帮助了我!此外,如果您使用的是 flutter_local_notifications 插件,那么您必须明确将其设置为不通过以下方式请求许可

final DarwinInitializationSettings initializationSettingsDarwin =
      DarwinInitializationSettings(
    requestSoundPermission: false,
    requestBadgePermission: false,
    requestAlertPermission: false,
    onDidReceiveLocalNotification: onDidReceiveLocalNotification,
  );

有关更多信息,请参阅 此 stackoverflow 帖子此问题 以及 自述文件的这一部分


2
投票

就我而言,这是由于 Flutter Badges 造成的。我在应用程序启动期间清除了 firebase 通知徽章,这反过来又请求访问通知

https://pub.dev/packages/badges


0
投票

对我来说,通知权限提示在应用程序启动时自动显示的原因是因为我使用的是 flutter_app_badger 插件,它可以让你向 iOS 应用程序图标添加徽章。当添加和删除徽章时,此插件会自动请求通知权限,并且我在应用程序启动时添加徽章,而没有先检查我是否已请求通知权限。

我修复的方法是,仅在请求通知权限后才添加通知徽章。当我第一次请求权限时,我在 SharedPreferences 中设置了一个标志,并且仅在设置了该标志后才访问与通知相关的代码。

希望这可以帮助处于相同情况的人。

© www.soinside.com 2019 - 2024. All rights reserved.