123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /**
- * 消息推送服务工具,包装消息推送方法。
- *
- * 当前使用个推的推送服务。
- */
- "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;
|