Kaynağa Gözat

极光推送指定设备

locky 5 ay önce
ebeveyn
işleme
727517f794
3 değiştirilmiş dosya ile 54 ekleme ve 4 silme
  1. 3 0
      AnsjerPush/config.py
  2. 8 4
      Service/DevicePushService.py
  3. 43 0
      Service/PushService.py

+ 3 - 0
AnsjerPush/config.py

@@ -22,6 +22,9 @@ CONFIG_EUR = 'eur'
 SERVER_TYPE = os.environ.get('DJANGO_SETTINGS_MODULE')
 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 
+# redis列表
+JPUSH_UID_LIST = 'jpush_uid_list'
+
 # 华为云配置
 HUAWEICLOUD_AK = 'TN9T7ZPN3QRBBQ9NQHNB'
 HUAWEICLOUD_SK = 'rIlTBJ85MUC1WNLyJBZM2077HTsQ0qJaJf4IpTjU'

+ 8 - 4
Service/DevicePushService.py

@@ -22,12 +22,13 @@ from obs import ObsClient
 from AnsjerPush.Config.aiConfig import DEVICE_EVENT_TYPE, ALGORITHM_COMBO_TYPES
 from AnsjerPush.config import CONFIG_INFO, CONFIG_CN, MULTI_CHANNEL_TYPE_LIST, SYS_EVENT_TYPE_LIST, AWS_ACCESS_KEY_ID, \
     AWS_SECRET_ACCESS_KEY, EVENT_DICT, EVENT_DICT_CN, CONFIG_TEST, HUAWEICLOUD_AK, HUAWEICLOUD_SK, \
-    HUAWEICLOUD_OBS_SERVER, HUAWEICLOUD_PUSH_BUKET, OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
+    HUAWEICLOUD_OBS_SERVER, HUAWEICLOUD_PUSH_BUKET, OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET, JPUSH_UID_LIST
 from AnsjerPush.config import XMPUSH_CONFIG, OPPOPUSH_CONFIG, XM_PUSH_CHANNEL_ID, XM_PUSH_CHANNEL_DICT
 from Model.models import UidPushModel, SysMsgModel, DeviceSharePermission, DeviceChannelUserSet, \
     DeviceChannelUserPermission, UidSetModel, Device_Info, UserAudioVideoPush, PushLog
 from Object.ETkObject import ETkObject
 from Object.OCIObjectStorage import OCIObjectStorage
+from Object.RedisObject import RedisObject
 from Object.UidTokenObject import UidTokenObject
 from Object.enums.ConstantEnum import ConstantEnum
 from Object.enums.EventTypeEnum import EventTypeEnumObj
@@ -458,9 +459,12 @@ class DevicePushService:
                     elif push_type == 1:  # android gcm
                         push_result = PushObject.android_fcm_push_v1(**kwargs)
                     elif push_type == 2:  # android jpush
-                        kwargs.pop('uid')
-                        push_result = PushObject.android_jpush(**kwargs)
-
+                        uid = kwargs.pop('uid')
+                        redis_obj = RedisObject()
+                        jpush_uid_list = redis_obj.lrange(JPUSH_UID_LIST, 0, -1)
+                        jpush_uid_list = [str(i, 'utf-8') for i in jpush_uid_list]
+                        if uid in jpush_uid_list:
+                            push_result = PushObject.jpush(**kwargs)
                 elif push_type == 3:
                     if kwargs["appBundleId"] == ConstantEnum.ZOSI_APP_BUNDLE_ID.value:
                         huawei_push_object = HuaweiPushObject()

+ 43 - 0
Service/PushService.py

@@ -23,6 +23,7 @@ from AnsjerPush.config import APP_BUNDLE_DICT, APNS_MODE, BASE_DIR, APNS_CONFIG,
 from Model.models import UidPushModel
 from Object.RedisObject import RedisObject
 from Object.S3Email import S3Email
+from Object.enums.EventTypeEnum import EventTypeEnumObj
 from Service.CommonService import CommonService
 from Service.VivoPushService.push_admin.APIMessage import PushMessage
 from Service.VivoPushService.push_admin.APISender import APISender
@@ -282,6 +283,48 @@ class PushObject:
             LOGGER.info('uid:{},time:{},极光推送异常:{}'.format(nickname, n_time, repr(e)))
             return False
 
+    @staticmethod
+    def jpush(nickname, app_bundle_id, token_val, n_time, event_type, msg_title, msg_text, channel=1):
+        """
+        android 极光 推送
+        @param nickname: 设备昵称
+        @param app_bundle_id: app包id
+        @param token_val: 推送token
+        @param n_time: 当前时间
+        @param event_type: 事件类型
+        @param msg_title: 推送标题
+        @param msg_text: 推送内容
+        @param channel: 设备通道
+        @return: bool
+        """
+        try:
+            app_key = JPUSH_CONFIG[app_bundle_id]['Key']
+            master_secret = JPUSH_CONFIG[app_bundle_id]['Secret']
+            # 换成各自的app_key和master_secret
+            _jpush = jpush.JPush(app_key, master_secret)
+            push = _jpush.create_push()
+            push.audience = jpush.registration_id(token_val)
+            if event_type in EventTypeEnumObj.DATA_PUSH_EVENT_TYPE_LIST.value:
+                channel_id = '111934'
+            else:
+                channel_id = '1'
+            push_data = {'alert': msg_text, 'msg': '', 'sound': 'sound.aif', 'zpush': '1', 'uid': nickname,
+                         'received_at': n_time, 'event_time': n_time, 'event_type': event_type, 'nickname': nickname,
+                         'channel': channel
+                         }
+            android = jpush.android(title=msg_title, big_text=msg_text, alert=msg_text, extras=push_data,
+                                    priority=1, style=1, alert_type=7, channel_id=channel_id
+                                    )
+            push.notification = jpush.notification(android=android)
+            push.platform = jpush.all_
+            res = push.send()
+            assert res.status_code == 200
+            LOGGER.info('极光推送响应:{}, 参数:{}, 令牌:{}'.format(res, push_data, token_val))
+            return True
+        except Exception as e:
+            LOGGER.info('极光推送异常:{}'.format(repr(e)))
+            return False
+
     @staticmethod
     def android_xmpush(channel_id, nickname, app_bundle_id, token_val, n_time, event_type, msg_title, msg_text,
                        uid='', channel='1', image=''):