#はじめに
みなさん、最近楽しくアプリを開発していますか?スマートデバイス横断チームのduanです。今回はFirebaseの推進に伴い、プッシュ通知の共通ライブラリを作った話をさせていただきます。
#Firebaseとは
アプリ開発者としてもう知らない人はいないでしょう。今年のGoogle I/Oで発表され、現在最も熱いスマートフォン開発プラットフォームでもあります。ログ解析、データベース、 プッシュ通知、A/Bテストなどアプリ開発上に必要な機能をAll In Oneで提供され、開発、施策、分析のサイクルを今までより効率的に実施できるようになっています。また、ユーザープロパティーとイベントの組み合わせて、より高度なターゲッティングユーザーリストを作成でき、アプリ施策(プッシュ通知、広告など)で簡単に利用することができます。
(公式サイト:Firebase)
#ライブラリ作成
###経緯
社内都合上、Firebase Notificationsを利用した配信ではなく、API経由方式の配信を採用することになり、Firebase Notificationsの一部機能や計測イベントを自前で実装する必要が出ています。それを受けて、共通的な実装をまとめてライブラリとして提供することになりました。
###ライブラリで実現したいこと
1. FCM API経由配信の共通機能を実装
2. Firebase SDKのバージョン管理
3. 自社ビジネス要求に満たすデータ計測機能の共通実装
###全体構成と配信流れ
①ライブライリ側でFCM Tokenを取得し、Firebaseに送信する。
②配信先リストを抽出する為のユーザープロパティーをFirebaseに送信する。
③FirebaseのBigQuery連携機能を利用して、送信されたデータをBigQueryから参照できるようにする。また、社内管理しているデータと結合し、配信先リストを生成する。
④自社サーバでメッセージ識別子を生成し、計測有効期限も含め、FCM(API)経由で配信を依頼する。
⑤Firebaseから配信実施する。
⑥効果測定イベント(受信、開封、コンバージョンなど)をFirebaseに送信する。
###いくつかの実装方針
#####1. Android, iOS配信処理の相違点を意識したpayload利用
採用方針は下記のようになっています。
OS | paylaod利用 | 理由 |
---|---|---|
Android | dataのみ | notification指定且つbackgroundである時、通知が自動的にSystem trayに入り、受信時独自実装できない為 |
iOS | notification, data | backgroundで受信する為にnotificationの指定が必要になる |
なぜAndroidでdata payloadのみ利用するかを簡単に説明しましょう。
公式ドキュメントHandling messagesで下記内容が書かれていて、実際技術検証でも
確認できています。
App state | Notification | Data | Both |
---|---|---|---|
Foreground | onMessageReceived | onMessageReceived | onMessageReceived |
Background | System tray | onMessageReceived | Notification: system tray Data: in extras of the intent. |
Android側でNotification payloadが入っている場合、backgroundにある時通知がsystem trayに自動的に入り、受信イベント取得や通知表示のカスタム処理ができなくなるので、止む得ずdata payloadのみ指定する方針になりました。そのため、共通ライブラリ側Notifications payloadを同様に機能を実装する必要があり、iOSより実装工数及び考慮すべきところを大幅に増えました。 |
#####2. FCM Token管理方式
現時点でBigQuery上に自動的に送信、管理されていない為、自社管理データと結合して配信先リストを抽出する要件を満たす為に、独自で実装し、管理する必要があります。下記のように三つの案を検討しました。
検討案 | メリット | デメリット |
---|---|---|
カスタムイベントで管理 | BigQuery連携できる、実装工数が少ない | データ抽出する時工夫が必要 |
User Propertyで管理 | BigQuery連携できる、実装工数が少ない | 長さ制限の原因、複数User Propertyを利用する必要がある。 |
自社サーバでマッピング表を持つ | 一般的な実装方法 | 実装工数がかかる |
社内BigQuery利用したデータ解析することもあり、できればBigQuery上で管理したい、また、個数制限(最大25個)もあり、User Propertyを極力利用したくありません。最終的にカスタムイベントで管理する案を採用しました。 |
#####3. 共通計測イベントの実装
現状FCM API経由の配信でFirebase Console, BigQuery上でデータ確認できない為、独自で現在Notificationsで自動取得できた下記イベントをFirebase上で管理できるように実装しました。
OS | イベント | 対応するNotificationsイベント |
---|---|---|
Android | 受信、開封、Dismiss | notification_forground, notification_background,notification_open,notification_dismiss |
iOS | 受信、開封 | notification_forground, notification_open |
#まとめ
Firebaseが世の中に出たのはまだ1年未満ですが、Google側で積極的に開発者要望を取り入れて機能更新を進めていて、凄く将来性を感じています。今後も引き続き注目して、こちらのライブラリを進化しつつ、他の機能もどんどん試していきたいと思います。また、今回のライブラリ作成を通して、FCMの配信仕様を深く理解できたのはもちろん、利用者視点のインタフェース設計の重要性も改めて認識しました。