**个推开发者文档超详细**
在开发推送时,用到个推,发现官方的dome很不友好,用起来让人很费解,所以花了点时间做整理和超详细的注释,废话不多说,下面直接上代码
<?php
/**
* Created by PhpStorm.
* User: 个推技术团队
* Arrange-Notes: 寻梦(e-mail:feiyudewo@126.com)
* Date: 2019-6-25
* Time: 上午10:56
*/
设置代理
//putenv("gexin_http_proxy_ip=192.168.44.129");
//putenv("gexin_http_proxy_port=808");
//putenv("gexin_http_proxy_username=user");
//putenv("gexin_http_proxy_passwd=123456");
define('APPKEY', '');
define('APPID', '');
define('MASTERSECRET', '');
define('HOST', '');
//define('CID', '');
//define('DT', '');
//define('CID1', '');
//define('DT1', '');
//define('groupName', '');
//define('PN','');
//define('Badge', '+1');
//define("TASKID", "OSA-0731_RGyUZj0gYEAC51o1EgbTz8");
//define("ALIAS", "ALIAS");
/**
* 为单个用户绑定别名
* @param string $alias 别名 字母(区分大小写)、数字、下划线、汉字
* @param string $cid 用户cid
* @return mixed|null
* @throws Exception
*/
function bindAlias($alias,$cid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->bindAlias(APPID, $alias, $cid);
return $ret;
}
/**
* 根据别名获取clientid信息
* @param string $alias 用户别名
* @return mixed|null
*/
function queryCidByAlias($alias)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->queryClientId(APPID, $alias);
return $ret;
}
/**
* 通过clientid获取别名信息
* @param string $cid 客户端cid
* @return mixed|null
*/
function queryAliasByCID($cid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->queryAlias(APPID, $cid);
return $ret;
}
/**
* 单个clientid和别名解绑
* @param string $alias 别名
* @param string $cid 客服端cid
* @return mixed|null
*/
function unbindAlias($alias,$cid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->unBindAlias(APPID, $alias, $cid);
return $ret;
}
/**
* 绑定别名的所有clientid解绑
* @param string $alias 别名
* @return mixed|null
*/
function unbindAliasAll($alias)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->unBindAliasAll(APPID, $alias);
return $ret;
}
/**
* 大数据综合分析用户得到的标签:即用户画像
* @return mixed|null
*/
function getPersonaTags()
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getPersonaTags(APPID);
return $ret;
}
/**
* 通过标签获取用户总数
* @param array $tagList 标签列表 $tagList = array("English", "龙卷风");
* @return mixed|null
* @throws Exception
*/
function getUserCountByTags($tagList)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getUserCountByTags(APPID, $tagList);
return $ret;
}
/**
* 定时任务查询接口 已提交的定时任务的相关信息。
* @param string $taskid 任务ID
* @return mixed|null
*/
function getScheduleTask($taskid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getScheduleTask($taskid, APPID);
return $ret;
}
/**
* 定时任务删除接口 距离下发还有一分钟的任务 将无法删除 也即 停止任务下发
* @param string $taskid 任务ID
* @return mixed|null
*/
function delScheduleTask($taskid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->delScheduleTask($taskid, APPID);
return $ret;
}
/**
* 通过分组名称获取推送结果
* @return mixed|null
*/
function getPushResultByGroupName($groupName = 'toAppPush')
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getPushResultByGroupName(APPID,$groupName);
return $ret;
}
/**
* 获取24小时在线用户数
* @return array $ret
*/
function getLast24HoursOnlineUserStatistics()
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getLast24HoursOnlineUserStatistics(APPID);
return $ret;
}
/**
* 将用户从黑名单移除
* @param array $cidList 需要移除黑名单的cid列表
* @return mixed|null
*/
function restoreCidListFromBlk($cidList)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->restoreCidListFromBlk(APPID, $cidList);
return $ret;
}
/**
* 添加用户到黑名单
* @param array $cidList 需要加入黑名单的cid列表
* @return mixed|null
*/
function addCidListToBlk($cidList)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->addCidListToBlk(APPID, $cidList);
return $ret;
}
/**
* 提示数量徽章设置 根据 clientid 设置 Badge
* @param array $cidList cid列表
* @param string $badeg 用户应用icon上显示的数字 在原有badge上+N;2.在原有badge上-N;3.直接设置badge(数字,会覆盖原有的badge值)
* @return mixed|null
*/
function setBadgeForCID($cidList,$badeg = '+1')
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->setBadgeForCID($badeg,APPID,$cidList);
return $ret;
}
/**
* 根据 deviceToken 设置 Badge
* @param array dtList iOS用户DeviceToken列表
* @param string $badeg 用户应用icon上显示的数字 在原有badge上+N;2.在原有badge上-N;3.直接设置badge(数字,会覆盖原有的badge值)
* @return mixed|null
*/
function setBadgeForDeviceToken($dtList,$badeg = '+1')
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->setBadgeForDeviceToken($badeg, APPID, $dtList);
return $ret;
}
/**
* 把用户手机号和cid绑定关系
* @param array $prams key是cid value是手机号 ['f7e0ef389ac6133c88aedbd66b44a4e1'=>'183836666666'] 一次最多支持50个
* @return mixed|null|array
*/
function bindCidPn($prams=[])
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
foreach ($prams as &$val){
$val = md5($val);
}
$ret = $igt->bindCidPn(APPID, $prams);
return $ret;
}
/**
* cid与pn解绑接口
* @param array $cids cid列表
* @return array
*/
function unbindCidPn($cids)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->unbindCidPn(APPID, $cids);
return $ret;
}
/**
* cid与pn解绑接口
* @param array $cidList cid列表
* @return mixed|null
*/
function queryCidPn($cidList)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->queryCidPn(APPID, $cidList);
return $ret;
}
/**
* 停止发送短信
* @param string $taskId 任务id
* @return mixed|null
*/
function stopSendSms($taskId = '')
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->stopSendSms(APPID, $taskId);
return $ret;
}
/**
* 获取推送结果
* @param string $taskId 任务id
* @return mixed|string “{“taskId”:”OSA-0820_uQ7gevLuGS7Odz8FS2ZSB9”,”result”:”ok”,”msgTotal”:59,”msgProcess”:0}”
*/
function getPushMessageResult($taskId='')
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getPushResult($taskId);
return $ret;
}
/**
* 获取某个应用单日的用户数据(用户数据包括:新增用户数,累计注册用户总数,在线峰值,日联网用户数)(目前只支持查询1天前的数据)
* @param string $date 日期 "20140807"
* @return mixed|null
* @throws Exception
*/
function queryAppUserDataByDate($date){
// putenv("gexin_default_domainurl=http://183.129.161.174:8006/apiex.htm"); //设置系统变量
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->queryAppUserDataByDate(APPID,$date);
return $ret;
}
/**
* 获取某个应用单日的推送数据(推送数据包括:发送总数,在线发送数,接收数,展示数,点击数)(目前只支持查询1天前的数据)
* @param string $date 日期 "20140807"
* @return mixed|null
* @throws Exception
*/
function queryAppPushDataByDate($date){
// putenv("gexin_default_domainurl=http://183.129.161.174:8006/apiex.htm"); //设置系统变量
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->queryAppPushDataByDate(APPID, "20180724");
return $ret;
}
/**
* 获取用户状态查询
* @param $cid
* @return mixed|null
*/
function getUserStatus($cid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$ret = $igt->getClientIdStatus(APPID,$cid);
return $ret;
}
/**
* 推送任务停止
* @param string $taskId 任务id
* @return bool
*/
function stoptask($taskId)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$rep = $igt->stop($taskId);
return $rep;
}
/**
* 通过服务端设置ClientId的标签
* @param string $cid ClientId
* @param array $tagList 标签列表属性 array('中文','English')
* @return mixed|null
*/
function setTag($cid,$tagList)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$rep = $igt->setClientTag(APPID,$cid, $tagList);
return $rep;
}
/**
* 获取指定用户的tag属性
* @param string $cid
* @return mixed|null
*/
function getUserTags($cid)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$rep = $igt->getUserTags(APPID, $cid);
return $rep;
}
/**
* 对单个用户推送消息
* @param string $cid 用户端cid
* @param object $template 消息模版 TransmissionTemplate:透传功能模板,LinkTemplate:通知打开链接功能模板, NotificationTemplate:通知透传功能模板,NotyPopLoadTemplate:通知弹框下载功能模板
* @param string $alias 用户端别名 和cid 不能同时为空
* @param string $pushTime 指定时间推送 不指定时间可为空
* @param bool $Offline 是否离线 true 离线推送 fales 只推在线用户
* @param int $offlineTime 过多久该消息离线失效(单位毫秒)支持1-72小时*3600000秒,默认1小时
* @param int $PushNetWorkType 客服端联网方式 0:联网方式不限; 1:仅wifi; 2:仅4G/3G/2G
* @return array
*/
function pushMessageToSingle($template,$cid,$alias = '',$pushTime='',$Offline = true,$offlineTime = 3600000,$PushNetWorkType = 0)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
//个推信息体 定义"SingleMessage"
$message = new \IGtSingleMessage();
$message->set_isOffline($Offline); //是否离线
$message->set_offlineExpireTime($offlineTime); //离线时间
$message->set_data($template); //设置推送消息模板类型
$message->set_PushNetWorkType($PushNetWorkType); //设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
if($pushTime){
$message->setPushTime($pushTime); //定时推送 201807311050 在用户设定的时间点进行推送,格式为年月日时分
}
//接收方
$target = new \IGtTarget();
$target->set_appId(APPID); //设置APPID
$target->set_clientId($cid); //设置要推送的用户的cid或别名
if(empty($cid) && !empty($alias)){
$target->set_alias($alias); //设置要推送的用户的cid或别名
}
try {
$rep = $igt->pushMessageToSingle($message, $target);
return $rep;
} catch (\RequestException $e) {
//失败时重发
$requstId = $e->getRequestId();
$rep = $igt->pushMessageToSingle($message, $target, $requstId);
return $rep;
}
}
/**
* 批量单推
* @param object $template 需要推送的类型 TransmissionTemplate:透传功能模板;LinkTemplate:通知打开链接功能模板;NotificationTemplate:通知透传功能模板;NotyPopLoadTemplate:通知弹框下载功能模板
* @param array $pushArray 要推送的用户组 [['cid/alias'=>cid/alias],['cid/alias'=>cid/alias],....]
* @param string $pushTime 指定时间推送 不指定时间可为空
* @param bool $isOffline 是否离线
* @param int $offlineExpireTime 离线时间单位毫秒
* @param int $WorkType 设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
* @return mixed
* @throws Exception
*/
function pushMessageToSingleBatch($template,$pushArray,$pushTime='',$isOffline = true,$offlineExpireTime=3600000,$WorkType=0){
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
$batch = new \IGtBatch(APPKEY, $igt);
$batch->setApiUrl(HOST);
// $igt->connect();
//个推信息体
$messageLink = new \IGtSingleMessage();
$messageLink->set_isOffline($isOffline); //是否离线
$messageLink->set_offlineExpireTime($offlineExpireTime); //离线时间
$messageLink->set_data($template); //设置推送消息模板类型
$messageLink->set_PushNetWorkType($WorkType); //设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
if($pushTime){
$messageLink->setPushTime($pushTime); //定时推送 201807311050 在用户设定的时间点进行推送,格式为年月日时分
}
//接收方
$targetLink = new \IGtTarget();
$targetLink->set_appId(APPID); //设置APPID
foreach ($pushArray as $avl){ //设置要推送的用户的cid或别名 ['cid/alias'=>cid/alias]
if(isset($avl['cid'])){
$targetLink->set_clientId($avl['cid']);
}elseif (isset($avl['alias'])){
$targetLink->set_alias($avl['alias']);
}
$batch->add($messageLink, $targetLink); //添加推送
}
try {
$rep = $batch->submit();
return $rep;
}catch(Exception $e){
//如果失败,重新推送
$rep = $batch->retry();
return $rep;
}
}
/**
* 多推接口
* @param object $template 需要推送的类型 TransmissionTemplate:透传功能模板;LinkTemplate:通知打开链接功能模板;NotificationTemplate:通知透传功能模板;NotyPopLoadTemplate:通知弹框下载功能模板
* @param array $pushArray 要推送的用户组
* @param string $pushTime 指定时间推送 不指定时间可为空
* @param bool $isOffline 是否离线
* @param int $offlineExpireTime 离线时间单位毫秒
* @param int $WorkType 设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
* @return array
* @throws Exception
*/
function pushMessageToList($template,$pushArray,$pushTime='',$isOffline=true,$offlineExpireTime=3600000,$WorkType=0){
putenv("gexin_pushList_needDetails=true");
$igt = new \IGeTui(HOST,APPKEY,MASTERSECRET);
//$igt = new IGeTui('',APPKEY,MASTERSECRET); //此方式可通过获取服务端地址列表判断最快域名后进行消息推送,每10分钟检查一次最快域名
//定义"ListMessage"信息体
$message = new \IGtListMessage();
$message->set_isOffline($isOffline); //是否离线
$message->set_offlineExpireTime($offlineExpireTime); //离线时间
$message->set_data($template); //设置推送消息类型
$message->set_PushNetWorkType($WorkType); //设置是否根据WIFI推送消息,1为wifi推送,0为不限制推送
if($pushTime){
$message->setPushTime($pushTime); //定时推送 201807311050 在用户设定的时间点进行推送,格式为年月日时分
}
$contentId = $igt->getContentId($message);
//接收方
$targetList = [];
$target = new \IGtTarget();
$target->set_appId(APPID); //设置APPID
foreach ($pushArray as $avl){ //设置要推送的用户的cid或别名 ['cid/alias'=>cid/alias]
if(isset($avl['cid'])){
$target->set_clientId($avl['cid']);
}elseif (isset($avl['alias'])){
$target->set_alias($avl['alias']);
}
$targetList[] = $target;
}
$rep = $igt->pushMessageToList($contentId, $targetList);
return $rep;
}
/**
* 群推接口案例
* @param object $template 需要推送的类型 TransmissionTemplate:透传功能模板;LinkTemplate:通知打开链接功能模板;NotificationTemplate:通知透传功能模板;NotyPopLoadTemplate:通知弹框下载功能模板
* @param array $appIdList 设置要推送的APPID列表 [APPID1,APPID2]
* @param array $phoneTypeList 设置需要推送的手机系统类型 ["ANDROID", "IOS"]
* @param array $provinceList 设置需要推送省份 ["浙江", "上海","北京"] 推介使用城市编码代替【"33010000","51010000"】
* @param array $tagList 自定义的标签列表 ['开心','快乐']
* @param string $pushTime 指定时间推送 不指定时间可为空
* @param bool $isOffline 是否离线
* @param int $offlineExpireTime 离线时间单位为毫秒,例,两个小时离线为3600*1000*2
* @return mixed|null
*/
function pushMessageToApp($template,$appIdList=[APPID],$phoneTypeList=['ANDROID'],$provinceList=['浙江'],$tagList=[],$pushTime='',$isOffline=true,$offlineExpireTime=3600000){
$igt = new \IGeTui(HOST,APPKEY,MASTERSECRET);
//个推信息体
$message = new \IGtAppMessage();
$message->set_isOffline($isOffline); //是否离线
$message->set_offlineExpireTime($offlineExpireTime); //离线时间单位为毫秒,例,两个小时离线为3600*1000*2
$message->set_data($template); //设置推送消息类型
if($pushTime){
$message->setPushTime($pushTime); //定时推送 201807311050 在用户设定的时间点进行推送,格式为年月日时分
}
//设置筛选信息
$cdt = new \AppConditions();
$cdt->addCondition(\AppConditions::PHONE_TYPE, $phoneTypeList); //设置需要推送的手机系统类型 ["ANDROID", "IOS"]
$cdt->addCondition(\AppConditions::REGION, $provinceList); //设置需要推送省份 ["浙江", "上海","北京"]
$cdt->addCondition(\AppConditions::TAG, $tagList); //自定义的标签列表
$message->set_appIdList($appIdList); //设置要推送的APPID列表
$message->set_conditions($cdt);
$rep = $igt->pushMessageToApp($message);
return $rep;
}
/**
* 标签推送接口
* @param object $template 需要推送的类型 TransmissionTemplate:透传功能模板;LinkTemplate:通知打开链接功能模板;NotificationTemplate:通知透传功能模板;NotyPopLoadTemplate:通知弹框下载功能模板
* @param string $tag 设置要推送的标签 '男性'
* @param array $appIdList 设置要推送的APPID列表
* @param bool $isOffline 是否离线
* @param int $offlineExpireTime 离线时间单位为毫秒,例,两个小时离线为3600*1000*2
* @return mixed|null
*/
function pushMessageByTag($template,$tag,$appIdList = array(APPID),$pushTime='',$isOffline=true,$offlineExpireTime=3600000)
{
$igt = new \IGeTui(HOST, APPKEY, MASTERSECRET);
//个推信息体
$message = new \IGtTagMessage();
$message->set_isOffline($isOffline); //是否离线
$message->set_offlineExpireTime($offlineExpireTime); //离线时间单位为毫秒,例,两个小时离线为3600*1000*2
$message->set_data($template); //设置推送消息类型
$message->set_tag($tag); //设置要推送的标签
$message->set_appIdList($appIdList); //设置要推送的APPID列表
if($pushTime){
$message->setPushTime($pushTime); //定时推送 201807311050 在用户设定的时间点进行推送,格式为年月日时分
}
$rep = $igt->pushTagMessage($message);
return $rep;
}
/**
* 点击通知打开应用 在通知栏显示一条含图标、标题等的通知,用户点击后激活您的应用
* @param string $count 透传内容 2048中/英字符
* @param string $title 通知标题 40中/英字符
* @param string $text 通知内容 600中/英字符
* @param string $logo 通知的图标,包含后缀名(需要在客户端开发时嵌入),如“push.png” 40中/英字符
* @param string $logourl 通知的图标url地址 100中/英字符 与 logo 可以二选一
* @param int $transmissionType 收到消息是否立即启动应用:1为立即启动,2则广播等待客户端自启动
* @param object|null $smsMessage 如果需要在未发送成功时补发短信 就设置短信配置信息 SmsTemplate()
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @param bool $isRing 收到通知是否响铃:true响铃,false不响铃
* @param bool $isVibrate 收到通知是否振动:true振动,false不振动
* @param bool $isClearable 通知是否可清除:true可清除,false不可清除
* @param int $style 通知栏消息布局样式(0 系统样式 1 个推样式) 默认为0
* @return IGtNotificationTemplate
* @throws Exception
*/
function IGtNotificationTemplateFun($count,$title,$text,$logo = '',$logourl = '',$transmissionType = 1,$smsMessage=null,$begdatetime='',$enddatetime='',$isRing=true,$isVibrate=true,$isClearable=true,$style=0){
$template = new \IGtNotificationTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
$template->set_transmissionType($transmissionType); //透传消息类型
$template->set_transmissionContent($count); //透传内容
$template->set_title($title); //通知栏标题
$template->set_text($text); //通知栏内容
$template->set_logo($logo); //通知栏logo
$template->set_logoURL($logourl); //通知栏logo链接
$template->set_isRing($isRing); //是否响铃
$template->set_isVibrate($isVibrate); //是否震动
$template->set_isClearable($isClearable); //通知栏是否可清除
$template->set_notifyStyle($style); //通知栏消息布局样式(0 系统样式 1 个推样式) 默认为0
if($begdatetime && $enddatetime){
$template->set_duration($begdatetime,$enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
if($smsMessage){
$template->setSmsInfo($smsMessage); //如果需要在未发送成功时补发短信 就设置短信配置信息
}
return $template;
}
/**
* 点击通知打开网页模板 在通知栏显示一条含图标、标题等的通知,用户点击后可打开您指定的网页
* @param string $title 40中/英字符 通知标题
* @param string $text 600中/英字符 通知栏内容
* @param string $url 200中/英字符 点击通知后打开的网页地址
* @param string $logo 通知的图标,包含后缀名(需要在客户端开发时嵌入),如“push.png” 40中/英字符
* @param string $logourl 通知的图标url地址 100中/英字符 与 logo 可以二选一
* @param bool $isRing 收到通知是否响铃:true响铃,false不响铃
* @param bool $isVibrate 收到通知是否振动:true振动,false不振动
* @param bool $isClearable 通知是否可清除:true可清除,false不可清除
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @param int $style 通知栏消息布局样式(0 系统样式 1 个推样式) 默认为0
* @param object|null $smsMessage 如果需要在未发送成功时补发短信 就设置短信配置信息 SmsTemplate()
* @return IGtLinkTemplate
* @throws Exception
*/
function IGtLinkTemplateFun($title,$text,$url,$logo='',$logourl='',$smsMessage=null,$isRing=true,$isVibrate=true,$isClearable=true,$begdatetime='',$enddatetime='',$style=0)
{
$template = new \IGtLinkTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
$template->set_title($title); //通知栏标题
$template->set_text($text); //通知栏内容
$template->set_logo($logo); //通知栏logo
$template->set_logoURL($logourl); //通知栏logo链接
$template->set_isRing($isRing); //是否响铃
$template->set_isVibrate($isVibrate); //是否震动
$template->set_isClearable($isClearable); //通知栏是否可清除
$template->set_url($url); //打开连接地址
$template->set_notifyStyle($style); //通知栏消息布局样式(0 系统样式 1 个推样式) 默认为0
if($begdatetime && $enddatetime){
$template->set_duration($begdatetime,$enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
if($smsMessage){
$template->setSmsInfo($smsMessage); //如果需要在未发送成功时补发短信 就设置短信配置信息
}
return $template;
}
/**
* 点击通知弹框下载模板
* @param string $title 40中/英字符 通知栏标题 本地或URL 与客服端开发对接(需要在客户端开发时嵌入)
* @param string $text 600中/英字符 通知栏内容
* @param string $popTitle 40中/英字符 弹出框标题
* @param string $popContent 600中/英字符 弹出框内容
* @param string $popImage 200中/英字符 弹出框图标 可以是URL或本地
* @param string $loadTitle 40中/英字符 下载标题
* @param string $loadIcon 40中/英字符 是 下载图标(本地的则需要加file://网络图标则直接输入网络url地址)
* @param string $loadUrl 200中/英字符 下载地址
* @param string $logo 40中/英字符 通知栏图标
* @param object|null $smsMessage 如果需要在未发送成功时补发短信 就设置短信配置信息 SmsTemplate()
* @param array $but 4中/英字符 弹出框左/右边按钮名称 $but=['left'=>'下载','reght'=>'取消']
* @param bool $isAutoInstall 是否自动安装(默认否)
* @param bool $isActived 安装完成后是否自动启动应用程序(默认否)
* @param bool $isRing 收到通知是否响铃:true响铃,false不响铃
* @param bool $isVibrate 收到通知是否振动:true振动,false不振动
* @param bool $isClearable 通知是否可清除:true可清除,false不可清除
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @param int $style 通知栏消息布局样式(0 系统样式 1 个推样式) 默认为0
* @return IGtNotyPopLoadTemplate
* @throws Exception
*/
function IGtNotyPopLoadTemplateFun($title,$text,$popTitle,$popContent,$popImage,$loadTitle,$loadIcon,$loadUrl,$logo='',$smsMessage=null,$but=['left'=>'下载','reght'=>'取消'],$isAutoInstall=false,$isActived=true,$isRing=true,$isVibrate=true,$isClearable=true,$begdatetime='',$enddatetime='',$style=0)
{
$template = new \IGtNotyPopLoadTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
//通知栏
$template->set_notyTitle($title); //通知栏标题
$template->set_notyContent($text); //通知栏内容
$template->set_notyIcon($logo); //通知栏logo
$template->set_isBelled($isRing); //是否响铃
$template->set_isVibrationed($isVibrate); //是否震动
$template->set_isCleared($isClearable); //通知栏是否可清除
//弹框
$template ->set_popTitle($popTitle); //弹框标题
$template ->set_popContent($popContent); //弹框内容
$template ->set_popImage($popImage); //弹框图片
$template ->set_popButton1($but['left']); //左键
$template ->set_popButton2($but['reght']); //右键
//下载
$template ->set_loadIcon($loadIcon); //下载图标
$template ->set_loadTitle($loadTitle); //下载标题
$template ->set_loadUrl($loadUrl); //下载地址
$template ->set_isAutoInstall($isAutoInstall); //是否走动安装
$template ->set_isActived($isActived); //是否自动启动
$template->set_notifyStyle($style); //通知栏消息布局样式(0 系统样式 1 个推样式) 默认为0
if($begdatetime && $enddatetime){
$template->set_duration($begdatetime,$enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
if($smsMessage){
$template->setSmsInfo($smsMessage); //如果需要在未发送成功时补发短信 就设置短信配置信息
}
return $template;
}
/**
* 普通透传(payload)数据经SDK传给您的客户端,由您写代码决定如何处理展现给用户
* @param string $count 2048中/英字符 透传内容,不支持转义字符
* @param int $transmissionType 收到消息是否立即启动应用,1为立即启动,2则广播等待客户端自启动
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @param object|null $smsMessage 如果需要在未发送成功时补发短信 就设置短信配置信息 SmsTemplate()
* @return IGtTransmissionTemplate
* @throws Exception
*/
function IGtTransmissionTemplateFun($count,$transmissionType = 1,$smsMessage=null,$begdatetime='',$enddatetime='')
{
$template = new \IGtTransmissionTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
$template->set_transmissionType($transmissionType); //透传消息类型
$template->set_transmissionContent($count); //透传内容
if($begdatetime && $enddatetime){
$template->set_duration($begdatetime,$enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
if($smsMessage){
$template->setSmsInfo($smsMessage); //如果需要在未发送成功时补发短信 就设置短信配置信息
}
return $template;
}
/**
* 设置短信补量的短信信息设置
* @param string $SmsTemplateId 短信模板id
* @param int $Offlinetime 离线多久补发短信 单位毫秒
* @param array $smsContent 短信内容 为短信模板中的变量内容 示例:$smsContent['name'] = '张三';
* @param bool $IsApplink 是否在短信中打开app true 打开
* @param string $url 打开app链接 applink
* @param string $Payload 自定义内容
* @return SmsMessage
*/
function SmsTemplate($SmsTemplateId='',$Offlinetime=1000,$smsContent=[],$IsApplink=false,$url='',$Payload=''){
//设置短信消息
$smsMessage = new \SmsMessage();
$smsMessage->setSmsTemplateId($SmsTemplateId); //短信模板ID 需要在个推报备开通 才可使用
$smsMessage->setOfflineSendtime($Offlinetime); //多久后进行离线补发的时间
$smsMessage->smsContent($smsContent); //注意当使用AppLink时,smsContent不能传值url
$smsMessage->setIsApplink($IsApplink); //推送的短信模板中是否选用APPLink进行推送。
$smsMessage->setUrl($url); //推送的短信模板中的APPLink链接地址
$smsMessage->setPayload($Payload); //推送的短信模板中的APPLink自定义内容
return $smsMessage;
}
/**
* ios透传 APN简单推送模板
* @param string $count 2048中/英字符 透传内容,不支持转义字符
* @param string $alertmess 通知文本消息字符串
* @param string $sound 通知铃声文件名 文件名称 "test1.wav"
* @param string $category 在客户端通知栏触发特定的action和button显示 为此键提供表示通知类型的字符串值。此值对应于identifier您的某个应用注册类别的属性值
* @param string $customMsgKey 自定义增加数据的键名
* @param mixed|string $customMsgVal 自定义增加数据的键名
* @param int $badge 应用icon上显示的数字
* @param int $transmissionType 收到消息是否立即启动应用:1为立即启动,2则广播等待客户端自启动
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @return IGtTransmissionTemplate
* @throws Exception
*/
function IGtTransmissionTemplateiosapn($count,$alertmess,$category='NEW_MESSAGE_CATEGORY',$customMsgKey='key',$customMsgVal='',$badge=0,$sound='',$contentAvailable=1,$transmissionType = 1,$begdatetime='',$enddatetime='')
{
$template = new \IGtTransmissionTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
$template->set_transmissionType($transmissionType); //透传消息类型
$template->set_transmissionContent($count); //透传内容
if($begdatetime && $enddatetime){
$template->set_duration($begdatetime,$enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
$alertmsg = new \SimpleAlertMsg();
$alertmsg->alertMsg = $alertmess; //通知文本消息字符串
$apn = new \IGtAPNPayload();
$apn->alertMsg = $alertmsg;
$apn->badge = $badge; //应用icon上显示的数字 如果希望系统修改应用程序图标的徽章,请包含此字段。如果此字段未设置,则不会更改徽章。要删除徽章,请将此键的值设置为0。
$apn->sound = $sound; //通知铃声文件名 希望系统播放声音时设置此键。此键的值是应用程序主包中或Library/Sounds应用程序数据容器文件夹中声音文件的名称。如果找不到声音文件,或者您指定default了该值,系统将播放默认通知声音
$apn->add_customMsg($customMsgKey,$customMsgVal); //增加自定义的数据 第一个参数是自定义增加参数的key,第二个参数是自定义参数的值
$apn->contentAvailable = $contentAvailable; //推送直接带有透传数据 int 大于0的数字,意思是该推送直接带有透传数据 如果不带透传数据可以为0
$apn->category = $category; //在客户端通知栏触发特定的action和button显示 为此键提供表示通知类型的字符串值。此值对应于identifier您的某个应用注册类别的属性值
$template->set_apnInfo($apn);
return $template;
}
/**
* IOS语音推送模板 voip推送
* @param string $count 2048中/英字符 透传内容,不支持转义字符
* @param string $payload VoIP内容
* @param int $transmissionType 收到消息是否立即启动应用:1为立即启动,2则广播等待客户端自启动
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @return IGtTransmissionTemplate
* @throws Exception
*/
function IGtTransmissionTemplateiosvoip($count, $payload, $transmissionType = 1, $begdatetime = '', $enddatetime = '')
{
$template = new \IGtTransmissionTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
$template->set_transmissionType($transmissionType); //透传消息类型
$template->set_transmissionContent($count); //透传内容
if ($begdatetime && $enddatetime) {
$template->set_duration($begdatetime, $enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
//VOIP推送
$voip = new VOIPPayload();
$voip->setVoIPPayload($payload); //VoIP内容
$template->set_apnInfo($voip);
return $template;
}
/**
* ios高级推送模板
* @param string $count 透传内容 2048中/英字符
* @param int $badeg 应用icon上显示的数字
* @param string $sound 通知铃声文件名 铃声文件名称
* @param array $setapnbody apn 主体信息设置 必须以此格式 $setapnbody = ['body'=>'','locKey'=>'','locArgs'=>[],'actionLocKey'=>'','launchImage'=>'']
* @param array $media 多媒体消息设置 必须以此格式 $media= ['url'=>'','onlywifi'=false,'type'=>'pic'];
* @param array $setapntitle 设置通知标题 必须以此格式 $setapntitle = ['title'=>'','titleLocKey'=>'','titleLocArg'=>[],'subtitle'=>'','subtitleLocKey'=>'',subtitleLocArgs=[]]
* @param string $category 在客户端通知栏触发特定的action和button显示
* @param int $voicePlayType 设置语音播报类型,int类型,0.不可用 1.播放body 2.播放自定义文本
* @param string $voicePlayMessage 设置语音播报自定义内容 如果设置为自定义文本选项
* @param array $customMsg 自定义增加数据,$customMsg=['key',''] 长度2,$customMsg[0] 键名称 $customMsg[1]值
* @param int $contentAvailable 推送直接带有透传数据 int 大于0的数字,意思是该推送直接带有透传数据 如果不带透传数据可以为0
* @param int $transmissionType 收到消息是否立即启动应用,1为立即启动,2则广播等待客户端自启动
* @param string $begdatetime 消息展示开始时间(格式yyyy-MM-dd HH:mm:ss)
* @param string $enddatetime 消息展示结束时间(格式yyyy-MM-dd HH:mm:ss)
* @return IGtTransmissionTemplate
* @throws Exception
*/
function IGtTransmissionTemplateios($count,$setapnbody = [],$badeg=0,$sound='',$media = [],$setapntitle=[],$category='',$voicePlayType=0,$voicePlayMessage='',$customMsg=['key',''],$contentAvailable=1,$transmissionType = 1,$begdatetime='',$enddatetime='')
{
$template = new \IGtTransmissionTemplate();
$template->set_appId(APPID); //应用appid
$template->set_appkey(APPKEY); //应用appkey
$template->set_transmissionType($transmissionType); //透传消息类型
$template->set_transmissionContent($count); //透传内容
if($begdatetime && $enddatetime){
$template->set_duration($begdatetime,$enddatetime); //设置ANDROID客户端在此时间区间内展示消息
}
//设置apn主体 $setapnbody = ['body'=>'','locKey'=>'','locArgs'=>[],'actionLocKey'=>'','launchImage'=>'']
$alertmsg = new \DictionaryAlertMsg();
$alertmsg->body = $setapnbody['body']; //通知文本消息字符串
$alertmsg->locKey = $setapnbody['locKey']; //(用于多语言支持)指定Localizable.strings文件中相应的key 用于当前本地化的文件中的通知消息字符串的键(由用户的语言首选项设置)。可以使用n%@和说明符格式化键字符串,以获取数组中指定的变量 GAME_PLAY_REQUEST_FORMAT
if(isset($setapnbody['locArgs']) && !empty($setapnbody['locArgs'])){
$alertmsg->locArgs = $setapnbody['locArgs']; //如果loc-key中使用的占位符,则在loc-args中指定各参数。
}
if(isset($setapnbody['actionLocKey']) && !empty($setapnbody['actionLocKey'])){
$alertmsg->actionLocKey = $setapnbody['actionLocKey'];//系统将显示包含“关闭”和“查看”按钮的警报。该字符串用作在当前本地化中获取本地化字符串的键,用于右键的标题而不是“视图”。 PLAY
}
if(isset($setapnbody['launchImage']) && !empty($setapnbody['launchImage'])) {
$alertmsg->launchImage = $setapnbody['launchImage']; //指定启动界面图片名 应用程序包中的图像文件的文件名,包含或不包含文件扩展名。当用户点击操作按钮或移动动作滑块时,图像将用作启动图像。如果未指定此属性,系统将使用上一个快照,使用UILaunchImageFile应用程序Info.plist文件中的键标识的图像,或者回退到Default.png。
}
//通知标题和设置 仅IOS8.2以上支持 $setapntitle = ['title'=>'','titleLocKey'=>'','titleLocArg'=>[],'subtitle'=>'','subtitleLocKey'=>'',subtitleLocArgs=[]]
if(isset($setapntitle['title']) && !empty($setapntitle['title'])) {
$alertmsg->title = $setapntitle['title']; //通知标题 描述通知目的的短字符串
}
if(isset($setapntitle['titleLocKey']) && !empty($setapntitle['titleLocKey'])) {
$alertmsg->titleLocKey = $setapntitle['titleLocKey']; //(用于多语言支持)对于标题指定执行按钮所使用的Localizable.strings 当前本地化文件中 标题字符串的关键。可以使用n%@和说明符格式化键字符串,以获取数组中指定的变量
}
if(isset($setapntitle['titleLocArg']) && !empty($setapntitle['titleLocArg'])) {
$alertmsg->titleLocArgs = $setapntitle['titleLocArg']; //对于标题, 如果ltitleLocKey中使用的占位符,则在titleLocArg中指定各参数
}
if(isset($setapntitle['subtitle']) && !empty($setapntitle['subtitle'])) {
$alertmsg->subtitle = $setapntitle['subtitle']; //设置子标题
}
if(isset($setapntitle['subtitleLocKey']) && !empty($setapntitle['subtitleLocKey'])) {
$alertmsg->subtitleLocKey = $setapntitle['subtitleLocKey']; //对于子标题指定执行按钮所使用的Localizable.strings 当前本地化文件中 标题字符串的关键。可以使用n%@和说明符格式化键字符串,以获取数组中指定的变量
}
if(isset($setapntitle['subtitleLocArgs']) && !empty($setapntitle['subtitleLocArgs'])) {
$alertmsg->subtitleLocArgs = $setapntitle['subtitleLocArgs']; //对于子标题, 如果subtitleLocKey中使用的占位符,则在subtitleLocKey中指定各参数
}
$apn = new \IGtAPNPayload();
$apn->alertMsg = $alertmsg;
$apn->badge = $badeg; //应用icon上显示的数字 如果希望系统修改应用程序图标的徽章,请包含此字段。如果此字段未设置,则不会更改徽章。要删除徽章,请将此键的值设置为0。
$apn->sound = $sound; //通知铃声文件名 希望系统播放声音时设置此值。此键的值是应用程序主包中或Library/Sounds应用程序数据容器文件夹中声音文件的名称。如果找不到声音文件,或者您指定default了该值,系统将播放默认通知声音
$apn->add_customMsg($customMsg[0],$customMsg[1]); //增加自定义的数据 第一个参数是自定义增加参数的key,第二个参数是自定义参数的值
$apn->voicePlayType = $voicePlayType; //设置语音播报类型,int类型,0.不可用 1.播放body 2.播放自定义文本
if($voicePlayType == 2){
$apn->voicePlayMessage = $voicePlayMessage; //设置语音播报内容,String类型,非必须参数,用户自定义播放内容,仅在voicePlayMessage=2时生效 注:当"定义类型"=2, "定义内容"为空时则忽略不播放
}
$apn->contentAvailable = $contentAvailable; //推送直接带有透传数据 int 大于0的数字,意思是该推送直接带有透传数据 如果不带透传数据可以为0
$apn->category = $category; //在客户端通知栏触发特定的action和button显示 为此键提供表示通知类型的字符串值。此值对应于identifier您的某个应用注册类别的属性值
// IOS多媒体消息处理设置 $media= ['url'=>'','onlywifi'=false,'type'=>'pic'];
if(!empty($media)) {
$media = new \IGtMultiMedia();
$media->set_url($media['url']); //设置资源url
if(!isset($media['onlywifi']) || empty($media['onlywifi'])){
$media['onlywifi'] = false;
}
$media->set_onlywifi($media['onlywifi']); //设置是否在WIFI下才展示多媒体消息,如果设置true但未使用WIFI时会展示成普通通知
switch ($media['type']){
case 'pic':
$media['type'] = 1;
break;
case 'audio':
$media['type'] = 2;
break;
case 'video':
$media['type'] = 3;
break;
}
$media->set_type($media['type']); //设置资源类型 pic 图片,audio 音频,video 视频
$medias = array();
$medias[] = $media;
$apn->set_multiMedias($medias);
}
$template->set_apnInfo($apn);
return $template;
}
/**
* 第三方带通知推送模板
* @param $title
* @param $count
* @param $payload
* @param $intent
* @param $url
* @return IGtTransmissionTemplate
* @throws Exception
*/
function IGtNotifyTemplate($title,$count,$payload,$intent,$url){
//第三方厂商推送透传消息带通知处理
$notify = new \IGtNotify();
$notify -> set_title($title); //通知标题
$notify -> set_content($count); //通知内容
$notify -> set_type(\NotifyInfo_Type::_url); //设置透传的类型 0 有效负载;1 意图; 2 打开链接;
$notify -> set_payload($payload); //透传内容
$notify -> set_intent($intent); //目的内容
$notify -> set_url($url); //要打开的链接
$template = new \IGtTransmissionTemplate();
$template -> set3rdNotifyInfo($notify);
return $template;
}
整理不易,整理作者:寻梦(e-mail:feiyudewo@126.com)
任何转载会引用请注明出处!
链接: 个推官方链接.