[ 개발 환경 ]

Centos 7.3

Python 3.8.2

 

 

 

 

1. 웹에서 비공개 키 파일 생성하여 저장

 

서비스 계정을 인증하고 Firebase 서비스에 액세스하도록 승인하려면 JSON 형식의 비공개 키 파일을 생성해야 합니다. 해당 작업은 아래 절차로 진행 가능합니다.

  1. Firebase Console에서 설정 ( Setting or 톱니바퀴 아이콘 ) > 서비스 계정을 엽니다.

  2. 새 비공개 키 생성을 클릭하고 키 생성을 클릭하여 확인합니다.

  3. 키가 들어있는 JSON 파일을 안전하게 저장합니다.

  4. 작업의 편의를 위해 해당 파일명은 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

 

 

+ Recent posts