[ 개발 환경 ]
Centos 7.3
Python 3.8.2
1. 웹에서 비공개 키 파일 생성하여 저장
서비스 계정을 인증하고 Firebase 서비스에 액세스하도록 승인하려면 JSON 형식의 비공개 키 파일을 생성해야 합니다. 해당 작업은 아래 절차로 진행 가능합니다.
-
Firebase Console에서 설정 ( Setting or 톱니바퀴 아이콘 ) > 서비스 계정을 엽니다.
-
새 비공개 키 생성을 클릭하고 키 생성을 클릭하여 확인합니다.
-
키가 들어있는 JSON 파일을 안전하게 저장합니다.
- 작업의 편의를 위해 해당 파일명은 service-account-file.json 으로 해줍니다.
{
"type": "service_account",
"project_id": "billyo-c6fcc",
"private_key_id": "ccff05bb415296b2928092539e2894b2bb24f5e",
"private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvCPXLSKNBgkqhkiG9w0BAQDLSOWCBKcwggSjAgEAAoIBAQCJBsLi6BOOhHxj\nve0Uqbq1AbcBaizBxdq+fvSm0JN00zue4zOZ4oPWntaIsfvvUUfzFm4vhLIkI2rm\n7YeVZPBhcsb3fdH13C+lzVAL7YoHcecBDCNkEH/A3sYGBKW1deS3JrGau3PcnoSF\nQMYjHuGtrPmj+2gbFUbeHDbQusTVATodknKI3iZbjzYix1lIe2Ir2od+021cBRT8\npUwYSzflx+/nFFOCpis5dMhy3Vzr95x0fRAOqQMEgHKyOKR15RXK9kH6DHUSSpxJ\ntnAHQYKrcnmIKwSkf6QYFhtspv/xPlTz/9rz9S+dz1uftq/kaYiSj6vVptsge3fJ\nUvSLZgWdAgMBAAECggEALvH/EOg70wb26uEl+X9Q9TSaM0TiAp07nSo3vXMWId9A\nvOXQRveA/aW7kGeSDeLGCLV1mJgYxCLSPD3Cxt8nL+u32RDlPxtpw588vmlqcbSH\nVSeIdH7mlfh81ZEACNRUQJ9kF8QDJOG2O0T+3Qd2gB8UBCdc+nJmri/yY76pMuRR\nY+qkXpcTGO+XM1UDwzRTQyMZjG7rxSrFXcw2MkqNSCaG46xo5A3rjgGTivZMvZIJ\nWLWz6bEBhwpe8CJHdhb1fdJ8Dvx6Q2PQcQD7hFWzwm/RbAd90ADWrgQSshaS8XSW\n++Gonjh67qqgspMt1+K5X/DuzqcVivMHcs0KZNlXzQKBgQC7kTdhQqt6EAtAAmuu\nRW0yBmy7NUycbC+z/m602pI4O1eIAdEAf4ScGfh/a9hefziwn7FOHgXSw23S9Drs\n6eU0GZ1a7nA8hhrw8Fhosx7r74kxf6uzkya/Hs+lnPzlauyJ6bndqbWHKUozX77L\n9N3zV8cmw5DVG9ZtphKTF9vIKwKBgQC7BQejhRKamX6Z42ztz7aJ59stVN2o56QY\nWNOXPyxsAdK1vkziPsN6Qkga9XZ9HACSki/vsKn+JMZwVB0HxpN9zk6+vD/ASPv8\n4kutcj6FifFgzJgmsZyuNqoLhhBo5h77jG06XqgJsptaG1Mzcx/kU4hawK4M1f6G\ns7oXKOh9VwKBgQCNYsxlAzVxIFDqoih7SBgkolUp1OZ37tESk9LtfujDfG/htMTP\n5E+Yv7bije+eY7Xe5bFoWhc3pVrOro0Qcsr0N+62UY/G/6ulPPbXjVXcsUYwSrWp\n+l01qcsKYsj7QlslJkqVvUx5ovUsvpp68Yyw1tTm8nnlOkOriYjs2gow2wKBgGeE\nIjVFbAW8nlGpi1qaVSxB9JRD3CkohjCfwgZ+hiUGYU4NllrIaMScOXMKmNopDLwU\nRIpEW+N7EYeNV0A9jtfcwMNcSWEyRKA11bOcf7TEpKFyvWj1eIcJZNfaDe0yKsYL\ndU4QpKwxe0HFzCi3OVjVT60D55LdQ/PlOUSmdQEjAoGAFYobC6rZPh/NaMpOge5w\nx2VSVqJxZ02HKcNOPP2oVbrJ7W2KsViKFqrAIsw4zHpvWAv3bt9toNP+u0s1IwWN\nYtpLT/Rb4OvJ6a7dgN/DEDA25yyEq4uD5YiAvcw5+9yxqSwN9QWORyAYTdWZAbUG\nvZ1WtIwrJR0WnVm8I8NXiKA=\n-----END PRIVATE KEY-----\n",
"client_email": "firebase-adminsdk-pcbdk@testha-c6fcc.iam.gserviceaccount.com",
"client_id": "938574766458253444241",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/firebase-adminsdk-pcbdk%40testha-c6fcc.iam.gserviceaccount.com"
}
< 위 내용은 json 파일 예시입니다. >
2. firebase_admin 설치
pip install firebase-admin
3. firebase_admin 초기화
기본 앱 초기화를 해주는 소스 작성합니다.
# vim message_test.py
# Import the Firebase service
#from firebase_admin import auth
import firebase_admin
from firebase_admin import credentials
# Initialize the default app
cred = credentials.Certificate('/flask_api/fcm_test/service-account-file.json')
default_app = firebase_admin.initialize_app(cred)
print(default_app.name) # "[DEFAULT]"
4. Firebase 클라우드 메시징 - 특정 기기에 메시지 보내기 소스 추가 >>> 리눅스 환경변수를 이용하지 않고 소스 작성하는 CASE
!!! 4번 또는 5번 중 하나의 작업만 해주시면 됩니다. !!!
( registration_token 데이터는 특정 기기 / 특정 계정의 FCM token 데이터입니다. )
service-account-file.json 파일 저장은 아래 /flask_api/fcm_test/ 에 해두었습니다.
# vim message_test.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging
cred = credentials.Certificate('/flask_api/fcm_test/service-account-file.json')
default_app = firebase_admin.initialize_app(cred)
registration_token = 'd4Bz4euYRLitWis0amGGLI:APA91bGI-GGWD0HX9MyhHTG9V_DwymNU3qI55DmPaKReTRHLSOqIFOiodRsc3kjgSiBrdPYWM0m62xo_hMTRcB05gqvpJEZg6tJhqWQkKqZuFHfON2ujIfaHQehxaXZpjMn77X7W5bCL'
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
token=registration_token,
)
response = messaging.send(message)
print('Successfully sent message:', response)
그냥 데이터가 아니라 notification으로 보낸다면 아래와 같이 message 변수 내용만 바꿔주면 되겠습니다.
import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging
cred = credentials.Certificate('/flask_api/fcm_test/service-account-file.json')
default_app = firebase_admin.initialize_app(cred)
print(default_app.name) # "[DEFAULT]"
registration_token = 'd4Bz4euYRLitWis0amGGLI:APA91bGI-GGWD0HX9MyhHTG9V_DwymNU3qI55DmPaKReTRHLSOqIFOiodRsc3kjgSiBrdPYWM0m62xo_hMTRcB05gqvpJEZg6tJhqWQkKqZuFHfON2ujIfaHQehxaXZpjMn77X7W5bCL'
message = messaging.Message(
notification = messaging.Notification(
title="예약타이틀",
body="예약승인되었습니다.",
),
token=registration_token,
)
response = messaging.send(message)
print('Successfully sent message:', response)
5. Firebase 클라우드 메시징 - 특정 기기에 메시지 보내기 소스 추가 >>> 리눅스 환경변수를 활용하여 소스 작성하는 CASE
!!! 4번 또는 5번 중 하나의 작업만 해주시면 됩니다. !!!
아래 소스는 환경변수로 GOOGLE_APPLICATION_CREDENTIALS 값을 설정해줄 경우 정상작동시킬 수 있는 소스 예시입니다.
# vim /etc/profile
# ...
export GOOGLE_APPLICATION_CREDENTIALS="/flask_api/fcm_test/service-account-file.json"
( 리눅스 커맨드 ) $ source /etc/profile
# vim message_test.py
import firebase_admin
from firebase_admin import credentials
from firebase_admin import messaging
default_app = firebase_admin.initialize_app()
registration_token = 'd54f49frgjFDG4gR4rDFS:FKD92fF-FSKDGE9fdjEFhHTG9V_FDgrkdgGD5yRT53rEFSfdkEGFKD45EgSiSFDgfdE462Rsxo_GRE4gr4tefGGR3WDSA35ref3FEREWREgsgeSGe472ESesEt54'
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
token=registration_token,
)
response = messaging.send(message)
print('Successfully sent message:', response)
6. message_test.py 실행하여 확인
아래와 같이 문구 발생시 정상적으로 진행됨을 확인할 수 있습니다.
python message_test.py
< 참고자료 >
firebase_admin
https://firebase.google.com/docs/admin/setup#linux-%EB%98%90%EB%8A%94-macos
클라우드 메시징
https://firebase.google.com/docs/cloud-messaging/send-message