PythonでFirebase Cloud Messaging with Django REST Framework

どうもこんにちは

Firebase Cloud MessagingをAPIからキックしてみよう、というお話です。
本当はLaravelで何とかしたかったのですが、
いかんせんFirebase Admin SDKのPHP版がない!?いや、あるんだけど公式ではない(ゴニョゴニョ・・・
ということで、さっくりLaravelはあきらめて、今回はDjangoです。

コチラのサイトを参考にさせていただきました。
Django REST Framework で Firebase Cloud Messaging (FCM) のメッセージ送信 API を実装する
https://leben.mobi/blog/fcm_api/python/

今回の環境は、こんな感じです。

・Windows 7
・Python 3.6
・Django 2.1.7
・Firebase のプロジェクトは作成済み

では、始めます。


Django REST Framework のインストール

Django で RESTFulなAPIといえば、これ一択ですよね。
偉そうなこと言うてますが、初めて使います。
ともあれ、pipでインストールです。
Virtualenvなときは、activateするのを忘れずに。

ご参考までに、
Django REST Framework(以下、DRF)とは、RESTFulなAPIをいとも簡単に実装できてしまう
パワフルなFrameworkです。もちろん、Web画面とも共存できます。

公式ドキュメントはコチラ ⇒ Home – Django REST framework
種々解説サイトはあるのですが、個人的に一番わかりよいのはコチラ ⇒ Django REST Frameworkを使って爆速でAPIを実装する


Firebase Admin SDK をインストール

こちらもpipでインストールです。

ちなみに、Firebaseとは?
Googleが提供しているmBaaS(mobile Backend as a Service)です。
Cloud Messagingのほかに、SNS認証やNoSQLなDatabaseなど、モバイルアプリを作るのに
必要そうな機能を一つにまとめたサービスです。
こういうのを駆使して、いわゆるサーバレスアーキテクチャが成立してるのかー
時代は進んだなー(遠い目)と思わせるシロモノです。


Firebase で秘密鍵をダウンロード

プロジェクトから、秘密鍵をダウンロードします。
すでにダウンロード済みの場合はそれを使えばよいのですが、今回は新規なので、作ります。
プロジェクトの設定 > サービスアカウントを選択します。

「新しい秘密鍵の生成」ボタンをクリックして、ダウンロードします。
ダウンロードしたら、Djangoプロジェクトの中に保存します。


実装!

それでは実装に入ります。
なお、今回はapiという名前のアプリケーションを作りました。
プロジェクト名は、prjです。

prj/setting.py

アプリケーションとDRF、Firebase秘密鍵のパスを記入します。

必要に応じて、他も編集しておきましょう。

api/serializer.py

Serializerとは、DRFで扱うデータ入出力用のインターフェース、
DjangoでいうFormみたいなもの?という認識です(間違ってたらスミマセン)。
ちゃんとした解説は、いつも公式ドキュメントに頼ります。 ⇒ Serializers – Django REST Framework

今回は、token, title, bodyを受け付けるようにします、

ちなみに、ここでのtokenは、公式ドキュメントによると
「エンドユーザー クライアント アプリのインスタンスごとにクライアント FCM SDK によって生成される文字列です。」
だそうです。FCM SDKについては、説明を割愛します。
今回は、ただリクエストから受け付けるのみです。

api/views.py

ViewSetクラスを継承して、apiの実装を行います。
Firebaseのドキュメントにしたがって、こんな感じにしています。
公式ドキュメントはコチラ ⇒ メッセージを送信する | Firebase

ViewSetクラスにはいくつかアクションが定義されています。
公式ドキュメントはコチラ ⇒ ViewSets – Django REST Framework

endpoint HTTPメソッド アクション名
リソース名 GET list
リソース名 POST create
リソース名/id/ GET detail
リソース名/id/ POST update
リソース名/id/ PUT update_partial
リソース名/id/ DELETE delete

いったんidなしのPOSTでアクセスする想定なので、createで実装しました。

prj/url.py

ルーティングの設定をします。
本来なら、api/urls.pyを作ってそちらに・・・
としたいところですが、今回はプロジェクト直下のurls.pyに入れてしまいます。

ここまでで、必要な実装はおしまいです。


送信してみる

さて、サーバを起動しましょう。

で、下記のURLにアクセスします。

http://localhost:8000/api/messaging

と、こんな画面が出ます。

あとはcontent:にJSON文字列を書いて、POSTすればテストできます。
# いやぁ、世の中便利になったもんだ。


あとがき

意外とさっくり実装までできました。
views.pyの送信部分をandroidに対応したり、Webに対応したり。
topicsの作成、削除を実装したり。
これをベースに、FCM用APIがすぐ作れそうです。

R.TANAKAがお届けしました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です