消息推送方式

消息推送方式

本章介绍了Node.js的消息推送方法,如何推送可详细阅读本章。

1. 对单个用户推送消息

1.1 描述

向单个clientid或别名用户推送消息。

注:个推使用clientid来标识每个独立的用户,每一台终端上每一个app拥有一个独立的clientid。

接口名称正常推送不需要传requestId,如果发生异常重试时将requestId传入,具体用法详见示例代码
pushMessageToSingle(message, target,requestId, callback)

1.2 应用场景

  • 场景1:某用户发生了一笔交易,银行及时下发一条推送消息给该用户。
  • 场景2:用户定制了某本书的预订更新,当本书有更新时,需要向该用户及时下发一条更新提醒信息。

这些需要向指定某个用户推送消息的场景,即需要使用对单个用户推送消息的接口。

1.3 对应接口

pushMessageToSingle(message, target, callback)

1.4 参数说明

参数名 类型 必需 默认值 参数描述
Message object 消息体
target object 推送目标
callback function 回调函数

callback(err,res)

参数名 必需 默认值 参数描述
err 错误
res 返回信息

1.5 返回值

推送返回值详情查询,请点击Result返回值

1.6 代码实例

'use strict';
var GeTui = require('./GT.push');
var Target = require('./getui/Target');
var SingleMessage = require('./getui/message/SingleMessage');
var TransmissionTemplate = require('./getui/template/TransmissionTemplate');
//采用"NodeJs SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可以自行替换
var APPID = 'JroCkPGgpF6LzFQqqoWlhA';
var APPKEY = 'Mjv706pTKt5cTcjtqaToz8';
var MASTERSECRET = 'uIBtmad7RK706cy5MKdfp3';
var CID = 'e560b884d8d9bf5bc5a0f9da545a11f3';
//别名推送方式
//var ALIAS = '';
var HOST = 'http://sdk.open.api.igexin.com/apiex.htm';

var gt = new GeTui(HOST, APPKEY, MASTERSECRET);

gt.connect(function () {
    pushMessageToSingle();
});
function pushMessageToSingle() {
    var template = TransmissionTemplateDemo();
    //单推消息体
    var message = new SingleMessage({
        isOffline: true,                        //是否离线
        offlineExpireTime: 3600 * 12 * 1000,    //离线时间
        data: template                          //设置推送消息类型
    });
    //接收方
    var target = new Target({
        appId: APPID,
        clientId: CID
        //alias:ALIAS
    });

    target.setAppId(APPID).setClientId(CID);
    //target.setAppId(APPID).setAlias(ALIAS);
    gt.pushMessageToSingle(message, target, function(err, res){
        if(err != null && err.exception != null && err.exception instanceof  RequestError){
            var requestId = err.exception.requestId;
            console.log(err.exception.requestId);
            //发送异常重传
            gt.pushMessageToSingle(message,target,requestId,function(err, res){
                console.log(err);
                console.log(res);
            });
        }
    });
}
function TransmissionTemplateDemo() {
    var template =  new TransmissionTemplate({
        appId: APPID,
        appKey: APPKEY,
        transmissionType: 1,
        transmissionContent: '测试离线'
    });
    //iOS推送需要设置的pushInfo字段
    //var payload = new APNPayload();
    //var alertMsg = new SimpleAlertMsg();
    //alertMsg.alertMsg="AlertMsg";
    //payload.alertMsg = alertMsg;
    //payload.badge=5;
    //payload.contentAvailable =1;
    //payload.category="ACTIONABLE";
    //payload.sound="test1.wav";
    //payload.customMsg.payload1="payload";
    //template.setApnInfo(payload);
    return template;
}

2. 对指定列表用户推送消息

2.1 描述

上传clientid或别名列表,对列表中所有clientid或别名用户进行消息推送,如果仅对单个用户推送务必使用单推接口,否则会严重影响推送性能,如果对少量甚至几个用户推送同样的消息,建议使用单推实现,性能会更高

2.2 应用场景

  • 场景1:对于抽奖活动的应用,需要对已知的某些用户推送中奖消息,就可以通过clientid列表方式推送消息。
  • 场景2:向新客用户发放抵用券,提升新客的转化率,就可以事先提取新客列表,将消息指定发送给这部分指定clientid用户。

2.3 对应接口

2.3.1 pushMessageToList-对指定用户列表推送消息

接口说明
pushMessageToList(message, targets, callback)
参数说明
参数名 类型 必需 默认值 参数描述
Message object 消息体
Targets object 推送目标列表
callback function 回调函数
返回值

推送具体返回值详情查询,请点击Result返回值

注:此接口有频次控制,申请修改请联系邮箱:kegf@getui.com 。

代码实例
'use strict';

var GeTui = require('./GT.push');
var Target = require('./getui/Target');
var BaseTemplate = require('./getui/template/BaseTemplate');
var TransmissionTemplate = require('./getui/template/TransmissionTemplate');
var ListMessage = require('./getui/message/ListMessage');

// http的域名
var HOST = 'http://sdk.open.api.igexin.com/apiex.htm';

//https的域名
//var HOST = 'https://api.getui.com/apiex.htm';

//采用"NodeJs SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置
var APPID = '';                
var APPKEY = '';            
var MASTERSECRET = '';        
var CID1 = '';                //请填入cid1
var CID2 = '';                //请填入cid2
//var ALIAS1 = '';            //请填入ALIAS1
//var ALIAS2 = '';            //请填入ALIAS2


var gt = new GeTui(HOST, APPKEY, MASTERSECRET);
pushMessageToList();

function pushMessageToList() {
    //process.env.gexin_pushList_needDetails = true;
    //process.env.gexin_pushList_needAsync=true;
    //process.env.=true;
    // var taskGroupName = 'test';
    var taskGroupName = "toList任务组名";
    var template = TransmissionTemplateDemo();

    //定义"ListMessage"类型消息对象,设置消息内容模板、是否支持离线发送、以及离线消息有效期(单位毫秒)
    var message = new ListMessage({
        isOffline: true,
        offlineExpireTime: 3600 * 12 * 1000,
        data: template
    });

    gt.getContentId(message, taskGroupName, function (err, res) {
        var contentId = res;
        //接收方1
        var target1 = new Target({
            appId: APPID,
            clientId: CID1
//          alias:ALIAS1
        });
        //接收方2
        var target2 = new Target({
            appId: APPID,
            clientId: CID2
//          alias:ALIAS2
        });

        var targetList = [target1,target2];

        console.log("getContentId", res);
        gt.pushMessageToList(contentId, targetList, function (err, res) {
            console.log(res);
        });
    });
}

function TransmissionTemplateDemo() {
    var template =  new TransmissionTemplate({
        appId: APPID,
        appKey: APPKEY,
        transmissionType: 1,
        transmissionContent: '测试离线'
    });

    return template;
}

2.3.2 getContentId-获取taskid接口

函数说明
getContentId(message,taskGroupName,callback)
参数说明
参数名 类型 必需 默认值 参数描述
Message object 消息体
taskGroupName string 任务别名(详见任务组名推送),可为空
callback function 回调函数

注:此接口有频次控制,申请修改请联系邮箱:kegf@getui.com 。

代码实例
gt.getContentId(message, taskGroupName, function (err, res) {
        var contentId = res;
        //接收方1
        var target1 = new Target({
            appId: APPID,
            clientId: CID
//            alias:'_lalala_'
        });

具体代码详见pushMessageToList代码实例

2.3.3 CancelContentId-取消taskid接口

taskid被标识为无效

函数说明
CancelContentId (taskId, callback)
参数说明
参数名 类型 必需 默认值 参数描述
Taskid String 任务id(格式OSL-yyMM_XXXXXX)
callback function 回调函数
代码实例
'use strict';
var GeTui = require('./GT.push');
var Target = require('./getui/Target');
var HOST = 'http://sdk.open.api.igexin.com/apiex.htm';
//采用"NodeJs SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可自行替换
var APPID = 'b03c5cfef65ed30108f0a3fd82c3f6b411';
var APPKEY = '110000';
var MASTERSECRET = 'a02a76119b20d4e31620d7597a3b4f35';
var CID = '289cf3a73ee6e37e456faa4582e96b2e';

var gt = new GeTui(HOST, APPKEY, MASTERSECRET);
gt.connect(function () {
gt.cancelContentId('11', function(err, res) {
 console.log(res);
})
});

3. 对指定应用群推消息

3.1 描述

对单个或多个指定应用的所有用户群发推送消息。注:个推使用AppID来标识每个独立的应用。

3.2 应用场景

  • 场景1,某app周年庆,群发消息给该app的所有用户,提醒用户参加周年庆活动。

3.3 接口

pushMessageToApp(message, taskidAlias, callback)

3.4 参数

参数名 类型 必需 默认值 参数描述
Message Object 消息体
taskidAlias String 任务别名(详见任务组名推送),可为空
callback function 回调函数

3.5 返回值

result具体返回值详情查询,请点击Result返回值

注:此接口有频次控制,申请修改请联系邮箱:kegf@getui.com 。

3.6 代码实例

'use strict';

var GeTui = require('./GT.push');
var Target = require('./getui/Target');
var BaseTemplate = require('./getui/template/BaseTemplate');
var TransmissionTemplate = require('./getui/template/TransmissionTemplate');
var AppMessage = require('./getui/message/AppMessage');

// http的域名
var HOST = 'http://sdk.open.api.igexin.com/apiex.htm';

//https的域名
//var HOST = 'https://api.getui.com/apiex.htm';

//采用"NodeJs SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置
var APPID = '';                
var APPKEY = '';            
var MASTERSECRET = '';        
var CID = '';                //请填入cid

var gt = new GeTui(HOST, APPKEY, MASTERSECRET);

pushMessageToApp();

function pushMessageToApp() {
    // var taskGroupName = 'test';
    var taskGroupName = null;
    var template = TransmissionTemplateDemo();

    // 定义"AppMessage"类型消息对象,设置消息内容模板、发送的目标App列表、是否支持离线发送、以及离线消息有效期(单位毫秒)
    var message = new AppMessage({
        isOffline: false,
        offlineExpireTime: 3600 * 12 * 1000,
        data: template,
        appIdList: [APPID],
        phoneTypeList: ['ANDRIOD','IOS'],
        provinceList: ['浙江','上海','北京'],
        tagList: ['开心'],
        speed: 10000
    });

    gt.pushMessageToApp(message, taskGroupName, function (err, res) {
        console.log(res);
    });
}
function TransmissionTemplateDemo() {
    var template =  new TransmissionTemplate({
        appId: APPID,
        appKey: APPKEY,
        transmissionType: 1,
        transmissionContent: '测试离线'
    });
    //APN简单推送
    //var payload = new APNPayload();
    ////var alertMsg = new SimpleAlertMsg();
    ////alertMsg.alertMsg="";
    ////payload.alertMsg = alertMsg;
    //payload.badge=5;
    //payload.contentAvailable =1;
    //payload.category="";
    //payload.sound="";
    ////payload.customMsg.payload1="";
    //template.setApnInfo(payload);

    //APN高级推送
    //var payload = new APNPayload();
    //var alertMsg = new DictionaryAlertMsg();
    //alertMsg.body = "body";
    //alertMsg.actionLocKey = "actionLocKey";
    //alertMsg.locKey = "locKey";
    //alertMsg.locArgs = Array("locArgs");
    //alertMsg.launchImage = "launchImage";
    ////ios8.2以上版本支持
    //alertMsg.title = "title";
    //alertMsg.titleLocKey = "titleLocKey";
    //alertMsg.titleLocArgs = Array("titleLocArgs");
    //
    //payload.alertMsg=alertMsg;
    //payload.badge=5;
//    payload.contentAvailable =1;
//    payload.category="";
//    payload.sound="";
//    payload.customMsg.payload1="payload";
//    template.setApnInfo(payload);
    return template;
}

4. Wi-Fi推送

4.1 描述

仅在wifi条件下才展示通知内容,2G/3G/4G等非wifi环境下,不显示推送内容,充分帮用户节省流量。

4.2 应用场景

  • 主要用于富媒体、视频、应用下载等推送,仅在wifi环境下展现推送消息,用较精美的富文本内容展示通知,非wifi环境下不显示通知,或者显示另外一条普通文本的通知信息,充分帮用户节省流量。

4.3 对应接口

message中设置setPushNetWorkType为1,推送时只有通过wifi登录在线的用户才收到消息,手机网络登录用户的消息进离线,等该用户wifi登录后才获取该条离线消息。

Tosingle(对单个用户推送消息)、tolist(对指定用户列表推送消息)、toapp(对指定应用群推消息)三个接口都支持wifi推送。

//1:wifi ,0:不限,默认不限
message.setPushNetWorkType(1);


4.4 代码实例片段

'use strict';
var SingleMessage = require('./getui/message/SingleMessage');
var message = new SingleMessage();
message.setPushNetWorkType(1);
//或 var message = new SingleMessage({pushNetWorkType: 1});

具体推送详情代码请参考pushMessageToSingle代码实例

5. 定速推送

5.1 描述

定速推送旨在解决个推群推系统在全量推送时速度过快,导致部分客户服务器连接压力过大的问题。提供接口设置让用户按自身情况控制推送速度。

5.2 应用场景

  • 全量推送时希望能控制推送速度不要太快,缓减服务器连接压力,可设置定速推送。如果未设置则按默认推送速度发送。

5.3 接口

message中设置setSpeed为100,则全量送时个推控制下发速度在100条/秒左右。

只有toapp(对指定应用群推消息)支持定速推送。

message.setSpeed(100);

5.4 代码实例片段

'use strict';
var AppMessage= require('./getui/message/AppMessage‘);
var message = new AppMessage ();
message. setSpeed(100);
//或 var message = new AppMessage ({speed: 100});

具体推送详情代码请参考pushMessageToApp代码实例

6. 任务组名推送

6.1 描述

一个应用同时下发了n个推送任务,为了更好地跟踪这n个任务的推送效果,可以把他们组成一个任务组,在查询数据时,只需要输入该任务组名即可同时查到n个任务的数据结果。

6.2 应用场景

  • 场景:做AB test,分别下发A组、B组推送任务,将A、B任务建成“任务组1”,查数据时,仅需要查找任务组1,即可以一起看到A、B两组测试的结果,可以更直观地对比数据。

6.3 接口

命名同一个应用的不同taskid为同一个任务组名,任务组名由第三方填写。tolist(对指定用户列表推送消息)、toapp(对指定应用群推消息)接口支持该功能。

6.3.1 Tolist接口

gt.getContentId(message, taskid别名, callback);

代码实例片段

gt.getContentId(message, taskGroupName, function (err, res) {
        var contentId = res;
        //接收方1
        var target1 = new Target({
            appId: APPID,
            clientId: CID
//            alias:'_lalala_'
        });

具体推送代码详见pushMessageToList代码实例

6.3.2 Toapp接口

gt.pushMessageToApp(message,taskid别名,callback);
具体推送详情代码请参考pushMessageToApp代码实例

7. 短信补量推送接口

7.1 说明

针对推送,在消息有效时间内,对未收到推送消息的用户进行短信补发,既提升消息触达又节省成本

7.2 接入流程

7.2.1 获取应用参数

进入个推开发者中心后,个推消息推送模块,注册app,获取 appId、appKey 和 masterSecret 参数(妥善保管)。

7.2.2 模板报备

进行短信补量推送前,必须在个推申请开通短信补量并报备短信模板。短信模板审核通过后,才能进行短信补量推送。短信模板报备审核的日期为1-2个工作日。

7.2.3 模板示例

模板ID 模板内容 相关参数解释
10000 示例【*】尊敬的${name},你的余额还剩${money}, 请尽快充值。 变量格式:${name},。

7.2.4 pn绑定

进行短信补量推送前,需要调用接口绑定cid与pn。推送时获取pn,进行消息下发。其中文档中所说的pn 都是指md5之后的手机号。

7.3 短信补量补发逻辑

个推推送消息下发时,对于在线用户,直接通过sdk通道下发,对于离线用户消息将存储在离线空间,等到用户设定的短信补发时间,将开始对已绑定pn的用户进行短信补发。 对于在补发前,经过个推通道成功下发消息的用户,将不再进行短信补发。

7.4 cid与pn绑定接口

7.4.1 接口描述

绑定cid和pn的关系,用户短信补量根据cid查询pn下发短信。

7.4.2 功能代码示例

 static String appId = "xxxxxxx";
    static String appkey = "xxxxxxx";
    static String masterSecret = "xxxxxxx";
    static String cid = "xxxxxxx";
    static String pnmd5 = "xxxxxxx";
    static String host = "http://sdk.open.api.igexin.com/apiex.htm";
    public static void main(String[] args) {
        bindPn();
    }
    private static void bindPn() {
        IGtPush push = new IGtPush(host, appkey, masterSecret);
        Map<String, String> cidAndPn = new HashMap<String, String>();
        cidAndPn.put(cid, pnmd5);
        IPushResult res = push.bindCidPn(appId, cidAndPn);
        System.out.println(res.getResponse());
    }

7.4.3 具体参数

参数 类型 是否必填 最大长度 描述
appId String 32 个推分配给开发者的ID
cidAndPn Map 50 key是cid value是pnmd5【32位小写】

7.4.4 返回值说明

参数 类型 是否必填 描述 示例值 其他
result String 响应码 0 详细code码含义。参加文档最后【附录一】
batchRet String 返回每个cid的绑定结果 [{"code":"0","cid":"xxxx"}]

7.4.5 注意事项

1)目前接口最多支持一次绑定50个cid与pn的对应关系。绑定后会返回每个cid的绑定结果。

2)同个应用下pn和cid是一对一的关系,否则原关系会被替换

7.5 cid与pn解绑接口

7.5.1 接口描述

用户通过接口传递cid列表, 可以批量解绑与之相对应的pn的关系。

7.5.2 功能代码示例

 static String appId = "xxxxxxx";
     static String appkey = "xxxxxxx";
     static String masterSecret = "xxxxxxx";
     static String cid = "xxxxxxx";
     static String pnmd5 = "xxxxxxx";
     static String host = "http://sdk.open.api.igexin.com/apiex.htm";
     public static void main(String[] args) {
         unbindPn();
     }
     private static void unbindPn()  {
         IGtPush push = new IGtPush(host, appkey, masterSecret);
         List<String> cidList = new ArrayList<>();
         cidList.add(cid);
         IPushResult res = push.unbindCidPn(appId, cidList);
         System.out.println(res.getResponse());

7.5.3 具体参数

参数 类型 是否必填 最大长度 描述
appId String 32 开发者ID
cidList List 50 客户端身份ID列表

7.5.4 返回值说明

参数 类型 是否必填 描述 示例值 其他
result String 响应码 0 详细code码含义。参加文档最后【附录一】
batchRet String 返回每个cid的绑定结果 [{"code":"0","cid":"xxxx"}]

7.5.5 注意事项

1)目前接口最多支持一次解绑50个cid

7.6 pn查询接口

7.6.1 接口描述

用户通过接口传递cid列表, 可以查询与之相对的pn,接口会批量返回绑定关系。

7.6.2 用法举例

static String appId = "xxxxxxx";
    static String appkey = "xxxxxxx";
    static String masterSecret = "xxxxxxx";
    static String cid = "xxxxxxx";
    static String pnmd5 = "xxxxxxx";
    static String host = "http://sdk.open.api.igexin.com/apiex.htm";
    public static void main(String[] args) {
        queryPnByCid();
    }
    private static void queryPnByCid() {
        IGtPush push = new IGtPush(host, appkey, masterSecret);
        List<String> cidList = new ArrayList<>();
        cidList.add(cid);
        IPushResult res = push.queryCidPn(appId, cidList);
        System.out.println(res.getResponse());
    }

7.6.3 具体参数

参数 类型 是否必填 最大长度 描述
appId String 32 开发者ID
cidList List 50 客户端身份ID列表

7.6.4 返回值说明

参数 类型 是否必填 描述 示例值 其他
result String 响应码 0 详细code码含义。参加文档最后【附录一】
batchRet String 返回每个cid的绑定结果 [{"code":"0","cid":"xxxx"}]

7.6.5 注意事项

1)目前接口最多支持一次解绑50个cid

7.7 短信补量推送接口

7.7.1 接口列表

接口定义 说明
pushMessageToApp 对应用的所有用户群发推送消息
pushMessageToSingle 向单个clientid或别名用户推送消息
pushMessageToList 上传clientid或别名列表,对列表中所有clientid或别名用户进行消息推送
注:详细的推送逻辑参考个推官网。这里只是补充短信推送的逻辑 参考地址:http://docs.getui.com/getui/server/java/push/

7.7.2 支持短信模板的个推消息模板

消息模板 中文含义 是否支持短信模板 其他
Notification 通知模板 消息模板具体含义参考:http://docs.getui.com/getui/server/java/template/
LinkTemplate 网页模板
NotyPopLoadTemplate 下载模板
TransmissionTemplate 透传模板

7.7.3 短信推送模板参数

成员名或方法名 类型 是否必填 描述 示例值 其他
setSmsTemplateId() String 推送的短信模板ID(短信模板说明) smsinfo.setSmsTemplateId("xxxx"); 具体使用,参考下面的代码中LinkTemplate中使用短信模板的示例。其他模板如此相同
setSmsContent() map 推送的短信模板中占位符的内容。 Map smsContent = new HashMap<>(); smsContent.put("name", "张三"); smsContent.put("money", "1234"); smsinfo.setSmsContent(smsContent);
setOfflineSendtime() long 推送后多久进行短信补发(单位:ms) smsinfo.setOfflineSendtime(100000L);

7.7.4 pushMessageToApp 完整示例

public static LinkTemplate linkTemplateDemo() throws Exception {
        LinkTemplate template = new LinkTemplate();
        template.setAppId(appId);
        template.setAppkey(appkey);
        Style0 style = new Style0();
        style.setTitle("请输入通知栏标题");
        style.setText("请输入通知栏内容");
        style.setLogo("icon.png");
        style.setLogoUrl("");
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        template.setStyle(style);
        template.setUrl("http://www.getui.com");
        return template;
    }
    public static SmsInfo smsInfoDemo() throws Exception {
        SmsInfo smsinfo = new SmsInfo();
        //短信模板ID 需要在个推报备开通 才可使用
        smsinfo.setSmsTemplateId("");
        //模板中占位符的内容k.v 结构
        Map<String, String> smsContent = new HashMap<>();
        smsContent.put("name", "张三");
        smsContent.put("money", "1234");
        smsinfo.setSmsContent(smsContent);
        //多久后进行离线补发的时间
        smsinfo.setOfflineSendtime(100000L);
        return smsinfo;
    }
    static String appId = "*****************";
    static String appkey = "*****************";
    static String masterSecret = "*****************";
    static String host = "*****************";
    public static void main(String[] args) throws Exception {
         IGtPush push = new IGtPush(host, appkey, masterSecret);
         LinkTemplate template = linkTemplateDemo();
         //短信补量信息
         template.setSmsInfo(smsInfoDemo());
         AppMessage message = new AppMessage();
         message.setData(template);
         message.setOffline(true);
         //离线有效时间,单位为毫秒,可选
         message.setOfflineExpireTime(24 * 1000 * 3600);
         //推送给App的目标用户需要满足的条件
         AppConditions cdt = new AppConditions();
         List<String> appIdList = new ArrayList<String>();
         appIdList.add(appId);
         message.setAppIdList(appIdList);
         //手机类型
         List<String> phoneTypeList = new ArrayList<String>();
         //省份
         List<String> provinceList = new ArrayList<String>();
         //自定义tag
         List<String> tagList = new ArrayList<String>();
         cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList);
         cdt.addCondition(AppConditions.REGION, provinceList);
         cdt.addCondition(AppConditions.TAG,tagList);
         message.setConditions(cdt);
         IPushResult ret = push.pushMessageToApp(message);
         System.out.println(ret.getResponse().toString());
    }

7.7.5 pushMessageToSingle 完整示例

private static String appId = "";
    private static String appKey = "";
    private static String masterSecret = "";
    static String cid = "";
    //别名推送方式
    // static String Alias = "";
    static String host = "http://sdk.open.api.igexin.com/apiex.htm";
    public static void main(String[] args) throws Exception {
        IGtPush push = new IGtPush(host, appKey, masterSecret);
        LinkTemplate template = linkTemplateDemo();
        //短信补量相关参数信息
        template.setSmsInfo(smsInfoDemo());
        SingleMessage message = new SingleMessage();
        message.setOffline(true);
        message.setOfflineExpireTime(24 * 3600 * 1000);
        message.setData(template);
        message.setPushNetWorkType(0);
        Target target = new Target();
        target.setAppId(appId);
        target.setClientId(cid);
        //target.setAlias(Alias);
        IPushResult ret = null;
        try {
            ret = push.pushMessageToSingle(message, target);
            System.out.println(ret.getResponse().toString());
        } catch (RequestException e) {
            e.printStackTrace();}
    }
public static LinkTemplate linkTemplateDemo() {
        LinkTemplate template = new LinkTemplate();
        // 设置APPID与APPKEY
        template.setAppId(appId);
        template.setAppkey(appKey);
        Style0 style = new Style0();
        // 设置通知栏标题与内容
        style.setTitle("请输入通知栏标题");
        style.setText("请输入通知栏内容");
        style.setLogo("icon.png");
        style.setLogoUrl("");
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        template.setStyle(style);
        template.setUrl("http://www.getui.com");
        return template;
    }
    public static SmsInfo smsInfoDemo() throws Exception {
        SmsInfo smsinfo = new SmsInfo();
        //短信模板ID 需要在个推报备开通 才可使用
        smsinfo.setSmsTemplateId("2017011");
        //模板中占位符的内容k.v 结构
        Map<String, String> smsContent = new HashMap<>();
        smsContent.put("name", "1234");
        smsContent.put("money", "1234");
        smsinfo.setSmsContent(smsContent);
        //多久后进行离线补发的时间(单位:ms)
        smsinfo.setOfflineSendtime(100000L);
        return smsinfo;
    }

7.7.6 pushMessageToList 完整示例

private static String appId = "";
    private static String appKey = "";
    private static String masterSecret = "";
    static String cid1 = "";
    static String cid2 = "";
    //别名推送方式
    // static String alias1 = "";
    // static String alias2 = "";
    static String host = "http://sdk.open.api.igexin.com/apiex.htm";
    public static void main(String[] args) throws Exception {
        System.setProperty("gexin_pushList_needDetails", "true");
        IGtPush push = new IGtPush(host, appKey, masterSecret);
        NotificationTemplate template = notificationTemplateDemo();
        //设置短信补发模板
        template.setSmsInfo(smsInfoDemo());
        ListMessage message = new ListMessage();
        message.setData(template);
        message.setOffline(true);
        message.setOfflineExpireTime(24 * 1000 * 3600);
        List targets = new ArrayList();
        Target target1 = new Target();
        Target target2 = new Target();
        target1.setAppId(appId);
        target1.setClientId(cid1);
        target2.setAppId(appId);
        target2.setClientId(cid2);
        targets.add(target1);
        targets.add(target2);
        String taskId = push.getContentId(message);
        IPushResult ret = push.pushMessageToList(taskId, targets);
        System.out.println(ret.getResponse().toString());
public static NotificationTemplate notificationTemplateDemo() {
        NotificationTemplate template = new NotificationTemplate();
        template.setAppId(appId);
        template.setAppkey(appKey);
        Style0 style = new Style0();
        style.setTitle("请输入通知栏标题");
        style.setText("请输入通知栏内容");
        // 配置通知栏图标
        style.setLogo("icon.png");
        // 配置通知栏网络图标
        style.setLogoUrl("");
        // 设置通知是否响铃,震动,或者可清除
        style.setRing(true);
        style.setVibrate(true);
        style.setClearable(true);
        template.setStyle(style);
        template.setTransmissionType(2);
        template.setTransmissionContent("请输入您要透传的内容");
        return template;
    }
    public static SmsInfo smsInfoDemo() throws Exception {
        SmsInfo smsinfo = new SmsInfo();
        //短信模板ID 需要在个推报备开通 才可使用
        smsinfo.setSmsTemplateId("2017011");
        //模板中占位符的内容k.v 结构
        Map<String, String> smsContent = new HashMap<>();
        smsContent.put("code", "1234");
        smsContent.put("time", "1234");
        smsinfo.setSmsContent(smsContent);
        //离线多久后开始补发(单位:ms)
        smsinfo.setOfflineSendtime(100000L);
        return smsinfo;
    }

7.7.7 返回值说明

参数 类型 是否必填 描述 示例值
result String 响应码 result=ok
contentId String 任务ID contentId=xxxxxxx
smsResult String 短信提交结果 smsResult=accept
smsResultMsg String 短信提交失败结果 smsResultMsg=模板不存在

7.7.8 推送返回的完整结果示例

结果 示例 说明
短信补量提交成功 {result=ok, contentId=xxxxx, smsResult=accept} 消息推送成功,短信提交成功。
短信补量提交失败 {result=ok, smsResultMsg=模板不存在, contentId=xxxxxxx, smsResult=error} 消息推送成功,短信提交失败。

7.7.9 注意事项

1)短信参数填错,将不会进行短信补量,但是通过个推的sdk推送的消息会正常下发

2)短信补量的开始时间必须在个推通道的离线时间内,且不大于服务端限制值(目前设置是3天)。

3)短信补发的整个内容的总长度不能超过70字。

7.8 pn与cid操作的相关状态码

状态码 含义
0 成功
1 cid不存在
2 cid与appid不匹配
3 不能覆写低级别的PN绑定
4 应用下该PN已经绑定更活跃的cid
5 cid为空
6 pn为空
7 该cid没有绑定PN值
8 其他原因导致的失败
通知
2018.03.21 Android SDK 4.3.0.0

增加通知到达、点击回调 适配Android 8.0 修复若干其他bug

......
2018.03.19 Android SDK 2.12.3.0

增加通知到达、点击回调 适配Android 8.0 修复若干其他bug

......
2018.01.29 JAVA SDK 4.0.1.17

苹果消息推送添加语音功能(VOIP)

......
2018.01.25 iOS SDK 2.2.0.0

新增 VOIP 推送及统计支持。 优化 SDK 解决已知问题。

......
2017.12.18 iOS SDK 2.1.0.0

新增 SDK 离线状态返回。 优化 SDK 解决已知问题。

......

文档中心搜索