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>
Comment