# -*- 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