Flutterでアプリ開発を進めるにあたって、プッシュ通知は必須機能のひとつですが、Firebase Cloud Messagingの利用がもっとも手軽に始められます。FCMはGoogleのサービスということもありますので、Androidの設定は問題なく行えるのですが、iOSのプッシュ通知がうまくいかず悩んでいる方も多いと思います。今回はiOSでも正しく通知を受信できるようにする方法を紹介したいと思います。
Firebase Cloud Messaging(FCM)はメッセージを送信するためのメッセージングサービスです。新しいメールやその他のデータがあることをアプリに通知メッセージを送信することができます。Flutterでアプリ開発を進めるにあたり、導入しておきたい機能のひとつです。
FCMはFirebaseサービスの一つで、導入方法はすでに多くのブログや動画でも紹介されていますので今回は導入方法は割愛し、iOSで正しくプッシュ通知が行われるために、ほかでは紹介されていなかったところだけを取り上げていきたいと思います。開発に携わっている皆さんの参考になれば幸いです。
ios/Runner/AppDelegate.swiftを以下の通りに修正。
import UIKit
import Flutter
import Firebase
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
FirebaseApp.configure()
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { _, _ in }
)
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
Podfile内にpod 'Firebase/Messaging'を追加 use_modular_headers!の下あたりに追加します。
target 'Runner' do
use_frameworks!
use_modular_headers!
pod 'Firebase/Messaging'
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
Firebaseのコンソールページでプロジェクトの概要設定->Cloud Messagingタブへ移動。登録したiOSアプリのAPNs認証キーで開発用と本番環境用APNs証明書(p12)をアップロード