def clean_token(self): push_service = FCMNotification( api_key=self.env['ir.config_parameter'].sudo().get_param( 'mail_notify.fcm_server_key')) tokens = self.sudo().search([]).mapped('token') tokens = push_service.clean_registration_ids(tokens) self.sudo().search([('token', 'not in', tokens)]).unlink()
def send_notification_teacher_activity(activity): push_service = FCMNotification( api_key=settings.CONFIG_FCM_TEACHER["api_key"]) message_title = False message_body = "" if activity.state == "NEW": message_title = "فعالیت جدید." try: school_name = School.objects.filter( id=activity.school_id).get().name message_body = "فعالیت جدید از مدرسه " + school_name except: pass elif activity.state == "SHR": message_title = "فعالیت دوباره بررسی شود." message_body = "فعالیت با عنوان " + activity.title + " نیاز به بررسی دارد." student = Student.objects.filter( id=activity.student_id).select_related("school") if student and message_title: student = student.get() activity_images = activity.get_images() data_message = { "title": message_title, "body": message_body, "action": "check_activity", "activity_id": activity.id, "activity_image_url": activity_images[0].image.url } user = FcmTokenUser.objects.filter(user_id=student.school.teacher_id) save_notification(student.school.teacher_id, message_title, message_body, data_message) if user and message_title: registration_ids = [] tokens = user.get() if tokens.mobile_token: registration_ids.append(tokens.mobile_token) if tokens.web_token: registration_ids.append(tokens.web_token) valid_registration_ids = push_service.clean_registration_ids( registration_ids) result = push_service.notify_multiple_devices( registration_ids=valid_registration_ids, data_message=data_message) logger_v1.info("send_notification_teacher_activity", extra={"detail": { "response": result }}) return result
def send_notification_student_activity(activity): push_service = FCMNotification( api_key=settings.CONFIG_FCM_STUDENT["api_key"]) message_title = False message_body = "" action = "open_activity" if activity.state == "ACCEPT": message_title = "فعالیت شما تایید شد." message_body = "فعالیت شما با عنوان " + activity.title + " تایید شد" elif activity.state == "SHE": message_title = "فعالیت شما نیاز به ویرایش دارد." message_body = "فعالیت شما با عنوان " + activity.title + " نیاز به ویرایش دارد." action = "edit_activity" user = FcmTokenUser.objects.filter(user_id=activity.student_id) activity_images = activity.get_images() data_message = { "title": message_title, "body": message_body, "action": action, "activity_id": activity.id, "activity_image_url": activity_images[0].image.url } save_notification(activity.student_id, message_title, message_body, data_message) if user and message_title: tokens = user.get() registration_ids = [] if tokens.mobile_token: registration_ids.append(tokens.mobile_token) if tokens.web_token: registration_ids.append(tokens.web_token) valid_registration_ids = push_service.clean_registration_ids( registration_ids) result = push_service.notify_multiple_devices( registration_ids=valid_registration_ids, data_message=data_message) logger_v1.info("send_notification_student_activity", extra={"detail": { "response": result }}) return result
def created_post(sender, instance, created, **kwargs): if created: user_log = UserLog.objects.create(user=instance.user, content=LOG_POST) user_unique_log = UserUniqueLog.objects.update_or_create( user=instance.user) try: with transaction.atomic(): from pyfcm import FCMNotification push_service = FCMNotification(api_key=texts.FCM_API_KEY) # registration_ids = [] # registration_ids.append(instance.user.userfirebaseinstanceid.instance_id) text = "none" ping_id = "none" if instance.ping_id is not None and instance.ping_text is None: # 핑 텍스트 기본값 text = "need_ping_text" ping_id = instance.ping_id elif instance.ping_text is not None: # 핑은 있되 핑 텍스트는 바뀜 text = instance.ping_text else: # 핑도없고 핑 텍스트도 없고 포스트텍스트 text = instance.text from baseapp.constants import FCM_OPT_POST data_message = { "opt": FCM_OPT_POST, "full_name": instance.user.userfullname.full_name, "photo": instance.user.userphoto.file_300_url(), "instance_id": uuid.uuid4().hex, "ping_id": ping_id, "text": text } id_list = [] follows = Follow.objects.filter(follow=instance.user) for follow in follows: if follow.user.userfirebaseinstanceid.instance_id is not None and follow.user is not instance.user: id_list.append( follow.user.userfirebaseinstanceid.instance_id) valid_id_list = push_service.clean_registration_ids(id_list) print("valid id list: " + str(valid_id_list)) result = push_service.notify_multiple_devices( registration_ids=valid_id_list, data_message=data_message) except Exception as e: print(e) pass
def push_notify(title, body, library): try: push_service = FCMNotification(api_key=firebase_api) with open(tokenLocation, 'r') as file: token_json = json.loads(file.read()) for jsonobj in token_json: if jsonobj['name'] == library: registration_ids = jsonobj["token"] valid_registration_ids = push_service.clean_registration_ids( registration_ids) result = push_service.notify_multiple_devices( registration_ids=valid_registration_ids, message_title=title, message_body=body) except Exception as e: app.logger.error("Error sending push notification: " + str(e))
def send_notification_for_new_answer_to_teacher(question_id, creator_id): push_service = FCMNotification( api_key=settings.CONFIG_FCM_STUDENT["api_key"]) message_title = "پاسخ جدیدی به جواب شما داده شد." message_body = "" data_message = { "title": message_title, "body": message_body, "action": "new_answer", "question_id": question_id } user = FcmTokenUser.objects.filter(user_id=creator_id) save_notification(creator_id, message_title, message_body, data_message) if user.exists(): registration_ids = [] tokens = user.get() if tokens.mobile_token: registration_ids.append(tokens.mobile_token) if tokens.web_token: registration_ids.append(tokens.web_token) valid_registration_ids = push_service.clean_registration_ids( registration_ids) result = push_service.notify_multiple_devices( registration_ids=valid_registration_ids, data_message=data_message) logger_v1.info("send_notification_for_new_answer", extra={"detail": { "response": result }}) return result
class GFireBase: def __init__(self, channel): self.config = channel.config self.push_service = FCMNotification(api_key=settings.FCM_API_SERVER_KEY) def notify_single(self, message): # TODO: Add model for subscribe list_username = list(message.user.all().values_list("username", flat=True)) subscriptions = Subscribe.objects.filter( user__username__in=list_username, channel_id=message.channel.id, active=True).values_list('contact', flat=True) list_contact = [] for contacts in subscriptions: for contact in contacts: list_contact.append(contact) subscriptions = list(list_contact) valid_registration_ids = self.push_service.clean_registration_ids(subscriptions) image = message.data.get('image') click_url = message.data.get('url') result = self.push_service.notify_multiple_devices(registration_ids=valid_registration_ids, message_title=message.title, message_body=message.body, extra_notification_kwargs={"image": image}, data_message=message.data, click_action="FLUTTER_NOTIFICATION_CLICK", content_available=True, extra_kwargs={"mutable_content": True} ) return result def notify_broadcast(self, message): image = message.data.get('image') click_url = message.data.get('url') topic = message.data.get("topic") user_type = message.data.get("user_type") if message.data.get("user_type") else "unknown_user" channel = message.channel topic_channel = f"{channel.type}_{user_type}" result = self.push_service.notify_topic_subscribers(topic_name=topic_channel, message_title=message.title, message_body=message.body, extra_notification_kwargs={"image": image}, data_message=message.data, click_action="FLUTTER_NOTIFICATION_CLICK", content_available=True, extra_kwargs={"mutable_content": True}) return result def subscribe_topic(self, channel, registration_ids): topic_channel = f"{channel.type}" registration_ids = list(registration_ids) result = self.push_service.subscribe_registration_ids_to_topic(registration_ids, topic_channel) return result def unsubscribe_topic(self, channel, registration_ids): topic_channel = f"{channel.type}" registration_ids = list(registration_ids) result = self.push_service.unsubscribe_registration_ids_from_topic(registration_ids, topic_channel) return result def validate_registration_id(self, token_id): subscriptions = list(token_id) print(subscriptions) valid_registration_ids = self.push_service.clean_registration_ids(subscriptions) print(valid_registration_ids) if len(valid_registration_ids) > 0: return True, valid_registration_ids return False, []
received_message = json.loads(format(msg.value().decode('utf-8'))) print 'Received message:',json.dumps(received_message) apikeys = config.APPID if received_message["appid"] in apikeys and apikeys[received_message["appid"]]: api_key = apikeys[received_message["appid"]] push_service = FCMNotification(api_key=api_key) data = received_message["jsondata"] if "jsondata" in received_message else "" if "to_notify_userids" in received_message and received_message["to_notify_userids"]: registration_ids = received_message["to_notify_userids"].keys() valid_registration_ids = push_service.clean_registration_ids(registration_ids) try: result = push_service.notify_multiple_devices(registration_ids=valid_registration_ids,data_message=data) print result delivered = { "appid":received_message["appid"], "platform":received_message["platform"], "eventid":received_message["_id"], "action":"delivered_users", "udids":[], "mobiles":[] } not_delivered = { "appid":received_message["appid"], "action":"delete_users",