消息推送方式

消息推送方式

1. 对单个用户推送消息

1.1 描述

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

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

1.2 应用场景

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

1.3 接口说明

接口名称 支持推送类型 说明
pushMessageToSingle 透传(payload)、点击通知启动应用、点击通知打开网页等 对单个用户(ClientID)推送

正常推送不需要传requestId,如果发生异常重试时将requestId传入,具体用法详见示例代码

pushMessageToSingle($message, $target, $requestId = null)

1.4 pushMessageToSingle代码实例

<?php
//消息推送Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');

//采用"PHP SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置
define('APPKEY','');
define('APPID','');
define('MASTERSECRET','');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID');
//别名推送方式
//define('Alias','请输入您的Alias');

pushMessageToSingle();

//单推接口案例
function pushMessageToSingle(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);

    //消息模版:
    // 4.NotyPopLoadTemplate:通知弹框下载功能模板
    $template = IGtNotyPopLoadTemplateDemo();


    //定义"SingleMessage"
    $message = new IGtSingleMessage();

    $message->set_isOffline(true);//是否离线
    $message->set_offlineExpireTime(3600*12*1000);//离线时间
    $message->set_data($template);//设置推送消息类型
    //$message->set_PushNetWorkType(0);//设置是否根据WIFI推送消息,2为4G/3G/2G,1为wifi推送,0为不限制推送
    //接收方
    $target = new IGtTarget();
    $target->set_appId(APPID);
    $target->set_clientId(CID);
//    $target->set_alias(Alias);

    try {
        $rep = $igt->pushMessageToSingle($message, $target);
        var_dump($rep);
        echo ("<br><br>");

    }catch(RequestException $e){
        $requstId =e.getRequestId();
        //失败时重发
        $rep = $igt->pushMessageToSingle($message, $target,$requstId);
        var_dump($rep);
        echo ("<br><br>");
    }
}

function IGtNotyPopLoadTemplateDemo(){
        $template =  new IGtNotyPopLoadTemplate();
        $template ->set_appId(APPID);                      //应用appid
        $template ->set_appkey(APPKEY);                    //应用appkey
        //通知栏
        $template ->set_notyTitle("请填写通知标题");                 //通知栏标题
        $template ->set_notyContent("请填写通知内容"); //通知栏内容
        $template ->set_notyIcon("");                      //通知栏logo
        $template ->set_isBelled(true);                    //是否响铃
        $template ->set_isVibrationed(true);               //是否震动
        $template ->set_isCleared(true);                   //通知栏是否可清除
        //弹框
        $template ->set_popTitle("弹框标题");              //弹框标题
        $template ->set_popContent("弹框内容");            //弹框内容
        $template ->set_popImage("");                      //弹框图片
        $template ->set_popButton1("下载");                //左键
        $template ->set_popButton2("取消");                //右键
        //下载
        $template ->set_loadIcon("");                      //弹框图片
        $template ->set_loadTitle("请填写下载标题");
        $template ->set_loadUrl("请填写下载地址");
        $template ->set_isAutoInstall(false);
        $template ->set_isActived(true);

        //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
        $begin = "2015-02-28 15:26:22";
        $end = "2015-02-28 15:31:24";
        $template->set_duration($begin,$end);
        return $template;
}
?>

1.5 返回值

字段 返回码
返回值 请点击Result返回值
客户端展示

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

2.1 接口说明

如果仅对单个用户推送务必使用单推接口,否则会严重影响推送性能,如果对少量甚至几个用户推送同样的消息,建议使用单推实现,性能会更高

接口名称 支持推送类型 说明
pushMessageToList 透传(payload)、点击通知启动应用、点击通知打开网页等 (通过clientid列表)群推,可查看clientid列表中每个用户的在线状态

2.2 应用场景

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

2.3 pushMessageToList代码实例

<?php
//消息推送Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');

//采用"PHP SDK 快速入门""第二步 获取访问凭证 "中获得的应用配置
define('APPKEY','');
define('APPID','');
define('MASTERSECRET','');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID1','请输入您的CID1');
define('CID2','请输入您的CID2');
//define('Alias1','请输入您的Alias1');
//define('Alias2','请输入您的Alias2');

pushMessageToList();

//多推接口案例
function pushMessageToList(){
    putenv("gexin_pushList_needDetails=true");
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    //$igt = new IGeTui('',APPKEY,MASTERSECRET);//此方式可通过获取服务端地址列表判断最快域名后进行消息推送,每10分钟检查一次最快域名
    //消息模版:
    // LinkTemplate:通知打开链接功能模板
    $template = IGtLinkTemplateDemo();


    //定义"ListMessage"信息体
    $message = new IGtListMessage();
    $message->set_isOffline(true);//是否离线
    $message->set_offlineExpireTime(3600*12*1000);//离线时间
    $message->set_data($template);//设置推送消息类型
    $message->set_PushNetWorkType(1);//设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
    $contentId = $igt->getContentId($message);
    //接收方1  
    $target1 = new IGtTarget();
    $target1->set_appId(APPID);
    $target1->set_clientId(CID1);
    //$target1->set_alias(Alias1);
    //接收方2
    $target2 = new IGtTarget();
    $target2->set_appId(APPID);
    $target2->set_clientId(CID2);
    //$target2->set_alias(Alias2);


    $targetList[0] = $target1;
    $targetList[1] = $target2;

    $rep = $igt->pushMessageToList($contentId, $targetList);
    var_dump($rep);
    echo ("<br><br>");
}

function IGtLinkTemplateDemo(){
        $template =  new IGtLinkTemplate();
        $template ->set_appId(APPID);                  //应用appid
        $template ->set_appkey(APPKEY);                //应用appkey
        $template ->set_title("请输入通知标题");       //通知栏标题
        $template ->set_text("请输入通知内容");        //通知栏内容
        $template->set_logo("");                       //通知栏logo
        $template->set_logoURL("");                    //通知栏logo链接
        $template ->set_isRing(true);                  //是否响铃
        $template ->set_isVibrate(true);               //是否震动
        $template ->set_isClearable(true);             //通知栏是否可清除
        $template ->set_url("http://www.igetui.com/"); //打开连接地址
        //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
        $begin = "2015-02-28 15:26:22";
        $end = "2015-02-28 15:31:24";
        $template->set_duration($begin,$end);

        // iOS推送需要设置的pushInfo字段(老方法不再介意使用)
        //$template ->set_pushInfo($actionLocKey,$badge,$message,$sound,$payload,$locKey,$locArgs,$launchImage);
        //$template ->set_pushInfo("",2,"","","","","","");
         //iOS推送需要设置的pushInfo字段(推荐使用)
//        $apn = new IGtAPNPayload();
//        $apn->alertMsg = "alertMsg";
//        $apn->badge = 11;
//        $apn->actionLocKey = "启动";
//        $apn->category = "ACTIONABLE";
//        $apn->contentAvailable = 1;
//        $apn->locKey = "通知栏内容";
//        $apn->title = "通知栏标题";
//        $apn->titleLocArgs = array("titleLocArgs");
//        $apn->titleLocKey = "通知栏标题";
//        $apn->body = "body";
//        $apn->customMsg = array("payload"=>"payload");
//        $apn->launchImage = "launchImage";
//        $apn->locArgs = array("locArgs");
//
//        $apn->sound=("test1.wav");;
//        $template->set_apnInfo($apn);
        return $template;
}
?>

2.4 返回值

字段 返回码
返回值 请点击Result返回值
客户端展示

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

3. 对指定应用群推消息

3.1 接口说明

接口名称 支持推送类型 说明
pushMessageToApp 透传(payload)、点击通知启动应用、点击通知打开网页等 (通过应用AppID)群推,给所有符合条件的客户端用户推送

3.2 应用场景

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

3.3 pushMessageToApp代码实例

<?php
//消息推送Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID');
pushMessageToApp();
function pushMessageToApp(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtLinkTemplateDemo();
    //个推信息体
    //基于应用消息体
    $message = new IGtAppMessage();
    $message->set_isOffline(true);
    $message->set_offlineExpireTime(10 * 60 * 1000);//离线时间单位为毫秒,例,两个小时离线为3600*1000*2
    $message->set_data($template);

    $appIdList=array(APPID);
    $phoneTypeList=array('ANDROID');
    $provinceList=array('浙江');
    $tagList=array('haha');

    $cdt = new AppConditions();
    $cdt->addCondition(AppConditions::PHONE_TYPE, $phoneTypeList);
    $cdt->addCondition(AppConditions::REGION, $provinceList);
    $cdt->addCondition(AppConditions::TAG, $tagList);

    $message->set_appIdList($appIdList);
    $message->set_conditions($cdt);

    $rep = $igt->pushMessageToApp($message);

    var_dump($rep);
    echo ("<br><br>");
}

function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.getui.com/");//打开连接地址
    //$template->set_notifyStyle(0);
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
    //iOS推送需要设置的pushInfo字段
//        $apn = new IGtAPNPayload();
//        $apn->alertMsg = "alertMsg";
//        $apn->badge = 11;
//        $apn->actionLocKey = "启动";
//    //        $apn->category = "ACTIONABLE";
//    //        $apn->contentAvailable = 1;
//        $apn->locKey = "请输入通知栏内容";
//        $apn->title = "请输入通知栏标题";
//        $apn->titleLocArgs = array("titleLocArgs");
//        $apn->titleLocKey = "请输入通知栏标题";
//        $apn->body = "body";
//        $apn->customMsg = array("payload"=>"payload");
//        $apn->launchImage = "launchImage";
//        $apn->locArgs = array("locArgs");
//
//        $apn->sound=("test1.wav");;
//        $template->set_apnInfo($apn);
    return $template;
}
?>

按城市接口推送

城市级别的推送基于个推原先的按省份推送的功能之上,使用同一个方法,这样可以减少开发者使用过程中的代码变更。省略具体的推送代码,下面展示相关变动的代码。

原来的省份推送是这样使用的:

$cdt = new AppConditions();
$provinceList=array('浙江','上海','北京');
$cdt->addCondition(AppConditions::REGION, $provinceList);

现在按城市推送的使用方法如下:

$cdt = new AppConditions();
$provinceList=array('浙江','上海','北京');
array_push($myarray, "33010000");   //杭州市
array_push($myarray, "51010000");   //成都市
$cdt->addCondition(AppConditions::REGION, $provinceList);

只需要在原有的列表里加入城市编号即可。

注1:编号对应表如region_code.data文件。

注2:列表里的城市仅支持编号表示,建议省份也用编号表示。为了兼容老用户,省份列表里的汉字仍能继续使用。

3.4 返回值

字段 返回码
返回值 请点击Result返回值
客户端展示

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

4. 任务组名推送

4.1 描述

仅在wifi条件下才展示通知内容,充分帮用户节省流量。

4.2 应用场景

  • 场景:主要用于富媒体、视频、应用下载等推送,仅在wifi环境下展现推送消息,用较精美的富文本内容展示通知,充分帮用户节省流量

4.3 对应接口

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

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

//设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
$message->set_PushNetWorkType(0);



4.4 代码实例

function pushMessageToSingle(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtTransmissionTemplateDemo();
    //个推信息体
    $message = new IGtSingleMessage();
    $message->set_data($template);//设置推送消息类型
    $message->set_PushNetWorkType(0);//设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
}

以上示例代码仅部分展示,若要查询完整demo请看单个用户推送示例

5. 定速推送

5.1 描述

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

5.2 应用场景

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

5.3 对应接口

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

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

$message->set_speed(100);


5.4 代码实例

function pushMessageToApp(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtLinkTemplateDemo();
    //个推信息体
    $message = new IGtAppMessage();
    $message->set_data($template);//设置推送消息类型
    $message->set_speed(100);定速推送
}

以上示例代码仅部分展示,若要查询完整demo请看单个用户推送示例

6. 定时任务推送

6.1 定时对指定应用群推消息

描述

对单个指定应用的所有用户群发推送消息。该消息可以在用户设定的时间点进行推送。

注:此接口需要申请开通,申请邮箱:lieg@getui.com

推送接口

代码示例
<?php
//消息推送Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID');
pushMessageToApp();
function pushMessageToApp(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtLinkTemplateDemo();
    //个推信息体
    //基于应用消息体
    $message = new IGtAppMessage();
    $message->set_isOffline(true);
    $message->set_offlineExpireTime(10 * 60 * 1000);//离线时间单位为毫秒,例,两个小时离线为3600*1000*2
    $message->setPushTime(201807311050);//在用户设定的时间点进行推送,格式为年月日时分
    $message->set_data($template);
    $appIdList=array(APPID);
    $phoneTypeList=array('ANDROID');
    $provinceList=array('浙江');
    $tagList=array('haha');

    $cdt = new AppConditions();
    $cdt->addCondition(AppConditions::PHONE_TYPE, $phoneTypeList);
    $cdt->addCondition(AppConditions::REGION, $provinceList);
    $cdt->addCondition(AppConditions::TAG, $tagList);

    $message->set_appIdList($appIdList);
    $message->set_conditions($cdt);

    $rep = $igt->pushMessageToApp($message);

    var_dump($rep);
    echo ("<br><br>");
}
function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.igetui.com/");//打开连接地址
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
    return $template;
}
?>
接口部分参数详细说明
  • 使用推送的sdk包版本必须大于等于4.0.1.17。
  • 设定推送的时间格式为yyyyMMddHHmm 例如:201710251900,任务将会在2017年10月25日17点00分推送。
  • 对时间的设定有一定的要求:
    1. 时间格式不正确 提交任务时 将直接返回失败。
    2. 下发时间小于当前时间 提交任务时将直接返回失败。
    3. 下发时间超过系统所允许的最大时间点 提交任务 将直接返回失败

6.2 定时任务查询接口

描述

该接口主要用来返回 已提交的定时任务的相关信息。

对应接口

getScheduleTask($taskId,$appId)

参数说明

参数名 类型 必需 默认值 参数描述
taskId String 任务ID
appId String 应用ID
代码示例
function getScheduleTaskDemo(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $ret = $igt->getScheduleTask(TASKID,APPID);
    var_dump($ret);
}

返回的主要参数如下:

参数名称 参数含义
pushContent 推送类容(transmission的内容)
pushTime 推送时间
creatTime 任务创建时间
sendResult 任务状态

6.3 定时任务删除接口

描述

用来删除还未下发的任务

对应接口

delScheduleTask($taskId,$appId)

参数说明

参数名 类型 必需 默认值 参数描述
$taskId String 任务ID
appId String 应用ID
代码示例
function delScheduleTaskDemo(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $ret = $igt->delScheduleTask(TASKID,APPID);
    var_dump($ret);
}

需要补充说明的是:

  • 距离下发还有一分钟的任务 将无法删除 也即 停止任务下发。

7. 任务组名推送

7.1 描述

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

7.2 应用场景

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

7.3 对应接口

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

7.3.1 Tolist接口代码实例

function toListGroupName($host, $appkey, $mastersecret, $message, $taskGroupName) {
    $igt = new IGeTui($host, $appkey, $mastersecret);
    $contentId = $igt->getContentId($message,"toList任务别名功能");
}

7.3.2 Toapp接口代码实例**

function toAppGroupName($host, $appkey, $mastersecret, $message, $taskGroupName) {
    $igt = new IGeTui($host, $appkey, $mastersecret);
    $igt->pushMessageToApp($message, $taskGroupName);
}

8. 应用群推条件交并补功能

8.1 描述

应用群推对于复杂的查询条件新增加的交并补功能,以对应查询语义中的与或非的关系

8.2 应用场景

  • 场景:需要发送给城市在A,B,C里面,没有设置tagtest标签,手机型号为android的用户,用条件交并补功能可以实现,city(A|B|C) && !tag(tagtest) && phonetype(andriod)

8.3 对应接口

// AppConditions类的实例方法
AppConditions addCondition($key, $values, $optType)
参数说明:
参数名 类型 必需 默认值 参数描述
$key String 查询条件键(phoneType 手机类型,region 省市,tag 用户标签)
$values List 查询条件值列表
$optType OptType OptType._NOT_ 条件类型(OptType._OR_ 或, OptType._AND_ 与, OptType._NOT_ 非)

8.4 代码实例

<?php

header("Content-Type: text/html; charset=utf-8");

require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
require_once(dirname(__FILE__) . '/' . 'igetui/IGt.AppMessage.php');
require_once(dirname(__FILE__) . '/' . 'igetui/IGt.APNPayload.php');
require_once(dirname(__FILE__) . '/' . 'igetui/template/IGt.BaseTemplate.php');
require_once(dirname(__FILE__) . '/' . 'IGt.Batch.php');
require_once(dirname(__FILE__) . '/' . 'igetui/utils/AppConditions.php');

//http的域名
define('HOST','');
//定义常量, appId、appKey、masterSecret 采用本文档 "第二步 获取访问凭证 "中获得的应用配置               
define('APPKEY','');
define('APPID','');
define('MASTERSECRET','');

pushMessageToApp();

function pushMessageToApp(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtLinkTemplateDemo();
    //个推信息体
    //基于应用消息体
    $message = new IGtAppMessage();
    $message->set_isOffline(true);
    $message->set_offlineExpireTime(10 * 60 * 1000);//离线时间单位为毫秒,例,两个小时离线为3600*1000*2
    $message->set_data($template);

    $appIdList=array(APPID);
    $phoneTypeList=array('ANDROID');
    $provinceList=array('浙江');
    $tagList=array('haha');

    $cdt = new AppConditions();
    $cdt->addCondition(AppConditions::PHONE_TYPE, $phoneTypeList, OptType::_OR_);
    $cdt->addCondition(AppConditions::REGION, $provinceList,OptType::_AND_);
    $cdt->addCondition(AppConditions::TAG, $tagList, OptType::_OR_);

    $message->set_appIdList($appIdList);
    $message->set_conditions($cdt);

    $rep = $igt->pushMessageToApp($message);

    var_dump($rep);
}


function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.igetui.com/");//打开连接地址
    return $template;
}
?>

9. 批量单推功能

9.1 描述

用于一次创建提交多个单推任务。

9.2应用场景

当单推任务较多时,推荐使用该接口,可以减少与服务端的交互次数。

9.3 对应接口

函数说明:

接口定义 说明
add($message, $target) 追加单推消息
submit() 提交消息
retry() 重新提交

参数说明:

推送参数message和target与对单个用户推送消息使用的的参数相同

推送返回值:

批量单推每个单推消息的返回结果在submit返回值的info字段中,具体为加入时的序号和对应的返回结果。返回值详情请点击Result返回值

代码实例:

<?php
//批量单推Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID1','请输入您的CID1');
define('CID2','请输入您的CID2');
pushMessageToSingleBatch();
function pushMessageToSingleBatch()
{
    $igt = new IGeTui(HOST, APPKEY, MASTERSECRET);
    $batch = new IGtBatch(APPKEY, $igt);
    $batch->setApiUrl(HOST);
    //$igt->connect();
    //消息模版:
    // 1.TransmissionTemplate:透传功能模板
    // 2.LinkTemplate:通知打开链接功能模板
    // 3.NotificationTemplate:通知透传功能模板
    // 4.NotyPopLoadTemplate:通知弹框下载功能模板

    //$template = IGtNotyPopLoadTemplateDemo();
    $templateLink = IGtLinkTemplateDemo();
    $templateNoti = IGtNotificationTemplateDemo();
    //$template = IGtTransmissionTemplateDemo();

    //个推信息体
    $messageLink = new IGtSingleMessage();
    $messageLink->set_isOffline(true);//是否离线
    $messageLink->set_offlineExpireTime(12 * 1000 * 3600);//离线时间
    $messageLink->set_data($templateLink);//设置推送消息类型
    //$messageLink->set_PushNetWorkType(1);//设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送

    $targetLink = new IGtTarget();
    $targetLink->set_appId(APPID);
    $targetLink->set_clientId(CID1);
    $batch->add($messageLink, $targetLink);

    //个推信息体
    $messageNoti = new IGtSingleMessage();
    $messageNoti->set_isOffline(true);//是否离线
    $messageNoti->set_offlineExpireTime(12 * 1000 * 3600);//离线时间
    $messageNoti->set_data($templateNoti);//设置推送消息类型
    //$messageNoti->set_PushNetWorkType(1);//设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送

    $targetNoti = new IGtTarget();
    $targetNoti->set_appId(APPID);
    $targetNoti->set_clientId(CID2);
    $batch->add($messageNoti, $targetNoti);

    try {
        $rep = $batch->submit();
        var_dump($rep);
        echo("<br><br>");
    }catch(Exception $e){
        $rep=$batch->retry();
        var_dump($rep);
        echo ("<br><br>");
    }
}

function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.igetui.com/");//打开连接地址
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
    return $template;
}

function IGtNotificationTemplateDemo(){
    $template =  new IGtNotificationTemplate();
    $template->set_appId(APPID);//应用appid
    $template->set_appkey(APPKEY);//应用appkey
    $template->set_transmissionType(1);//透传消息类型
    $template->set_transmissionContent("测试离线");//透传内容
    $template->set_title("请填写通知标题");//通知栏标题
    $template->set_text("请填写通知内容");//通知栏内容
    $template->set_logo("http://wwww.igetui.com/logo.png");//通知栏logo
    $template->set_isRing(true);//是否响铃
    $template->set_isVibrate(true);//是否震动
    $template->set_isClearable(true);//通知栏是否可清除
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
    return $template;
}
?>

10. 短信补量推送接口

10.1 说明

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

10.2 接入流程

10.2.1 获取应用参数

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

10.2.2 模板报备

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

10.2.3 模板示例

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

10.2.4 pn绑定

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

10.3 短信补量补发逻辑

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

10.4 cid与pn绑定接口

10.4.1 接口描述

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

10.4.2 功能代码示例

<?php
//批量单推Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID1');
define('PN','10');
bindCidPnDemo();
function bindCidPnDemo(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $params = array();
    $params[CID] = md5(PN);
    $params["f7e0ef389ac6133c88aedbd66b44a4e1"] = PN;
    $ret = $igt->bindCidPn(appId,$params);
    var_dump($ret);
}
?>

10.4.3 具体参数

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

10.4.4 返回值说明

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

10.4.5 注意事项

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

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

10.5 cid与pn解绑接口

10.5.1 接口描述

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

10.5.2 功能代码示例

<?php
//批量单推Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID1','请输入您的CID1');
define('CID2','请输入您的CID2');
unbindCidPnDemo();
function unbindCidPnDemo(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $cids=array(CID1,CID2);
    $ret = $igt->unbindCidPn(APPID,$cids);
    var_dump($ret);
}

10.5.3 具体参数

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

10.5.4 返回值说明

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

10.5.5 注意事项

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

10.6 pn查询接口

10.6.1 接口描述

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

10.6.2 用法举例

<?php
//批量单推Demo
header("Content-Type: text/html; charset=utf-8");
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID1','请输入您的CID1');
define('CID2','请输入您的CID2');
queryCidPnDemo()
function queryCidPnDemo(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $cidList=array(CID1,CID2);
    $ret = $igt->queryCidPn(APPID,$cidList);
    var_dump($ret);
}
?>

10.6.3 具体参数

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

10.6.4 返回值说明

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

10.6.5 注意事项

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

10.7 短信补量推送接口

10.7.1 接口列表

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

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

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

10.7.3 短信推送模板参数

成员名或方法名 类型 是否必填 描述 示例值 其他
setSmsTemplateId() String 推送的短信模板ID(短信模板说明) $smsMessage->setSmsTemplateId("xxxx"); 具体使用,参考下面的代码中LinkTemplate中使用短信模板的示例。其他模板如此相同
setSmsContent() map 推送的短信模板中占位符的内容。 $smsContent = array(); $smsContent["name"] = "zhangsan"; $smsContent["money"] = "0000"; $smsMessage->smsContent($smsContent);
setOfflineSendtime() long 推送后多久进行短信补发(单位:ms) $smsMessage->setOfflineSendtime(100000L);
$smsMessage->setIsApplink() boolean 推送的短信模板中是否选用APPLink进行推送。 $smsMessage->setIsApplink(true);
$smsMessage->setUrl(); String 推送的短信模板中的APPLink链接地址。 $smsMessage->setUrl("www.baidu.com");
$smsMessage->setPayload(); String 推送的短信模板中的APPLink自定义字段。 $smsMessage->setPayload("自定义");

10.7.4 pushMessageToApp 完整示例

function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.igetui.com/");//打开连接地址
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
     //短信消息类
    $smsMessage = new SmsMessage();
    $smsContent = array();
    $smsContent["name"] = "zhangsan";
    $smsContent["money"] = "00000";
    $smsMessage->setSmsTemplateId("");//短信模板ID 需要在个推报备开通 才可使用
    $smsMessage->setOfflineSendtime(1000);//多久后进行离线补发的时间
    //注意当使用AppLink时,smsContent不能传值url
    $smsMessage->smsContent($smsContent);
    //推送的短信模板中是否选用APPLink进行推送。
    $smsMessage->setIsApplink(true);
    //推送的短信模板中的APPLink链接地址
    $smsMessage->setUrl("www.baidu.com");
    //推送的短信模板中的APPLink自定义字段。
    $smsMessage->setPayload("自定义");
    $template->setSmsInfo($smsMessage);
    return $template;
}
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID');
pushMessageToApp();
function pushMessageToApp(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);
    $template = IGtLinkTemplateDemo();
    //个推信息体
    //基于应用消息体
    $message = new IGtAppMessage();
    $message->set_isOffline(true);
    $message->set_offlineExpireTime(10 * 60 * 1000);//离线时间单位为毫秒,例,两个小时离线为3600*1000*2
    $message->set_data($template);
    message->setPushTime(201807311050);
    $appIdList=array(APPID);
    $phoneTypeList=array('ANDROID');
    $provinceList=array('浙江');
    $tagList=array('haha');
    $cdt = new AppConditions();
    $cdt->addCondition(AppConditions::PHONE_TYPE, $phoneTypeList);
    $cdt->addCondition(AppConditions::REGION, $provinceList);
    $cdt->addCondition(AppConditions::TAG, $tagList);
    $message->set_appIdList($appIdList);
    $message->set_conditions($cdt);
    $rep = $igt->pushMessageToApp($message);
    var_dump($rep);
    echo ("<br><br>");
   }

10.7.5 pushMessageToSingle 完整示例

//单推接口案例
require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID');
pushMessageToSingle()
function pushMessageToSingle(){
    $igt = new IGeTui(HOST,APPKEY,MASTERSECRET);

    //消息模版:
    // 1.TransmissionTemplate:透传功能模板
    // 2.LinkTemplate:通知打开链接功能模板
    // 3.NotificationTemplate:通知透传功能模板
    // 4.NotyPopLoadTemplate:通知弹框下载功能模板
    $template = IGtLinkTemplateDemo();
    $message = new IGtSingleMessage();

    $message->set_isOffline(true);//是否离线
    $message->set_offlineExpireTime(3600*12*1000);//离线时间
    $message->set_data($template);//设置推送消息类型
//    $message->set_PushNetWorkType(0);//设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
    //接收方
    $target = new IGtTarget();
    $target->set_appId(APPID);
    $target->set_clientId(CID);
//    $target->set_alias(Alias);

    try {
        $rep = $igt->pushMessageToSingle($message, $target);
        var_dump($rep);
        echo ("<br><br>");

    }catch(RequestException $e){
        $requstId =$e->getRequestId();
        $rep = $igt->pushMessageToSingle($message, $target,$requstId);
        var_dump($rep);
        echo ("<br><br>");
    }

}
function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.igetui.com/");//打开连接地址
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
     //短信消息类
    $smsMessage = new SmsMessage();
    $smsContent = array();
    $smsContent["name"] = "zhangsan";
    $smsContent["money"] = "00000";
    $smsMessage->setSmsTemplateId("");//短信模板ID 需要在个推报备开通 才可使用
    $smsMessage->setOfflineSendtime(1000);//多久后进行离线补发的时间
    //注意当使用AppLink时,smsContent不能传值url
    $smsMessage->smsContent($smsContent);
    //推送的短信模板中是否选用APPLink进行推送。
    $smsMessage->setIsApplink(true);
    //推送的短信模板中的APPLink链接地址
    $smsMessage->setUrl("www.baidu.com");
    //推送的短信模板中的APPLink自定义字段。
    $smsMessage->setPayload("自定义");
    $template->setSmsInfo($smsMessage);
    return $template;
}

10.7.6 pushMessageToList 完整示例

require_once(dirname(__FILE__) . '/' . 'IGt.Push.php');
define('APPKEY','请输入您的APPKEY');
define('APPID','请输入您的APPID');
define('MASTERSECRET','请输入您的MASTERSECRET');
define('HOST','http://sdk.open.api.igexin.com/apiex.htm');
define('CID','请输入您的CID');
function pushMessageToList()
{
    putenv("gexin_pushList_needDetails=true");//是否开启needDetails
    putenv("gexin_pushList_needAsync=true");//是否开启needAsync

    $igt = new IGeTui(HOST, APPKEY, MASTERSECRET);
    //消息模版:
    // 1.TransmissionTemplate:透传功能模板
    // 2.LinkTemplate:通知打开链接功能模板
    // 3.NotificationTemplate:通知透传功能模板
    // 4.NotyPopLoadTemplate:通知弹框下载功能模板

    $template = IGtLinkTemplateDemo();
    //个推信息体
    $message = new IGtListMessage();
    $message->set_isOffline(true);//是否离线
    $message->set_offlineExpireTime(3600 * 12 * 1000);//离线时间
    $message->set_data($template);//设置推送消息类型
//  $message->set_PushNetWorkType(1);    //设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
//  $contentId = $igt->getContentId($message);
    $contentId = $igt->getContentId($message,"toList任务别名功能");    //根据TaskId设置组名,支持下划线,中文,英文,数字

    //接收方1
    $target1 = new IGtTarget();
    $target1->set_appId(APPID);
    $target1->set_clientId(CID);
//  $target1->set_alias(Alias);

    $targetList[] = $target1;

    $rep = $igt->pushMessageToList($contentId, $targetList);

    var_dump($rep);

    echo ("<br><br>");

}
function IGtLinkTemplateDemo(){
    $template =  new IGtLinkTemplate();
    $template ->set_appId(APPID);//应用appid
    $template ->set_appkey(APPKEY);//应用appkey
    $template ->set_title("请输入通知标题");//通知栏标题
    $template ->set_text("请输入通知内容");//通知栏内容
    $template ->set_logo("");//通知栏logo
    $template ->set_isRing(true);//是否响铃
    $template ->set_isVibrate(true);//是否震动
    $template ->set_isClearable(true);//通知栏是否可清除
    $template ->set_url("http://www.igetui.com/");//打开连接地址
    //$template->set_duration(BEGINTIME,ENDTIME); //设置ANDROID客户端在此时间区间内展示消息
     //短信消息类
    $smsMessage = new SmsMessage();
    $smsContent = array();
    $smsContent["name"] = "zhangsan";
    $smsContent["money"] = "00000";
    $smsMessage->setSmsTemplateId("");//短信模板ID 需要在个推报备开通 才可使用
    $smsMessage->setOfflineSendtime(1000);//多久后进行离线补发的时间
    //注意当使用AppLink时,smsContent不能传值url
    $smsMessage->smsContent($smsContent);
    //推送的短信模板中是否选用APPLink进行推送。
    $smsMessage->setIsApplink(true);
    //推送的短信模板中的APPLink链接地址
    $smsMessage->setUrl("www.baidu.com");
    //推送的短信模板中的APPLink自定义字段。
    $smsMessage->setPayload("自定义");
    $template->setSmsInfo($smsMessage);
    return $template;
}

10.7.7 返回值说明

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

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

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

10.7.9 注意事项

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

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

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

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

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

11. 推送结果返回值

具体返回值请查询下表

正确返回 返回码 结果说明
successed_online 用户在线,消息在线下发
successed_offline 用户离线,消息存入离线系统
Ok 发送成功
details 返回用户状态的详细信息
contentId 任务ID(当result值为ok时,有此字段)
错误返回 返回码 结果说明
Error 请求信息填写有误
action_error 未找到对应的action动作
appkey_error Appkey填写错误
domain_error 填写的域名错误或者无法解析
sign_error Appkey与ClientId不匹配,鉴权失败
AppidNoMatchAppKey appid和鉴权的appkey不匹配
PushMsgToListOrAppTimesOverLimit 群推次数超过最大值
PushTotalNumOverLimit 推送个数总数超过最大值
AppIdNoUsers 该AppId下的用户总数为0
SendError 消息推送发送错误
SynSendError 报文发送错误
flow_exceeded 接口消息推送流量已超限
TargetListIsNullOrSizeIs0 推送target列表为空
PushTotalNumOverLimit 推送消息个数总数超限
TokenMD5NoUsers target列表没有有效的clientID
NullMsgCommon 未找到contentId对应的任务
TaskIdHasBeanCanceled 任务已经被取消
AppidError clientid绑定的appid与推送的appid不符
successed_ignore 无效用户,消息丢弃
TokenMD5Error clientID填写有误
SendError 消息发送错误
AppidNoAppSecret appid未找到对应的appSecret
OtherError 未知错误,无法判定错误类型
开发者中心 SDK 下载

文档中心搜索