やりたいこと
プッシュ通知について
・フォアグラウンド
・バックグラウンド
・未起動
の内、未起動状態からのログを確認したい。
使用するもの
- OSLog
- コンソール.app
- 実機端末(シミュレーターでもOK?)
OSLog
OSLog+Ext.swift
import os
extension OSLog {
/// Console.appで"サブシステム"の【FCM】でフィルタリングするとログを確認できる
static let fcmConsole = Logger(subsystem: "【FCM】", category: "Console")
}
AppDelegate.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
OSLog.fcmConsole.debug("【start】didFinishLaunchingWithOptions")
OSLog.fcmConsole.debug("launchOptions = \(String(describing: launchOptions))")
コンソール.app
- Macアプリ一覧からコンソールアプリを起動
- 対象デバイスを選択
- 画面右上のフィルターでサブシステムの【FCM】で絞り込み
課題:
- launchOptionsのログが
<private>
となって閲覧できていない - 多分FCM通知は今はdidFinishLaunchingWithOptionsでは取れない
launchOptionsのログが<private>
となって閲覧できない件の対応
Loggerのデフォルトが.privateになっているようなので、.publicで指定する。
OSLog.fcmConsole.debug("launchOptions = \(String(describing: launchOptions), privacy: .public)")
多分FCM通知は今はdidFinishLaunchingWithOptionsでは取れないの対応
UNUserNotificationCenterDelegateを使う
AppDelegate.swift
extension AppDelegate: UNUserNotificationCenterDelegate {
// アプリがフォアグラウンドでプッシュ通知を受信した場合に呼ばれる
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
OSLog.fcmConsole.debug("userInfo = \(String(describing: userInfo), privacy: .public)")
completionHandler([.banner, .badge, .sound])
}
// 通知センター等でプッシュ通知をタップした場合に呼ばれる
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
OSLog.fcmConsole.debug("userInfo = \(String(describing: userInfo), privacy: .public)")
completionHandler()
}
}
プッシュ通知をタップしてアプリ起動する
これでログを取得できるようになった。
Console.appについてのトラブルシューティング
- ログが出力されないとき
- MAC-iPhoneをケーブルで接続する
- 同一のWi-Fiに接続する
- Console.appを再起動する
- ログが重複して出力されるとき
- Console.appを再起動する