Firebase NotificationのMethod Swizzlingは無効化するべき?

通常、Firebaseで通知機能を使う場合SDKをインストールします。
内部では Method Swizzling という黒魔法的なものを使って実装されていますが、これを行わない設定も可能です。

Method Swizzlingを無効化する3つの手順

FirebaseAppDelegateProxyEnabled

Method Swizzlingを行わない場合、info.plistに FirebaseAppDelegateProxyEnabled を追加し、BooleanでNOを選択します。

これで、 Method Swizzling は行いませんが、代わりに自前でSDKがやってくれていた部分を実装せねばなりません。

mapping your APNs token

デバイストークンをFCMのトークンにマッピングする処理で、APNSに通信してデバイストークンを取得したあと、デバイストークンをFirebaseのサーバに送ります。

無効にしている場合、デリゲードを実装し、デバイストークンを自らの手でマッピングします。

downstream message callback handling

FMC (Firebase Cloud Messaginge) のトラッキングや分析に関する処理です。

Method Swizzlingを行わない場合、以下を実装する必要があります。

考察

この3つを行うことで、Method Swizzling を無効にした場合でも動作するようになります。

有効にするか、無効にするかプロジェクトで考える必要がありますが、各動作によってのメリット・デメリットを挙げてみました。

有効にした時

  • メリット
    • 黒魔法を使わないクリーンな実装ができる
  • デメリット
    • 黒魔法を使う
    • クラッシュする例も少しある

無効にした時

  • メリット
    • 黒魔法を使わないクリーンな実装ができる
  • デメリット
    • 自前部分の実装が大変

皆さんもFirebaseでPush通知を実装する際、参考にしてみてください。