Django REST Framework で Firebase Cloud Messaging (FCM) のメッセージ送信 API を実装します。Firebase Cloud Messaging は、メッセージ受信とメッセージ送信の2つの実装が必要です。
この記事はメッセージ送信部分についての内容になります。プッシュ通知の送信側の実装ということですね。
Contents
実装イメージ
バージョン
- CentOS 7.4.1708
- Python 3.6.4
- Django 2.0.3
- Django REST Framework 3.8.2
- Firebase Admin SDK 2.13.0
インストール
ブッシュ通知の送信側を実装するための環境を構築していきます。
Python
$ sudo yum install -y https://centos7.iuscommunity.org/ius-release.rpm $ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip
Python 3.6 をインストールします。
Django
$ sudo pip install django
次に Django をインストールします。
Django REST Framework
$ sudo pip install djangorestframework
その次は、Django REST Framework です。
Firebase Admin SDK
$ sudo pip install firebase-admin
最後に、Firebase Admin SDK をインストールします。インストールは、オフィシャルのインストール方法(SDK を追加する)に従います。と言っても、普通に pip install です。
Firebase
秘密鍵の生成とダウンロード
Firebase のプロジェクトから秘密鍵を生成し、ダウンロードします。このファイルは、プログラムに埋め込んで Firebase に接続する際に利用します。利用方法については、後述したいと思います。
実装
settings.py
ALLOWED_HOSTS = ['*'] INSTALLED_APPS = [ ... 'rest_framework', 'api.apps.ApiConfig', ] FIREBASE_CERTIFICATE = os.path.join(BASE_DIR, 'Your firebase certificate json')
先ほどダウンロードした秘密鍵ファイルを settings.py で定義し、環境毎に切り替えられるようにしておきます。
views.py
import firebase_admin from firebase_admin import messaging, credentials from django.conf import settings from rest_framework import viewsets, status from rest_framework.parsers import JSONParser from rest_framework.response import Response from api.serializers import MessagingSerializer def initialize_firebase_admin_sdk(): cred = credentials.Certificate(settings.FIREBASE_CERTIFICATE) if firebase_admin._DEFAULT_APP_NAME not in firebase_admin.apps: firebase_admin.initialize_app(cred) class MessagingViewSet(viewsets.ViewSet): parser_classes = (JSONParser,) def create(self, request): serializer = MessagingSerializer(data=request.data) if serializer.is_valid(): initialize_firebase_admin_sdk() firebase_admin.get_app() notification = messaging.Notification(title=params['title'], body=params['body']) apps = messaging.APNSConfig(payload=messaging.APNSPayload(aps=messaging.aps(badge=params['badge']))) token = params['token'] message = messaging.Message( notification=notification, apns=apns, token=token, ) messaging.send(message) return Response(serializer.data, status=status.HTTP_200_OK) else: return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
views.py です。秘密鍵を読み込んで Firebase SDK を初期化します。
シリアライザのバリデーションが通ればプッシュ通知を送信するようにしています。
Firebase Cloud Messaging 関数の詳細については、オフィシャルのこちら(firebase_admin.messaging module)を参照してください。
serializers.py
from rest_framework import serializers class MessagingSerializer(serializers.Serializer): token = serializers.CharField() title = serializers.CharField() body = serializers.CharField() badge = serializers.IntegerField()
serializers.py です。今回作成した API は、token と タイトル、本文、そしてバッチをパラメータにしました。
urls.py
from django.urls import path, include from rest_framework import routers from api.views import MessagingViewSet router = routers.DefaultRouter() router.register('messaging', MessagingViewSet, 'messaging') urlpatterns = [ path('api/', include(router.urls)), ]
動作確認
runserver
$ python3.6 manage.py rumserver 0.0.0.0:8000
Django デバッグサーバの runserver を起動し、ブラウザで、http://[Your IP]:8000/api/messaging/ にアクセスすると、DRF のフォームが出てきますので、そこに JSON形式でパラメータを入力し、POST すると、プッシュ通知が送信されます。
正常に処理できていれは、アプリや Web でプッシュ通知を受信し、送信した内容を確認できると思います。
まとめ
Django REST Framework で Firebase Cloud Messaging (FCM) のメッセージ送信 API を実装しました。
Firebase Cloud Messaging (FCM) は、iOS アプリや Android アプリだけでなく、Web ブラウザにも対応しているので、今後は、積極的に実装していきたいと思います。