/** * 消息推送服务工具,包装消息推送方法。 * * 当前使用个推的推送服务。 */ "use strict"; let RedisModel = require('../redis.model'); let GeTui = require('getui/GT.push'); let Target = require('getui/getui/Target'); let APNTemplate = require('getui/getui/template/APNTemplate'); let BaseTemplate = require('getui/getui/template/BaseTemplate'); let APNPayload = require('getui/payload/APNPayload'); let SimpleAlertMsg = require('getui/payload/SimpleAlertMsg'); let NotyPopLoadTemplate = require('getui/getui/template/NotyPopLoadTemplate'); let LinkTemplate = require('getui/getui/template/LinkTemplate'); let NotificationTemplate = require('getui/getui/template/NotificationTemplate'); let TransmissionTemplate = require('getui/getui/template/TransmissionTemplate'); let SingleMessage = require('getui/getui/message/SingleMessage'); let AppMessage = require('getui/getui/message/AppMessage'); let log = require("../../util/log.js"); let configFile = require('../../include/commons').CONFIG_FILE; let config = require('../../resources/config/' + configFile); class Pusher extends RedisModel { constructor() { super(); this.getuiConfig = config.getTuiConfig; this.gt = new GeTui(this.getuiConfig.HOST, this.getuiConfig.APPKEY, this.getuiConfig.MASTERSECRET); } /** * iOS单个推送。使用APN简单推送。 * * @param message * @param customData * @param type * @param deviceToken * @param handler */ pushToSingleViaAPN(message, customData, type, deviceToken,badge, handler) { try { let simpleAlertMsg = new SimpleAlertMsg(); simpleAlertMsg.alertMsg = message; let payload = new APNPayload(); payload.alertMsg = simpleAlertMsg; payload.badge = badge; payload.contentAvailable = 1; payload.category = type; payload.customMsg.payload1 = customData; let template = new APNTemplate(); template.setApnInfo(payload); let singleMessage = new SingleMessage(); singleMessage.setData(template); this.gt.pushAPNMessageToSingle(this.getuiConfig.APPID, deviceToken, singleMessage, function (err, res) { if (err) { log.error('Push via APN failed:' + e); } else { handler(null, res); } }); } catch (e) { log.error('Push via APN failed:'+deviceToken+":" + e); } } /** * 安卓单个推送。 * * @param title * @param message * @param customData * @param clientId * @param appInBg * @param handler */ pushToSingleViaAndroid(title, message, customData, clientId, appInBg, handler) { if (appInBg == 1) { this._pushAndroidNotify(clientId, title, message, customData, handler); } else { this._pushAndroidTransmission(clientId, customData, handler); } } _pushAndroidNotify(clientId, title, msg, data, handler) { let transmissionContent = { pushtype: 'notify', data: data }; let template = new NotificationTemplate({ appId: this.getuiConfig.APPID, appKey: this.getuiConfig.APPKEY, title: title, text: msg, logo: '', isRing: true, isVibrate: true, isClearable: true, transmissionType: 1, transmissionContent: JSON.stringify(transmissionContent) }); //个推信息体 let message = new SingleMessage({ isOffline: true, //是否离线 offlineExpireTime: 3600 * 12 * 1000, //离线时间 data: template, //设置推送消息类型 pushNetWorkType: 0 //是否wifi ,0不限,1wifi }); //接收方 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) { let requestId = err.exception.requestId; console.log(err.exception.requestId); this.gt.pushMessageToSingle(message, target, requestId, function (err, res) { handler(err, res); }); } else { handler(err, res); } }); } _pushAndroidTransmission(clientId, customData, handler) { let transmissionContent = { pushtype: 'transmission', data: customData }; let template = new TransmissionTemplate({ appId: this.getuiConfig.APPID, appKey: this.getuiConfig.APPKEY, transmissionType: 2, transmissionContent: JSON.stringify(transmissionContent) }); // 个推信息实体 let message = new SingleMessage({ isOffline: true, //是否离线 offlineExpireTime: 3600 * 12 * 1000, //离线时间 data: template, //设置推送消息类型 pushNetWorkType: 0 //是否wifi ,0不限,1 wifi }); // 接收方 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) { 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) { if (err) { log.error("Push android single via transmission with requestId failed: ", err); } }); } }); } } let pusher = new Pusher(); module.exports = pusher;