Browse Source

修复IOS推送失败BUG

Sand 8 years ago
parent
commit
7d938f3578

+ 1 - 1
src/server/endpoints/v2/session.endpoint.js

@ -52,7 +52,7 @@ router.post("/", function (req, res) {
    for (let j in participants) {
        participantArray.push(j + ":" + participants[j]);
    }
    console.error("payload"+JSON.stringify(payload));
    ControllerUtil.regModelEventHandler(sessions, res);
    sessions.createSession(sessionId, sessionName, sessionType, participantArray);
});

+ 2 - 2
src/server/models/client/app.client.js

@ -70,7 +70,7 @@ class AppClient extends RedisModel {
                        if (res.length > 0) {
                            userStatus = {
                                platform: res[0].platform,
                                token: res[0].token,
                                device_token: res[0].device_token,
                                client_id: res[0].client_id,
                                app_in_bg: res[0].app_in_bg == 1,
                                last_login_time: res[0].last_login_time
@ -116,7 +116,7 @@ class AppClient extends RedisModel {
            };
            if (userStatus.platform == PLATFORMS.iOS) {
                pusher.pushToSingleViaAPN(tipMessage, customData, message.contentType, userStatus.token, function (err, res) {
                pusher.pushToSingleViaAPN(tipMessage, customData, message.contentType, userStatus.device_token, function (err, res) {
                    if (err) {
                        ModelUtil.logError("Send notification via APN failed", err);
                    } else {

+ 14 - 14
src/server/models/push/pusher.js

@ -43,20 +43,20 @@ class Pusher extends RedisModel {
     */
    pushToSingleViaAPN(message, customData, type, deviceToken, handler) {
        try {
            var simpleAlertMsg = new SimpleAlertMsg();
            let simpleAlertMsg = new SimpleAlertMsg();
            simpleAlertMsg.alertMsg = message;
            var payload = new APNPayload();
            let payload = new APNPayload();
            payload.alertMsg = simpleAlertMsg;
            payload.badge = 0;
            payload.contentAvailable = 1;
            payload.category = type;
            payload.customMsg.payload1 = customData;
            var template = new APNTemplate();
            let template = new APNTemplate();
            template.setApnInfo(payload);
            var singleMessage = new SingleMessage();
            let singleMessage = new SingleMessage();
            singleMessage.setData(template);
            this.gt.pushAPNMessageToSingle(this.getuiConfig.APPID, deviceToken, singleMessage, function (err, res) {
@ -90,11 +90,11 @@ class Pusher extends RedisModel {
    }
    _pushAndroidNotify(clientid, title, msg, data, handler) {
        var transmissionContent = {
        let transmissionContent = {
            pushtype: 'notify',
            data: data
        };
        var template = new NotificationTemplate({
        let template = new NotificationTemplate({
            appId: this.getuiConfig.APPID,
            appKey: this.getuiConfig.APPKEY,
            title: title,
@ -108,7 +108,7 @@ class Pusher extends RedisModel {
        });
        //个推信息体
        var message = new SingleMessage({
        let message = new SingleMessage({
            isOffline: true,                        //是否离线
            offlineExpireTime: 3600 * 12 * 1000,    //离线时间
            data: template,                          //设置推送消息类型
@ -116,14 +116,14 @@ class Pusher extends RedisModel {
        });
        //接收方
        var target = new Target({
        let target = new Target({
            appId: this.getuiConfig.APPID,
            clientId: clientid
        });
        this.gt.pushMessageToSingle(message, target, function (err, res) {
            if (err != null && err.exception != null && err.exception instanceof RequestError) {
                var requestId = err.exception.requestId;
                let requestId = err.exception.requestId;
                console.log(err.exception.requestId);
                this.gt.pushMessageToSingle(message, target, requestId, function (err, res) {
                    handler(err, res);
@ -135,12 +135,12 @@ class Pusher extends RedisModel {
    }
    _pushAndroidTransmission(clientid, customData, handler) {
        var transmissionContent = {
        let transmissionContent = {
            pushtype: 'transmission',
            data: customData
        };
        var template = new TransmissionTemplate({
        let template = new TransmissionTemplate({
            appId: this.getuiConfig.APPID,
            appKey: this.getuiConfig.APPKEY,
            transmissionType: 2,
@ -148,7 +148,7 @@ class Pusher extends RedisModel {
        });
        // 个推信息实体
        var message = new SingleMessage({
        let message = new SingleMessage({
            isOffline: true,                            //是否离线
            offlineExpireTime: 3600 * 12 * 1000,       //离线时间
            data: template,                             //设置推送消息类型
@ -156,14 +156,14 @@ class Pusher extends RedisModel {
        });
        // 接收方
        var target = new Target({
        let target = new Target({
            appId: this.getuiConfig.APPID,
            clientId: clientid
        });
        this.gt.pushMessageToSingle(message, target, function (err, res) {
            if (err != null && err.exception != null && err.exception instanceof RequestError) {
                var requestId = err.exception.requestId;
                let requestId = err.exception.requestId;
                log.info("Push android single failed without rquestId, retry with requestId: ", err.exception.requestId);
                this.gt.pushMessageToSingle(message, target, requestId, function (err, res) {

+ 5 - 2
src/server/models/sessions/sessions.js

@ -21,6 +21,7 @@ let redis = RedisClient.redisClient().connection;
let logger = require('../../util/log.js');
let mongoose = require('mongoose');
let async = require("async");
var log = require("../../util/log.js");
const REDIS_KEYS = require('../../include/commons').REDIS_KEYS;
const SESSION_TYPES = require('../../include/commons').SESSION_TYPES;
@ -92,8 +93,7 @@ class Sessions extends RedisModel {
        for (let i in participantArray) {
            participantIdArray.push(participantArray[i].split(":")[0]);
        }
        logger.error("create session by participantIdArray,:"+participantIdArray.join(","));
        logger.error("create session by type,:"+type);
        if (type == SESSION_TYPES.P2P || type == SESSION_TYPES.SYSTEM) {
            if (sessionId) {
                callBusinessType(sessionId);
@ -819,8 +819,11 @@ class Sessions extends RedisModel {
                        } else {
                            message.session_id = sessionId;
                            log.info("Candidate to push: " + participants);
                            res.forEach(function (participant) {
                                if (participant.id !== message.sender_id) {
                                    log.warn('Push message to ' + participant.id);
                                    Sessions.pushNotification(participant.id, message);
                                }
                            });

+ 3 - 3
test/client/im.client.session.p2p.Test.js

@ -26,9 +26,9 @@ let TD = {
        DoctorB: {
            id: "cd919343-5b06-11e6-8344-fa163e8aee56",
            name: "李毅",
            token: "0PFWlKmLBN9YzhCfFWVgYA",
            clientId: "8fc0fb1d53b725aa7406b8fae66c0a5b",
            platform: 1
            token: "8F01F2780AA3677B1F01BDBD63BEBFA7530E1E73FC7FA4C110A5F475ECFD4ADE",
            clientId: "2fa4119e7f77a8077dbd0324838f963b",
            platform: 0
        },
        PatientA: {
            id: "d5cbe9d10669f8741bc0805b20697ad1254c8e90",