Django REST Framework で Firebase Cloud Messaging (FCM) のメッセージ送信 API を実装する

シェアする

Django REST Framework で Firebase Cloud Messaging (FCM) のメッセージ送信 API を実装します。Firebase Cloud Messaging は、メッセージ受信とメッセージ送信の2つの実装が必要です。

この記事はメッセージ送信部分についての内容になります。プッシュ通知の送信側の実装ということですね。

実装イメージ

バージョン

  • 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 ブラウザにも対応しているので、今後は、積極的に実装していきたいと思います。

シェアする

フォローする