如何让Android设备默认启用Flutter通知的弹窗显示功能?
解决Android通知默认不弹窗的问题
问题核心是Android 12及以上系统要求必须通过通知渠道控制通知展示行为,默认创建的渠道优先级不足,导致弹窗选项被禁用。按以下步骤修改配置:
1. 创建高优先级通知渠道
使用flutter_local_notifications创建高重要性的通知渠道,这是让通知默认弹窗的关键:
import 'package:flutter_local_notifications/flutter_local_notifications.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); ServiceContainer.initialize(Injector()); SystemChrome.setPreferredOrientations( [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]); await PreferenceHelper.create(); // 初始化flutter_local_notifications并创建通知渠道 final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin(); const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings('@mipmap/ic_launcher'); // 替换为你的通知图标 const InitializationSettings initializationSettings = InitializationSettings(android: initializationSettingsAndroid); await flutterLocalNotificationsPlugin.initialize(initializationSettings); // 创建高优先级通知渠道 const AndroidNotificationChannel channel = AndroidNotificationChannel( 'high_importance_channel', // 渠道ID '高优先级通知', // 渠道名称 description: '用于显示需要弹窗的通知', // 渠道描述 importance: Importance.high, // 必须设为high才能默认弹窗 enableLights: true, enableVibration: true, showBadge: true, ); await flutterLocalNotificationsPlugin .resolvePlatformSpecificImplementation< AndroidFlutterLocalNotificationsPlugin>() ?.createNotificationChannel(channel); // Firebase Messaging配置 FirebaseMessaging messaging = FirebaseMessaging.instance; // 只调用一次权限请求,避免重复操作 await messaging.requestPermission( alert: true, badge: true, sound: true, provisional: false, ); await FirebaseMessaging.instance.setForegroundNotificationPresentationOptions( alert: true, badge: true, sound: true, ); // 提前请求权限,放在runApp之前 await [Permission.storage, Permission.notification].request(); SystemChrome.setSystemUIOverlayStyle( const SystemUiOverlayStyle(statusBarColor: Colors.transparent)); runApp(const App()); }
2. 关键注意点
- 渠道重要性必须设为
Importance.high:这会让系统默认开启通知弹窗选项,同时通知会在前台弹窗显示。 - 调整权限请求时机:把权限请求移到
runApp之前,确保App启动时就获取到通知权限,避免后续权限不足的问题。 - 移除重复请求:你原代码里两次调用
FirebaseMessaging.instance.requestPermission(),保留一次即可。 - 确认通知图标:确保
@mipmap/ic_launcher是你项目中存在的图标,否则通知可能显示默认图标或空白。
3. 验证效果
修改后重新安装App,发送通知时会默认弹窗;进入系统设置的App通知页面,对应渠道的“弹窗”选项会默认处于启用状态。
内容的提问来源于stack exchange,提问作者Lala Naibova
相关产品推荐
相关产品推荐

