def push_message_u(appid, appname, u, content, extra, collapse_id=None): receiver = u.uid #找出最近绑定的token ts = max(u.apns_timestamp, u.xg_timestamp, u.ng_timestamp, u.mi_timestamp, u.hw_timestamp, u.gcm_timestamp, u.ali_timestamp, u.jp_timestamp) if u.apns_device_token and u.apns_timestamp == ts: sound = 'default' IOSPush.push(appid, u.apns_device_token, content, sound=sound, badge=u.unread + 1, extra=extra, collapse_id=collapse_id) user.set_user_unread(rds, appid, receiver, u.unread + 1) elif u.ng_device_token and u.ng_timestamp == ts: android_push(appid, appname, u.ng_device_token, content, extra) elif u.xg_device_token and u.xg_timestamp == ts: xg_push(appid, appname, u.xg_device_token, content, extra) elif u.mi_device_token and u.mi_timestamp == ts: MiPush.push(appid, appname, u.mi_device_token, content) elif u.hw_device_token and u.hw_timestamp == ts: HuaWeiPush.push(appid, appname, u.hw_device_token, content) elif u.gcm_device_token and u.gcm_timestamp == ts: GCMPush.push(appid, appname, u.gcm_device_token, content) elif u.ali_device_token and u.ali_timestamp == ts: AliPush.push(appid, appname, u.ali_device_token, content) elif u.jp_device_token and u.jp_timestamp == ts: JGPush.push(appid, appname, u.jp_device_token, content) else: logging.info("uid:%d has't device token", receiver)
def push_customer_support_message(appid, appname, u, content, extra): receiver = u.uid #找出最近绑定的token ts = max(u.apns_timestamp, u.xg_timestamp, u.ng_timestamp, u.mi_timestamp, u.hw_timestamp, u.gcm_timestamp, u.ali_timestamp, u.jp_timestamp) if u.apns_device_token and u.apns_timestamp == ts: sound = 'default' alert = content badge = u.unread + 1 content_available = 1 IOSPush.push(appid, u.apns_device_token, alert, sound, badge, content_available, extra) user.set_user_unread(rds, appid, receiver, u.unread + 1) elif u.ng_device_token and u.ng_timestamp == ts: android_push(appid, appname, u.ng_device_token, content, extra) elif u.xg_device_token and u.xg_timestamp == ts: xg_push(appid, appname, u.xg_device_token, content, extra) elif u.mi_device_token and u.mi_timestamp == ts: MiPush.push(appid, appname, u.mi_device_token, content) elif u.hw_device_token and u.hw_timestamp == ts: HuaWeiPush.push(appid, appname, u.hw_device_token, content) elif u.gcm_device_token and u.gcm_timestamp == ts: GCMPush.push(appid, appname, u.gcm_device_token, content) elif u.ali_device_token and u.ali_timestamp == ts: AliPush.push(appid, appname, u.ali_device_token, content) #通过透传消息通知app有新消息到达 content = json.dumps({"xiaowei": {"new": 1}}) AliPush.push_message(appid, appname, u.ali_device_token, content) elif u.jp_device_token and u.jp_timestamp == ts: JGPush.push(appid, appname, u.jp_device_token, content) else: logging.info("uid:%d has't device token", receiver)
def handle_voip_message(msg): obj = json.loads(msg) appid = obj["appid"] sender = obj["sender"] receiver = obj["receiver"] appname = get_title(appid) sender_name = user.get_user_name(rds, appid, sender) u = user.get_user(rds, appid, receiver) if u is None: logging.info("uid:%d nonexist", receiver) return #找出最近绑定的token ts = max(u.apns_timestamp, u.xg_timestamp, u.ng_timestamp, u.mi_timestamp, u.hw_timestamp, u.gcm_timestamp, u.ali_timestamp) if sender_name: sender_name = sender_name.decode("utf8") content = "%s:%s"%(sender_name, u"请求与你通话") else: content = u"你的朋友请求与你通话" if u.apns_device_token and u.apns_timestamp == ts: sound = "apns.caf" badge = 0 ios_push(appid, u.apns_device_token, content, badge, sound, {}) elif u.mi_device_token and u.mi_timestamp == ts: MiPush.push_message(appid, u.mi_device_token, content) elif u.hw_device_token and u.hw_timestamp == ts: HuaWeiPush.push_message(appid, u.hw_device_token, content) elif u.ali_device_token and u.ali_timestamp == ts: AliPush.push_message(appid, appname, u.hw_device_token, content) else: logging.info("uid:%d has't device token", receiver)
def send_group_message(obj): appid = obj["appid"] sender = obj["sender"] receivers = obj["receivers"] group_id = obj["group_id"] appname = get_title(appid) sender_name = user.get_user_name(rds, appid, sender) content = push_content(sender_name, obj["content"]) try: c = json.loads(obj["content"]) collapse_id = c.get('uuid') if c.has_key('revoke'): collapse_id = c['revoke']['msgid'] sender_name = sender_name if sender_name else '' content = "%s撤回了一条消息" % sender_name at = c.get('at', []) at_all = c.get('at_all', False) except ValueError: at = [] at_all = False collapse_id = None extra = {} extra["sender"] = sender extra["group_id"] = group_id apns_users = [] jp_users = [] xg_users = [] hw_users = [] gcm_users = [] mi_users = [] ali_users = [] # 群聊中被at的用户 at_users = [] for receiver in receivers: quiet = user.get_user_notification_setting(rds, appid, receiver, group_id) if quiet: logging.info("uid:%d group id:%d do not disturb", receiver, group_id) if quiet and receiver not in at: continue u = user.get_user(rds, appid, receiver) if u is None: logging.info("uid:%d nonexist", receiver) continue if (at_all or receiver in at) and sender_name: at_users.append(u) continue # 找出最近绑定的token ts = max(u.apns_timestamp, u.xg_timestamp, u.mi_timestamp, u.hw_timestamp, u.gcm_timestamp, u.ali_timestamp, u.jp_timestamp) if u.apns_device_token and u.apns_timestamp == ts: apns_users.append(u) elif u.xg_device_token and u.xg_timestamp == ts: xg_users.append(u) elif u.mi_device_token and u.mi_timestamp == ts: mi_users.append(u) elif u.hw_device_token and u.hw_timestamp == ts: hw_users.append(u) elif u.gcm_device_token and u.gcm_timestamp == ts: gcm_users.append(u) elif u.ali_device_token and u.ali_timestamp == ts: ali_users.append(u) elif u.jp_device_token and u.jp_timestamp == ts: jp_users.append(u) else: logging.info("uid:%d has't device token", receiver) for u in at_users: content = "%s在群聊中@了你" % sender_name push_message_u(appid, appname, u, content, extra) for u in xg_users: xg_push(appid, appname, u.xg_device_token, content, extra) for u in hw_users: HuaWeiPush.push(appid, appname, u.hw_device_token, content) for u in gcm_users: GCMPush.push(appid, appname, u.gcm_device_token, content) for u in ali_users: AliPush.push(appid, appname, u.ali_device_token, content) # ios apns notifications = [] for u in apns_users: sound = 'default' payload = Payload(alert=content, sound=sound, badge=u.unread + 1, custom=extra) token = u.apns_device_token n = Notification(token, payload, None) notifications.append(n) if notifications: IOSPush.push_group_batch(appid, notifications, collapse_id) for u in apns_users: user.set_user_unread(rds, appid, receiver, u.unread + 1) # 极光推送 tokens = [] for u in jp_users: tokens.append(u.jp_device_token) if tokens: JGPush.push(appid, appname, tokens, content) tokens = [] for u in mi_users: tokens.append(u.mi_device_token) MiPush.push_batch(appid, appname, tokens, content)
def handle_im_messages(msgs): msg_objs = [] for msg in msgs: obj = json.loads(msg) if not obj.has_key("appid") or \ not obj.has_key("sender") or \ not obj.has_key("receiver"): logging.warning("invalid push msg:%s", msg) continue msg_objs.append(obj) logging.debug("push msg:%s", msg) apns_users = [] jp_users = [] xg_users = [] hw_users = [] gcm_users = [] mi_users = [] ali_users = [] for obj in msg_objs: appid = obj["appid"] sender = obj["sender"] receiver = obj["receiver"] appname = get_title(appid) sender_name = user.get_user_name(rds, appid, sender) do_not_disturb = user.get_user_do_not_disturb(rds, appid, receiver, sender) if do_not_disturb: logging.debug("uid:%s set do not disturb :%s", receiver, sender) continue u = user.get_user(rds, appid, receiver) if u is None: logging.info("uid:%d nonexist", receiver) continue content_obj = json.loads(obj['content']) if content_obj.get('revoke'): collapse_id = content_obj.get('revoke').get('msgid') sender_name = sender_name if sender_name else '' content = "%s撤回了一条消息" % sender_name else: collapse_id = content_obj.get('uuid') content = push_content(sender_name, obj["content"]) # 找出最近绑定的token ts = max(u.apns_timestamp, u.xg_timestamp, u.mi_timestamp, u.hw_timestamp, u.gcm_timestamp, u.ali_timestamp, u.jp_timestamp) if u.apns_device_token and u.apns_timestamp == ts: apns_users.append((u, appname, content, collapse_id)) elif u.xg_device_token and u.xg_timestamp == ts: xg_users.append((u, appname, content, collapse_id)) elif u.mi_device_token and u.mi_timestamp == ts: mi_users.append((u, appname, content, collapse_id)) elif u.hw_device_token and u.hw_timestamp == ts: hw_users.append((u, appname, content, collapse_id)) elif u.gcm_device_token and u.gcm_timestamp == ts: gcm_users.append((u, appname, content, collapse_id)) elif u.ali_device_token and u.ali_timestamp == ts: ali_users.append((u, appname, content, collapse_id)) elif u.jp_device_token and u.jp_timestamp == ts: jp_users.append((u, appname, content, collapse_id)) else: logging.info("uid:%d has't device token", receiver) for u, appname, content, _ in xg_users: xg_push(u.appid, appname, u.xg_device_token, content, {}) for u, appname, content, _ in hw_users: HuaWeiPush.push(u.appid, appname, u.hw_device_token, content) for u, appname, content, _ in gcm_users: GCMPush.push(u.appid, appname, u.gcm_device_token, content) for u, appname, content, _ in ali_users: AliPush.push(u.appid, appname, u.ali_device_token, content) for u, appname, content, _ in jp_users: JGPush.push(u.appid, appname, u.jp_device_token, content) for u, appname, content, _ in mi_users: MiPush.push(u.appid, appname, u.mi_device_token, content) # ios apns notifications = [] for u, appname, content, collapse_id in apns_users: sound = 'default' payload = Payload(alert=content, sound=sound, badge=u.unread + 1) token = u.apns_device_token n = Notification(token, payload, collapse_id) notifications.append(n) if notifications: IOSPush.push_peer_batch(u.appid, notifications) for u, appname, content, collapse_id in apns_users: user.set_user_unread(rds, u.appid, u.uid, u.unread + 1)
u.apns_device_token, content, sound=sound, badge=u.unread + 1) user.set_user_unread(rds, appid, receiver, u.unread + 1) return if not content: return if u.mi_device_token and u.mi_timestamp == ts: MiPush.push_message(appid, u.mi_device_token, content) elif u.hw_device_token and u.hw_timestamp == ts: HuaWeiPush.push_message(appid, u.hw_device_token, content) elif u.ali_device_token and u.ali_timestamp == ts: AliPush.push_message(appid, appname, u.hw_device_token, content) else: logging.info("uid:%d has't device token", receiver) def receive_offline_message(): """ 等待100ms,批量发送推送 """ while True: logging.debug("waiting...") begin = time.time() p_items = [] g_items = [] c_items = []