Beispiel #1
0
 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()
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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))
Beispiel #6
0
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",