MENU

【Flutter】flutter_local_notificatiosを使うための設定項目まとめ

記事内に商品プロモーションが含まれる場合があります

flutter_local_notificatiosパッケージを使う際のiOS、Androidの設定(アイコンやら音声やら)で少し手こずったので、メモとして残しておきます。

目次

iOS編

基本設定

AppDelegate.swift に以下を追加。

場所は GeneratedPluginRegistrant.register(with: self)の上あたりで。

if #available(iOS 10.0, *) {
  UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}

カスタム通知音の設定

通知音をデフォルトの音から変更したい場合は、Xcodeを開きResoucesというフォルダを作成してそのフォルダ内に音声ファイルを格納します。

格納できたら、NotificationDetailsのiOSの設定で、音声ファイルを指定します。

NotificationDetails(
    iOS: const DarwinNotificationDetails(
        badgeNumber: 0,
        sound: 'water_droplet.mp3' // Resoucesに格納した音声ファイルを記述
    ),
),

端末の設定

端末の集中モードはOFFにしておきましょう。

この設定がONになってると、通知が来ません。

シミュレーターでは通知が来るのに、実機テストで通知が来なくて、かなり時間を無駄にしました・・・。

Podfileの修正(permission_handlerを使う場合)

ユーザーから許可を取るのにpermission_handlerパッケージを使う場合は以下のようにPodfile内を変更します。

post_install do |installer|
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    ## 追記箇所 ここから
    target.build_configurations.each do |config|
      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',
        # dart: PermissionGroup.notification
        'PERMISSION_NOTIFICATIONS=1',
      ]
    end
    ## 追記箇所 ここまで
  end
end

Android編

通知アイコンの保存先

以下のフォルダの中に通知に使うアイコンを格納します。

android/app/src/main/res/drawable

格納したアイコンを、AndroidInitializationSettingsで指定すればOKです。

 const AndroidInitializationSettings initializationSettingsAndroid = AndroidInitializationSettings(
    "notification_icon"
 );

カスタム通知音の設定

通知音とデフォルトの音から変更したい場合は以下のフォルダにファイルを格納します。

android/app/src/main/res/raw

rawフォルダはないので、作成する必要があります。

格納できたら、NotificationDetailsのAndroidの設定で、音声ファイルを指定します。

  NotificationDetails(
      android: AndroidNotificationDetails(
          'your-channel-id',
          'your-channel-name',
          channelDescription: 'your channel description',
          importance: Importance.max,
          priority: Priority.high,
          sound: RawResourceAndroidNotificationSound("water_droplet"), // カスタム通知音を設定
          playSound: true,
      ),
),

パーミッション等の設定

AndroidManifest.xmlに追記するとOKです。

<!--  <manifest></manifest>に追加 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

<!--  <application></application> に追加 -->
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationReceiver" />
<receiver android:exported="false" android:name="com.dexterous.flutterlocalnotifications.ScheduledNotificationBootReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"/>
        <action android:name="android.intent.action.MY_PACKAGE_REPLACED"/>
        <action android:name="android.intent.action.QUICKBOOT_POWERON" />
        <action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
    </intent-filter>
</receiver>

Flutterが学べる書籍

Share

Comment

コメントする

目次