knaka Tech-Blog

AI, IoT, DIYエレクトロニクス, データサイエンスについて投稿予定です。

HTTPクライアントから、firebase Cloud Messaging 経由で、web プッシュ通知する。python3編

index:

概要:

前の firebase Cloud Messaging関連で、
チャット機能で、ブラウザ間の通信を
今回は、送信側はブラウザ無しで。python3 のPOST通信で
Cloud Messaging 送信するデモとなります

・raspberryPi からも、送信可能でした。
クラウドからのBot機能や、デバイスからセンサー値送信など
 応用面は、検討したいと思います。

環境

Laravel 5.8
aws
firebase Cloud Messaging
python3

参考のコード

前のチャット機能に、API等を追加しました。

github.com

画面

・push通知受信
f:id:knaka0209:20200220195132p:plain

・チャット画面
f:id:knaka0209:20200220201058p:plain

実装など

・fcm_send_post.py --python3. requests ライブラリを使用
https://github.com/kuc-arc-f/lara58a_6chat/blob/master/fcm_send_post.py

#
# fcm転送
# date : 2020/02/19
# python requests
#
import requests
import json
import pprint
import datetime
import threading
import time
import sys
import traceback

mNG_CODE=0
mOK_CODE=1
FCM_SERVER_KEY = " "

#
def fcm_send_push(  token, body ):
    try:
        response = requests.post(
            'https://fcm.googleapis.com/fcm/send',
            json.dumps({
                "notification":{
                    "title": "title-1",
                    "body": body,
                    "icon": "firebase-logo.png",
                    "click_action": "http://localhost:8081"						
                },
                "to": token
            }),
            headers={
                "Content-Type": "application/json",
                "Authorization": "key=" +FCM_SERVER_KEY
            }				
        )
        print(response.status_code)
        sText= response.text
        print( sText)
    except:
        print( "Error, send_push")
        raise
    finally:
        print( "End , send_push")
    return

#
def get_chat_members():
    chat_id ="1"
    mail = "aaa@hoge.com"
    #body = "body-0220a4"
    body = "10時になりました。お茶の時間です!!!"
    try:
        response = requests.post(
            'http://localhost:8000/api/apichats/get_send_members',
            {
                "chat_id": chat_id,
                "mail": mail
            }
        )
        print(response.status_code)
#        sText= response.text
#        print( sText)
        dec = json.loads(response.text)
        if(dec["member"]):
            fcm_send_push( dec["member"]["token"] , body )
#            print("token: " + dec["member"]["token"])
    except:
        print( "Error, get_chat_members")
        raise
    finally:
        print( "End , get_chat_members")
    return

#
if __name__ == "__main__":
    get_chat_members()
    quit()

・laravel のチャット機能から、API経由でFCM 送信先を取得
(チャットID, 送信先mail 等を指定)

・firebase サーバキー、上記の送信先を指定して
 HTTP - POST送信

・コントローラ/ web API
https://github.com/kuc-arc-f/lara58a_6chat/blob/master/app/Http/Controllers/ApiChatsController.php