Created
December 30, 2020 14:20
-
-
Save felipeandradebezerra/57358345e521a4879fa7f69bf88e4db6 to your computer and use it in GitHub Desktop.
Revisions
-
felipeandradebezerra created this gist
Dec 30, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,115 @@ # -*- coding: utf-8 -*- """ Notificações através do Firebase Cloud Messaging (FCM) Firebase Cloud Messaging (FCM) é utilizado para disparo de mensagens push para dispositivos iOS, Android e Web. Esse classe dispara três tipos de mensagens: - Para Tópicos ou Canais - Para uma plataforma específica - Para um cliente específico """ import argparse import json import requests from oauth2client.service_account import ServiceAccountCredentials class FCM(object): BASE_URL = 'https://fcm.googleapis.com' SCOPES = ['https://www.googleapis.com/auth/firebase.messaging'] def __init__(self, projectId, keyFileName): self.PROJECT_ID = projectId self.KEY_FILE_NAME = keyFileName self.FCM_ENDPOINT = 'v1/projects/' + self.PROJECT_ID + '/messages:send' self.FCM_URL = self.BASE_URL + '/' + self.FCM_ENDPOINT ## # Retrieve a valid access token that can be used to authorize requests. # :return: Access token. def get_access_token(self): credentials = ServiceAccountCredentials.from_json_keyfile_name(self.KEY_FILE_NAME, self.SCOPES) access_token_info = credentials.get_access_token() print access_token_info.access_token return access_token_info.access_token ## # Envia uma requisição HTTP para o FCM # Args: # fcm_message: o objeto JSON com o corpo da requisiçào def send_message(self, fcm_message): headers = { 'Authorization': 'Bearer ' + self.get_access_token(), 'Content-Type': 'application/json; UTF-8', } resp = requests.post(self.FCM_URL, data=json.dumps(fcm_message), headers=headers) if resp.status_code == 200: return (True, resp.text) else: return (False, resp.text) ## # Notificação push para um dispositivo def build_token_message(self, title, body, token): return { 'message': { 'token': token, 'notification': { 'title': title, 'body': body } } } ## # Notificação push para um tópico def build_topic_message(self, title, body, topic): return { 'message': { 'topic': topic, 'notification': { 'title': title, 'body': body } } } ## # Customiza a mensagem def override_message(self, fcm_message): apns_override = { 'payload': { 'aps': { 'badge': 1 } }, 'headers': { 'apns-priority': '10' } } android_override = { 'notification': { 'click_action': 'android.intent.action.MAIN' } } fcm_message['message']['android'] = android_override fcm_message['message']['apns'] = apns_override return fcm_message # token do dispositio device_token = 'cibEZ...' topic = "novidades" fcm = FCM('ID_DO_PROJETO', 'SERVICE_ACCOUNT_KEY.JSON') device_message = fcm.override_message(fcm.build_token_message('TITULO', 'Mensagem push para dispositivo', device_token)) result, message = fcm.send_message(device_message) print result, message # Envia mensagem para o tópico topic_message = fcm.override_message(fcm.build_topic_message('TITULO', 'Mensagem push para tópico: ' + topic, topic)) result, message = fcm.send_message(topic_message) print result, message