Przeglądaj źródła

vivo、oppo推送结合极光透传实现一键通话

peng 2 lat temu
rodzic
commit
6a46e24b2d
3 zmienionych plików z 44 dodań i 5 usunięć
  1. 1 0
      Model/models.py
  2. 10 2
      Service/DevicePushService.py
  3. 33 3
      Service/PushService.py

+ 1 - 0
Model/models.py

@@ -1195,6 +1195,7 @@ class UidPushModel(models.Model):
     app_type = models.IntegerField(default=0, verbose_name=u'app类型 1:ios,2:安卓')
     push_type = models.IntegerField(default=0, verbose_name=u'推送类型')  # 0: apns, 1: 安卓gcm, 2: 极光, 3:华为, 4:小米, 5:vivo, 6:oppo, 7:魅族
     token_val = models.CharField(default='', max_length=160, verbose_name=u'设备验证令牌')
+    jg_token_val = models.CharField(default='', max_length=500, verbose_name=u'极光推送令牌')
     m_code = models.CharField(default='', max_length=64, verbose_name='手机唯一标识')
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)

+ 10 - 2
Service/DevicePushService.py

@@ -72,7 +72,8 @@ class DevicePushService:
             uid_push_qs = UidPushModel.objects.filter(uid_set__uid=uid, userID_id=primary_user_id). \
                 values('token_val', 'app_type', 'appBundleId', 'm_code', 'push_type', 'userID_id', 'userID__NickName',
                        'lang', 'm_code', 'tz', 'uid_set__nickname', 'uid_set__detect_interval', 'uid_set__detect_group',
-                       'uid_set__channel', 'uid_set__ai_type', 'uid_set__device_type', 'uid_set__new_detect_interval')
+                       'uid_set__channel', 'uid_set__ai_type', 'uid_set__device_type', 'uid_set__new_detect_interval',
+                       'jg_token_val')
         return uid_push_qs
 
     @staticmethod
@@ -140,6 +141,11 @@ class DevicePushService:
                 kwag_args['token_val'] = token_val
                 kwag_args['msg_title'] = msg_title
                 kwag_args['msg_text'] = msg_text
+                if params['event_type'] == 606 and up['push_type'] in [5, 6]:
+                    kwag_args['jg_token_val'] = up['jg_token_val']
+                else:
+                    if 'jg_token_val' in kwag_args:
+                        kwag_args.pop('jg_token_val')
                 local_date_time = CommonService.get_now_time_str(n_time=params['n_time'], tz=tz, lang='cn')
                 local_date_time = local_date_time[0:10]
                 # 以下是存库
@@ -585,7 +591,7 @@ class DevicePushService:
 
     @staticmethod
     def do_oppopush(channel_id, uid, channel, appBundleId, token_val, event_type, n_time,
-                    msg_title, msg_text):
+                    msg_title, msg_text, jg_token_val=''):
         """
         android 国内oppo APP消息提醒推送
         """
@@ -634,6 +640,8 @@ class DevicePushService:
         response = requests.post(push_url, data=push_data, headers=headers)
         if response.status_code == 200:
             LOGGING.info("oppo推送返回值:{},uid:{},time:{},event:{}".format(response.json(), uid, now_time, event_type))
+            if event_type == 606 or event_type == '606':
+                PushObject.jpush_transparent_transmission(msg_title, msg_text, appBundleId, jg_token_val, extra_data)
             return response.json()
 
     @classmethod

+ 33 - 3
Service/PushService.py

@@ -264,12 +264,13 @@ class PushObject:
 
     @staticmethod
     def android_vivopush(token_val, n_time, event_type, msg_title, msg_text, app_bundle_id='', uid='', channel='1',
-                         image='', nickname='', appBundleId=''):
+                         image='', nickname='', appBundleId='', jg_token_val=''):
         """
         vivo 推送(不支持图片)
         @param app_bundle_id: app包名
         @param appBundleId: app包名
         @param token_val: 推送token
+        @param jg_token_val: 极光推送token
         @param event_type: 事件类型
         @param msg_title: 推送标题
         @param msg_text: 推送内容
@@ -319,19 +320,22 @@ class PushObject:
                 .message_dict()
             rec = sender_send.send(message)
             logger.info('vivo推送结果:{}, 设备uid:{}'.format(rec, uid))
+            if rec['result'] == 0 and (event_type == 606 or event_type == '606'):
+                PushObject.jpush_transparent_transmission(msg_title, msg_text, app_bundle_id, jg_token_val, push_data)
             return rec
         except Exception as e:
             logger.info('vivo推送异常:{}'.format(e))
 
     @staticmethod
     def android_oppopush(channel_id, nickname, app_bundle_id, token_val, n_time, event_type, msg_title, msg_text,
-                         uid='', channel='1', image=''):
+                         uid='', channel='1', image='', jg_token_val=''):
         """
         android oppo 推送
         @param channel_id: 通知通道id
         @param nickname: 设备昵称
         @param app_bundle_id: app包id
         @param token_val: 推送token
+        @param jg_token_val: 推送token
         @param n_time: 当前时间
         @param event_type: 事件类型
         @param msg_title: 推送标题
@@ -391,7 +395,8 @@ class PushObject:
 
             response = requests.post(push_url, data=push_data, headers=headers)
             logger.info("oppo推送返回值:{}".format(response.json()))
-            assert response.status_code == 200
+            if response.status_code == 200 and (event_type == 606 or event_type == '606'):
+                PushObject.jpush_transparent_transmission(msg_title, msg_text, app_bundle_id, jg_token_val, extra_data)
         except Exception as e:
             return repr(e)
 
@@ -456,3 +461,28 @@ class PushObject:
             return response.status_code
         except Exception as e:
             return repr(e)
+
+    @staticmethod
+    def jpush_transparent_transmission(msg_title, msg_text, app_bundle_id, token_val, extra_data):
+        """
+        android 极光透传
+        @param msg_title: 推送标题
+        @param msg_text: 推送内容
+        @param token_val: 推送token
+        @param app_bundle_id: app包id
+        @param extra_data: 额外数据
+        @return: None
+        """
+        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)
+            push.message = jpush.message(msg_content=msg_text, title=msg_title, extras=extra_data)
+            push.platform = jpush.all_
+            res = push.send()
+            assert res.status_code == 200
+        except Exception as e:
+            return repr(e)