Flutter 本地通知、自定义声音不适用于 iOS

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

我在我的项目中使用

flutter_local_notifications: 4.0.1+2
。 出现通知我正在尝试在 iOS 上播放自定义声音。” 我尝试按照以下方法为 iOS 实现自定义声音,但它不起作用:

  flutterLocalNotificationsPlugin
  .resolvePlatformSpecificImplementation<
      IOSFlutterLocalNotificationsPlugin>()
  ?.requestPermissions(
    alert: true,
    badge: true,
    sound: true,
  );

  var initializationSettings = InitializationSettings(
  android: initializationSettingsAndroid, iOS: initializationSettingsIOS);
  flutterLocalNotificationsPlugin.initialize(initializationSettings);

  const AndroidNotificationDetails androidPlatformChannelSpecifics =
      AndroidNotificationDetails(
          'Adhan Times Notification', 'Islamic App', 'Allah O Akbar',
          priority: Priority.high,
          sound: RawResourceAndroidNotificationSound('azan'));
  const IOSNotificationDetails iOSPlatformChannelSpecifics =
      IOSNotificationDetails(sound: 'azan.aiff');

azaan.aiff
文件位于
app/ios/Runner

如有任何帮助,我们将不胜感激。谢谢

ios flutter dart notifications flutter-dependencies
4个回答
0
投票

除了

playsound
构造函数的
sound
属性之外,属性
IOSNotificationDetails
也必须设置为 true。


0
投票
 const DarwinNotificationDetails darwinNotificationDetails =
    DarwinNotificationDetails(sound: 'slow_spring_board.aiff');

    final NotificationDetails notificationDetails = NotificationDetails(
      iOS: darwinNotificationDetails,
      //  linux: linuxPlatformChannelSpecifics,
    );
    await flutterLocalNotificationsPlugin.show(
      id++,
      'custom sound notification title',
      'custom sound notification body',
      notificationDetails,
    );

还可以将声音文件拖放到 xcode 中的 ios 文件夹中


0
投票

经过几天的故障排除,我已经使用 flutter_local_notifications 包在 Flutter 中成功实现了本地通知。以下是针对可能面临类似挑战的其他人的简明指南和警告。

  1. pubspec.yaml:

     environment:
       sdk: '>=2.19.2 <3.0.0'
     dependencies:
       flutter:
         sdk: flutter
       timezone: ^0.9.2
       flutter_local_notifications: ^15.1.0+1
    
  2. notification_service.dart:

     class LocalNotificationService {
       final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = FlutterLocalNotificationsPlugin();
       final AndroidInitializationSettings initializationSettingsAndroid = const AndroidInitializationSettings('@mipmap/launcher_icon');
       final DarwinInitializationSettings initializationSettingsDarwin = const DarwinInitializationSettings();
    
       Future<void> showNotification(title, description, route) async {
         // Android Notification Configuration
         AndroidNotificationDetails androidPlatformChannelSpecifics = AndroidNotificationDetails(
           'jbvfbfdjh', // Customize channel id
           'channel_default', // Customize channel title
           channelDescription: 'channel_default',
           playSound: true,
           sound: const RawResourceAndroidNotificationSound('notification_sound'), // Add your sound file WITHOUT file extension (ex.: .mp3, .mp4, etc)
           importance: Importance.max,
           styleInformation: BigPictureStyleInformation(
             const DrawableResourceAndroidBitmap('@mipmap/launcher_icon)'),
             largeIcon: const DrawableResourceAndroidBitmap('@mipmap/launcher_icon'),
             contentTitle: title,
             summaryText: description,
           ),
           enableVibration: true,
         );
    
         // iOS Notification Configuration
         DarwinNotificationDetails iOSPlatformChannelSpecifics = const DarwinNotificationDetails(
           sound: 'notification_sound.caf' // add the sound file name with the extension
         );
    
         NotificationDetails platformChannelSpecifics = NotificationDetails(
           android: androidPlatformChannelSpecifics,
           iOS: iOSPlatformChannelSpecifics
         );
    
         final InitializationSettings initializationSettings = InitializationSettings(
           android: initializationSettingsAndroid,
           iOS: initializationSettingsDarwin
         );
    
         // Show the notification
         await flutterLocalNotificationsPlugin.show(
           0,
           title,
           description,
           platformChannelSpecifics,
           payload: route,
         );
       }
     }
    

警告:

您的通知声音必须放置在两个位置才能在 Android 和 iOS 上正常运行。

对于 Android,请将其放置在

your_flutter_project/android/app/src/main/res/raw/notification_sound.mp3.

对于 iOS,在 XCode 上打开 ios/Runner.xcworkspace 并将声音放在根目录中。

确保您使用适用于 Android (.mp3) 和 iOS (.caf) 的适当文件扩展名。

我希望本指南可以帮助其他在 Flutter 中面临类似本地通知挑战的人。如果您有任何疑问或需要进一步说明,请随时询问!


-1
投票

您可以在主屏幕的 init 方法中调用以下方法

 void _requestPermissions() {
flutterLocalNotificationsPlugin
    .resolvePlatformSpecificImplementation<
        IOSFlutterLocalNotificationsPlugin>()
    ?.requestPermissions(
      alert: true,
      badge: true,
      sound: true,
    );
flutterLocalNotificationsPlugin
    .resolvePlatformSpecificImplementation<
        MacOSFlutterLocalNotificationsPlugin>()
    ?.requestPermissions(
      alert: true,
      badge: true,
      sound: true,
    );
  }
© www.soinside.com 2019 - 2024. All rights reserved.