消息推送方式

消息推送方式

此SDK已停止维护,请开发者对接 RestApi V2

1. 对单个用户推送消息

1.1 接口说明

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

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

pushMessageToSingle(message, target, requestId)

1.2 pushMessageToSingle代码实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

namespace GetuiServerApiSDKDemo
{
    public class demo
    {

        //采用"C# SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可自行替换
        private static String APPID = "";     
        private static String APPKEY = "";                         
        private static String MASTERSECRET = "";              
        //您获取的clientID
        private static String CLIENTID = "";    
        //别名推送方式
        //private static String ALIAS = "";
        //HOST:OpenService接口地址
        private static String HOST = "http://api.getui.com/apiex.htm";    

        static void Main(string[] args)
        {
            //toList接口每个用户状态返回是否开启,可选
            Console.OutputEncoding = Encoding.GetEncoding(936);
            Environment.SetEnvironmentVariable("needDetails", "true");


            PushMessageToSingle();
        }

        private static void PushMessageToSingle()
       {

           IGtPush push = new IGtPush(HOST,APPKEY, MASTERSECRET);

           //消息模版:NotificationTemplate:通知模板

           NotificationTemplate template =  NotificationTemplateDemo();


           // 单推消息模型
           SingleMessage message = new SingleMessage();
           message.IsOffline = true;                         // 用户当前不在线时,是否离线存储,可选
           message.OfflineExpireTime = 1000 * 3600 * 12;            // 离线有效时间,单位为毫秒,可选
           message.Data = template;
           //判断是否客户端是否wifi环境下推送,2为4G/3G/2G,1为在WIFI环境下,0为不限制环境
           //message.PushNetWorkType = 1;  

           com.igetui.api.openservice.igetui.Target target = new com.igetui.api.openservice.igetui.Target();
           target.appId = APPID;
           target.clientId = CLIENTID;
           //target.alias = ALIAS;
           try
           {
               String pushResult = push.pushMessageToSingle(message, target);

               System.Console.WriteLine("-----------------------------------------------");
               System.Console.WriteLine("-----------------------------------------------");
               System.Console.WriteLine("----------------服务端返回结果:" + pushResult);
           }
           catch (RequestException e)
           {
               String requestId=e.RequestId;
               //发送失败后的重发
               String pushResult = push.pushMessageToSingle(message, target, requestId);
               System.Console.WriteLine("-----------------------------------------------");
               System.Console.WriteLine("-----------------------------------------------");
               System.Console.WriteLine("----------------服务端返回结果:" + pushResult);
           }
       }


       //通知透传模板动作内容
       public static NotificationTemplate NotificationTemplateDemo()
       {
           NotificationTemplate template = new NotificationTemplate();
           template.AppId = APPID;
           template.AppKey = APPKEY;
           //通知栏标题
           template.Title = "请填写通知标题";     
           //通知栏内容     
           template.Text = "请填写通知内容";          
           //通知栏显示本地图片
           template.Logo = "";               
           //通知栏显示网络图标
           template.LogoURL = "";                    
           //应用启动类型,1:强制应用启动  2:等待应用启动
           template.TransmissionType = 2;        
           //透传内容  
           template.TransmissionContent = "请填写透传内容";  
           //接收到消息是否响铃,true:响铃 false:不响铃   
           template.IsRing = true;        
           //接收到消息是否震动,true:震动 false:不震动   
           template.IsVibrate = true;         
           //接收到消息是否可清除,true:可清除 false:不可清除    
           template.IsClearable = true;

           return template;
       }
    }
}

1.3 返回值

字段 返回码
result 请查询返回值
客户端展示

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

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

2.1 接口说明

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

2.2 pushMessageToList代码实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

namespace GetuiServerApiSDKDemo
{
    public class demo
    {

        //采用"C# SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可自行替换
        private static String APPID = "";     
        private static String APPKEY = "";                         
        private static String MASTERSECRET = "";              
        //您获取的clientID
        private static String CLIENTID1 = "";  
        private static String CLIENTID2 = "";
        //别名推送方式
        //private static String ALIAS1 = "";  
        //private static String ALIAS2 = "";
        //HOST:OpenService接口地址
        private static String HOST = "http://api.getui.com/apiex.htm";    

        static void Main(string[] args)
        {
            //toList接口每个用户状态返回是否开启,可选
            Console.OutputEncoding = Encoding.GetEncoding(936);
            Environment.SetEnvironmentVariable("needDetails", "true");

            //2.PushMessageToList接口
            PushMessageToList();
        }

        //PushMessageToList接口测试代码
        private static void PushMessageToList()
        {
            // 推送主类(方式1,不可与方式2共存)
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            // 推送主类(方式2,不可与方式1共存)此方式可通过获取服务端地址列表判断最快域名后进行消息推送,每10分钟检查一次最快域名
            //IGtPush push = new IGtPush("",APPKEY,MASTERSECRET);
            ListMessage message = new ListMessage();

            NotificationTemplate template =  NotificationTemplateDemo();
            // 用户当前不在线时,是否离线存储,可选
            message.IsOffline = true;                        
            // 离线有效时间,单位为毫秒,可选
            message.OfflineExpireTime = 1000 * 3600 * 12;           
            message.Data = template;
            //message.PushNetWorkType = 0;        //判断是否客户端是否wifi环境下推送,1为在WIFI环境下,0为不限制网络环境。
            //设置接收者
            List<com.igetui.api.openservice.igetui.Target> targetList = new List<com.igetui.api.openservice.igetui.Target>();
            com.igetui.api.openservice.igetui.Target target1 = new com.igetui.api.openservice.igetui.Target();
            target1.appId = APPID;
            target1.clientId = CLIENTID1;
            //target1.alias = ALIAS1;

            // 如需要,可以设置多个接收者
            com.igetui.api.openservice.igetui.Target target2 = new com.igetui.api.openservice.igetui.Target();
            target2.appId = APPID;
            target2.clientId = CLIENTID2;
            //target2.alias = ALIAS2;

            targetList.Add(target1);
            targetList.Add(target2);

            String contentId = push.getContentId(message);
            String pushResult = push.pushMessageToList(contentId, targetList);
            System.Console.WriteLine("-----------------------------------------------");
            System.Console.WriteLine("服务端返回结果:" + pushResult);
        }


        //通知透传模板动作内容
        public static NotificationTemplate NotificationTemplateDemo()
        {
            NotificationTemplate template = new NotificationTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //通知栏标题
            template.Title = "请填写通知标题";     
            //通知栏内容     
            template.Text = "请填写通知内容";          
            //通知栏显示本地图片
            template.Logo = "";               
            //通知栏显示网络图标
            template.LogoURL = "";                    
            //应用启动类型,1:强制应用启动  2:等待应用启动
            template.TransmissionType = 2;        
            //透传内容  
            template.TransmissionContent = "请填写透传内容";  
            //接收到消息是否响铃,true:响铃 false:不响铃   
            template.IsRing = true;        
            //接收到消息是否震动,true:震动 false:不震动   
            template.IsVibrate = true;         
            //接收到消息是否可清除,true:可清除 false:不可清除    
            template.IsClearable = true;

            return template;
        }
    }
}

2.3 返回值

字段 返回码
result 请查询返回值
客户端展示

注:此接口有频次控制,申请修改请点击右侧“技术咨询”了解详情 。

3. 对指定应用群推送消息

3.1 接口说明

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

3.2 pushMessageToApp代码实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

namespace GetuiServerApiSDKDemo
{
    public class demo {

        //采用"C# SDK 快速入门", "第二步 获取访问凭证 "中获得的应用配置,用户可自行替换
        private static String APPID = "";   
        private static String APPKEY = "";  
        private static String MASTERSECRET = "";
         //您获取的clientID
        private static String CLIENTID = "";  
        //HOST:OpenService接口地址  
        private static String HOST = "http://api.getui.com/apiex.htm";    

        static void Main(string[] args){
            //3.pushMessageToApp接口
            pushMessageToApp();
        }
        //pushMessageToApp接口测试代码
        private static void pushMessageToApp(){
            // 推送主类(方式1,不可与方式2共存)
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            // 推送主类(方式2,不可与方式1共存)此方式可通过获取服务端地址列表判断最快域名后进行消息推送,每10分钟检查一次最快域名
            //IGtPush push = new IGtPush("",APPKEY,MASTERSECRET);

            AppMessage message = new AppMessage();

            // 设置群推接口的推送速度,单位为条/秒,仅对pushMessageToApp(对指定应用群推接口)有效
            // message.Speed = 100;

            NotificationTemplate template = NotificationTemplateDemo();

            // 用户当前不在线时,是否离线存储,可选
            message.IsOffline = true;            
            // 离线有效时间,单位为毫秒,可选  
            message.OfflineExpireTime = 1000 * 3600 * 12;            
            message.Data = template;
            //message.PushNetWorkType = 0;        //判断是否客户端是否wifi环境下推送,1为在WIFI环境下,0为不限制网络环境。
            List<String> appIdList = new List<string>();
            appIdList.Add(APPID);

             //通知接收者的手机操作系统类型
            List<String> phoneTypeList = new List<string>();   
                    phoneTypeList.Add("ANDROID");
                    phoneTypeList.Add("IOS");
             //通知接收者所在省份
            // List<String> provinceList = new List<string>();     
            //         provinceList.Add("浙江");
            //         provinceList.Add("上海");
            //         provinceList.Add("北京");

            // List<String> tagList = new List<string>();
            //         tagList.Add("开心");

            message.AppIdList = appIdList;
            message.PhoneTypeList = phoneTypeList;
            // message.ProvinceList = provinceList;
            // message.TagList = tagList;


            String pushResult = push.pushMessageToApp(message);
            System.Console.WriteLine("-----------------------------------------------");
            System.Console.WriteLine("服务端返回结果:" + pushResult);
        }
        //透传模板动作内容
        //通知透传模板动作内容
        public static NotificationTemplate NotificationTemplateDemo()
        {
            NotificationTemplate template = new NotificationTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //通知栏标题
            template.Title = "请填写通知标题";     
            //通知栏内容     
            template.Text = "请填写通知内容";          
            //通知栏显示本地图片
            template.Logo = "";               
            //通知栏显示网络图标
            template.LogoURL = "";                    
            //应用启动类型,1:强制应用启动  2:等待应用启动
            template.TransmissionType = 2;        
            //透传内容  
            template.TransmissionContent = "请填写透传内容";  
            //接收到消息是否响铃,true:响铃 false:不响铃   
            template.IsRing = true;        
            //接收到消息是否震动,true:震动 false:不震动   
            template.IsVibrate = true;         
            //接收到消息是否可清除,true:可清除 false:不可清除    
            template.IsClearable = true;

            return template;
        }
    }
}

3.3 返回值

字段 返回码
result 请查询返回值
客户端展示

注:此接口有频次控制,申请修改请点击右侧“技术咨询”了解详情 。

4. 任务组名推送

4.1 描述

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

4.2 应用场景

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

4.3 对应接口

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

4.3.1 Tolist接口代码实例

public void toListGroupName(string host, string appkey, string mastersecret, string taskGroupName, ListMessage msg)
{
    IGtPush push = new IGtPush(host, appkey, mastersecret);
    string contentId = push.getContentId(msg, taskGroupName);
}

4.3.2 Toapp接口代码实例

public void toAppGroupName(string host, string appkey, string mastersecret, string taskGroupName, AppMessage msg)
{
    IGtPush push = new IGtPush(host, appkey, mastersecret);
    push.pushMessageToApp(msg, taskGroupName);
}

5. 批量单推功能

5.1 描述

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

5.2应用场景

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

5.3 对应接口

函数说明:

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

参数说明:

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

注:此接口有批量个数有限制,alias不允许超过100个,cid不允许超过5000个。

推送返回值:

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

代码实例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

public static void singleBatchDemo()
{
    IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
    IBatch batch = new BatchImpl(APPKEY, push);
    //消息模版:NotificationTemplate
    NotificationTemplate template = NotificationTemplateDemo();

    // 单推消息模型
    SingleMessage messageTrans = new SingleMessage();
    messageTrans.IsOffline = true;                         // 用户当前不在线时,是否离线存储,可选
    messageTrans.OfflineExpireTime = 1000 * 3600 * 12;            // 离线有效时间,单位为毫秒,可选
    messageTrans.Data = template;
    //判断是否客户端是否wifi环境下推送,2为4G/3G/2G,1为在WIFI环境下,0为不限制环境
    //messageTrans.PushNetWorkType = 1;  

    com.igetui.api.openservice.igetui.Target targetTrans = new com.igetui.api.openservice.igetui.Target();
    targetTrans.appId = APPID;
    targetTrans.clientId = CLIENTID1;
    batch.add(messageTrans, targetTrans);

     NotificationTemplate templateNoti = NotificationTemplateDemo();

    // 单推消息模型
    SingleMessage messageNoti = new SingleMessage();
    messageNoti.IsOffline = true;                         // 用户当前不在线时,是否离线存储,可选
    messageNoti.OfflineExpireTime = 1000 * 3600 * 12;            // 离线有效时间,单位为毫秒,可选
    messageNoti.Data = templateNoti;
    //判断是否客户端是否wifi环境下推送,2为4G/3G/2G,1为在WIFI环境下,0为不限制环境
    //messageNoti.PushNetWorkType = 1;  

    com.igetui.api.openservice.igetui.Target targetNoti = new com.igetui.api.openservice.igetui.Target();
    targetNoti.appId = APPID;
    targetNoti.clientId = CLIENTID2;
    batch.add(messageNoti, targetNoti);
    try
    {
        batch.submit();
    } catch(Exception e)
    {
        batch.retry();
    }
}
//透传模板动作内容
public static TransmissionTemplate TransmissionTemplateDemo()
{
    TransmissionTemplate template = new TransmissionTemplate();
    template.AppId = APPID;
    template.AppKey = APPKEY;
    //应用启动类型,1:强制应用启动 2:等待应用启动
    template.TransmissionType = 2;
    //透传内容  
    template.TransmissionContent = "透传内容";

    return template;
}

 //通知透传模板动作内容
public static NotificationTemplate NotificationTemplateDemo()
{
    NotificationTemplate template = new NotificationTemplate();
    template.AppId = APPID;
    template.AppKey = APPKEY;
    //通知栏标题
    template.Title = "请填写通知标题";
    //通知栏内容     
    template.Text = "请填写通知内容";
    //通知栏显示本地图片
    template.Logo = "";
    //通知栏显示网络图标
    template.LogoURL = "";
    //应用启动类型,1:强制应用启动  2:等待应用启动
    template.TransmissionType = 2;
    //透传内容  
    template.TransmissionContent = "请填写透传内容";
    //接收到消息是否响铃,true:响铃 false:不响铃   
    template.IsRing = true;
    //接收到消息是否震动,true:震动 false:不震动   
    template.IsVibrate = true;
    //接收到消息是否可清除,true:可清除 false:不可清除    
    template.IsClearable = true;

    return template;
}

6. PushResult返回值查询

具体返回值请查询下表

正确返回 返回码 结果说明
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 未知错误,无法判定错误类型

7. 定时任务推送

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

描述

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

注:此接口需要申请开通,请点击右侧“技术咨询”了解详情 。

推送接口

代码示例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static void pushMessageToApp()
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);

            AppMessage message = new AppMessage();
            //TransmissionTemplate template = TransmissionTemplateDemo();
            NotificationTemplate template = NotificationTemplateDemo();
            message.IsOffline = true;
            message.OfflineExpireTime = 1000 * 3600 * 12;
            message.Data = template;
            List<String> appIdList = new List<string>();
            appIdList.Add(APPID);
            List<String> phoneTypeList = new List<string>();
            phoneTypeList.Add("ANDROID");
            phoneTypeList.Add("IOS");
            // List<String> provinceList = new List<string>();
            // provinceList.Add("浙江");
            // provinceList.Add("上海");
            // List<String> tagList = new List<string>();
            // tagList.Add("lala");
            // tagList.Add("la");
            message.AppIdList = appIdList;
            AppConditions cdt = new AppConditions();
            cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList,AppConditions.OptType.or);
            // cdt.addCondition(AppConditions.REGION, provinceList,AppConditions.OptType.or);
            // cdt.addCondition(AppConditions.TAG,tagList, AppConditions.OptType.not);
            message.Conditions =cdt;

            // message.PushTime = "201812041010";   

            String pushResult = push.pushMessageToApp(message);
            System.Console.WriteLine("-----------------------------------------------");
            System.Console.WriteLine(pushResult);
        }
public static NotificationTemplate NotificationTemplateDemo()
        {
            NotificationTemplate template = new NotificationTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            template.Title = "";
            template.Text = "";
            template.Logo = "";
            template.LogoURL = "";
            template.TransmissionType = 2;
            template.TransmissionContent = "请填写透传内容";    
            template.IsRing = true;
            template.IsVibrate = true;   
            template.IsClearable = true;

            Style1 style1 = new Style1();
            style1.Title = "style1";
            style1.Text = "style1";
            style1.Logo = "push.png";
            style1.LogoUrl = "";

            template.setStyle(style1);

            Console.WriteLine(template.getTransparent());
            return template;
        }


接口部分参数详细说明
  • 设定推送的时间格式为yyyyMMddHHmm 例如:201710251900,任务将会在2017年10月25日17点00分推送。
  • 对时间的设定有一定的要求:
    1. 时间格式不正确 提交任务时 将直接返回失败。
    2. 下发时间小于当前时间 提交任务时将直接返回失败。
    3. 下发时间超过系统所允许的最大时间点 提交任务 将直接返回失败

7.2 定时任务查询接口

描述

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

对应接口

public String getScheduleTask(String taskId, String appId)

参数说明

参数名 类型 必需 默认值 参数描述
taskId String 任务ID
appId String 应用ID
代码示例
private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String TASKID = "";
private static void getScheduleTaskDemo()
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            string res = push.getScheduleTask(TASKID, APPID);
            Console.WriteLine("-----------------------------------------------");
            Console.WriteLine(res);
        }

返回的主要参数如下:

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

7.3 定时任务删除接口

描述

用来删除还未下发的任务

对应接口

public String delScheduleTask(String taskId, String appId)

参数说明

参数名 类型 必需 默认值 参数描述
taskId String 任务ID
appId String 应用ID
代码示例
private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String TASKID = "";
private static void delScheduleTaskDemo()
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            string res = push.delScheduleTask(TASKID, APPID);
            Console.WriteLine("-----------------------------------------------");
            Console.WriteLine(res);
        }

需要补充说明的是:

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

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

8.1 描述

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

8.2 应用场景

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

8.3 对应接口

// AppConditions类的实例方法
public AppConditions addCondition(String key, List<String> values,int optType)
参数说明:
参数名 类型 必需 默认值 参数描述
key str 查询条件键(phoneType 手机类型,region 省市,tag 用户标签)
values list 查询条件值列表
optType int 0 条件类型(OptType.or 或, OptType.and 与, OptType.not 非)

8.4 代码实例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static void pushMessageToApp()
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);

            AppMessage message = new AppMessage();

            NotificationTemplate template = NotificationTemplateDemo();

            message.IsOffline = true;
            message.OfflineExpireTime = 1000 * 3600 * 12;
            message.Data = template;    
            List<String> appIdList = new List<string>();
            appIdList.Add(APPID);
            List<String> phoneTypeList = new List<string>();
            phoneTypeList.Add("ANDROID");
            phoneTypeList.Add("IOS");
            // List<String> provinceList = new List<string>();
            // provinceList.Add("浙江");
            // provinceList.Add("上海");
            message.AppIdList = appIdList;

            AppConditions cdt = new AppConditions();
            cdt.addCondition(AppConditions.PHONE_TYPE, phoneTypeList,AppConditions.OptType.or);
            // cdt.addCondition(AppConditions.REGION, provinceList,AppConditions.OptType.or);
            message.Conditions =cdt;
            String pushResult = push.pushMessageToApp(message);
        }
public static NotificationTemplate NotificationTemplateDemo()
        {
            NotificationTemplate template = new NotificationTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            template.Title = "";
            template.Text = "";
            template.Logo = "";
            template.LogoURL = "";
            template.TransmissionType = 2;
            template.TransmissionContent = ""; 
            template.IsRing = true;
            template.IsVibrate = true;  
            template.IsClearable = true;


            Style1 style1 = new Style1();
            style1.Title = "style1";
            style1.Text = "style1";
            style1.Logo = "push.png";
            style1.LogoUrl = "";

            template.setStyle(style1);

            Console.WriteLine(template.getTransparent());
            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 功能代码示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String PN = "";

private static void bindCidPnDemo()
        {
            Encoding encoding = new UTF8Encoding(true);
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            Dictionary<string, String> dict = new Dictionary<string, String>();
            System.Security.Cryptography.MD5CryptoServiceProvider md5Hasher = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] data = md5Hasher.ComputeHash(encoding.GetBytes(PN));
            StringBuilder sBuilder = new StringBuilder();
            for (int i = 0; i < data.Length; i++)
            {
                sBuilder.Append(data[i].ToString("x2"));
            }
            dict.Add(CLIENTID, sBuilder.ToString());
            string res = push.bindCidPn(APPID, dict);
            Console.WriteLine(res);
        }

10.4.3 具体参数

参数 类型 是否必填 最大长度 描述
appId String 32 个推分配给开发者的ID
cidAndPn Dict 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 功能代码示例

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String CLIENTID = "";
private static void unbindCidPnDemo()
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            List<string> list = new List<string>();
            list.Add(CLIENTID);
            string res = push.unbindCidPn(APPID, list);
            Console.WriteLine("-----------------------------------------------");
            Console.WriteLine(res);
        }

10.5.3 具体参数

参数 类型 是否必填 最大长度 描述
appId String 32 开发者ID
cids list 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 用法举例

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String CLIENTID = "";
private static void queryCidPnDemo()
        {
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
            List<string> cidList = new List<string>();
            cidList.Add(CLIENTID);
            string res = push.queryCidPn(APPID, cidList);
            Console.WriteLine("-----------------------------------------------");
            Console.WriteLine(res);
        }

10.6.3 具体参数

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

10.6.4 返回值说明

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

10.6.5 注意事项

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

10.7.1 接口列表

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

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

消息模板 中文含义 是否支持短信模板 其他
Notification 通知模板 消息模板具体含义参考
LinkTemplate 网页模板
NotyPopLoadTemplate 下载模板
TransmissionTemplate 透传模板

10.7.3 短信推送模板参数

成员名或方法名 类型 是否必填 描述 示例值 其他
smsTemplateId String 推送的短信模板ID(短信模板说明) smsMessage.smsTemplateId = "xxx" 具体使用,参考下面的代码中LinkTemplate中使用短信模板的示例。其他模板如此相同
smsContent map 推送的短信模板中占位符的内容。 smsContent = {} smsContent["name"] = "zhangsan" smsContent["money"] = "0000" smsMessage.smsContent = smsContent
offlineSendtime long 推送后多久进行短信补发(单位:ms) smsMessage.offlineSendtime = 1000
isApplink boolean 推送的短信模板中是否选用APPLink进行推送。 smsMessage.isApplink = True
url String 推送的短信模板中的APPLink链接地址。 smsMessage.url = "www.baidu.com"
payload String 推送的短信模板中的APPLink自定义字段。 smsMessage.payload = "自定义"

10.7.4 pushMessageToApp 完整示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

private static String APPID = "";   
private static String APPKEY = "";  
private static String MASTERSECRET = "";
private static String CLIENTID = "";  
private static String HOST = "http://api.getui.com/apiex.htm";    

        private static void pushMessageToApp(){
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);

            AppMessage message = new AppMessage();

            // 设置群推接口的推送速度,单位为条/秒,仅对pushMessageToApp(对指定应用群推接口)有效
            message.Speed = 100;

            NotificationTemplate template =  NotificationTemplateDemo();
com.igetui.api.openservice.igetui.sms.SmsInfo smsMessage = new com.igetui.api.openservice.igetui.sms.SmsInfo();
            Dictionary<string, string> smscount = new Dictionary<string, string>();
            smscount.Add("name", "");
            smscount.Add("code", "");
            smscount.Add("hour","");

            smsMessage.Payload = "";
            smsMessage.SmsContent = smscount;
            smsMessage.SmsTemplateId = "";
            smsMessage.IsApplink = false;
            smsMessage.Url = "www.bai";
            smsMessage.OfflineSendtime = 1;
            template.setSmsInfo(smsMessage);
            message.IsOffline = true;          
            message.OfflineExpireTime = 1000 * 3600 * 12;            
            message.Data = template;
            List<String> appIdList = new List<string>();
            appIdList.Add(APPID);

            List<String> phoneTypeList = new List<string>();   
                    phoneTypeList.Add("ANDROID");
                    phoneTypeList.Add("IOS");
            // List<String> provinceList = new List<string>();     
            //         provinceList.Add("浙江");
            //         provinceList.Add("上海");
            //         provinceList.Add("北京");

            // List<String> tagList = new List<string>();
            //         tagList.Add("开心");

            message.AppIdList = appIdList;
            message.PhoneTypeList = phoneTypeList;
            // message.ProvinceList = provinceList;
            // message.TagList = tagList;


            String pushResult = push.pushMessageToApp(message);
            System.Console.WriteLine("-----------------------------------------------");
            System.Console.WriteLine("服务端返回结果:" + pushResult);
        }

        //通知模板动作内容
       public static NotificationTemplate NotificationTemplateDemo()
       {
           NotificationTemplate template = new NotificationTemplate();
           template.AppId = APPID;
           template.AppKey = APPKEY;
           //通知栏标题
           template.Title = "请填写通知标题";     
           //通知栏内容     
           template.Text = "请填写通知内容";          
           //通知栏显示本地图片
           template.Logo = "";               
           //通知栏显示网络图标
           template.LogoURL = "";                    
           //应用启动类型,1:强制应用启动  2:等待应用启动
           template.TransmissionType = 2;        
           //透传内容  
           template.TransmissionContent = "请填写透传内容";  
           //接收到消息是否响铃,true:响铃 false:不响铃   
           template.IsRing = true;        
           //接收到消息是否震动,true:震动 false:不震动   
           template.IsVibrate = true;         
           //接收到消息是否可清除,true:可清除 false:不可清除    
           template.IsClearable = true;

           return template;
       }
}

10.7.5 pushMessageToSingle 完整示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String CLIENTID = "";
private static void pushMessageToSingleToSMS()
         {
             IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);
             NotificationTemplate template =  NotificationTemplateDemo();
             com.igetui.api.openservice.igetui.sms.SmsInfo smsMessage = new com.igetui.api.openservice.igetui.sms.SmsInfo();
             Dictionary<string, string> smscount = new Dictionary<string, string>();
             smscount.Add("name", "");
             smscount.Add("code", "");
             smscount.Add("hour","");

             smsMessage.Payload = "";
             smsMessage.SmsContent = smscount;
             smsMessage.SmsTemplateId = "";
             smsMessage.IsApplink = false;
             smsMessage.Url = "www.bai";
             smsMessage.OfflineSendtime = 1;
             template.setSmsInfo(smsMessage);
             SingleMessage message = new SingleMessage();
             message.IsOffline = true;
             //  离线有效时间
             message.OfflineExpireTime = 1000 * 3600 * 12;
             message.Data = template;
             com.igetui.api.openservice.igetui.Target target = new com.igetui.api.openservice.igetui.Target();
             target.appId = APPID;
             target.clientId = CLIENTID;
             string ret = push.pushMessageToSingle(message, target);
             Console.WriteLine("-----------------------------------------------");
             Console.WriteLine(ret + "pushsms");
         }
        public static NotificationTemplate NotificationTemplateDemo()
       {
           NotificationTemplate template = new NotificationTemplate();
           template.AppId = APPID;
           template.AppKey = APPKEY;
           //通知栏标题
           template.Title = "请填写通知标题";     
           //通知栏内容     
           template.Text = "请填写通知内容";          
           //通知栏显示本地图片
           template.Logo = "";               
           //通知栏显示网络图标
           template.LogoURL = "";                    
           //应用启动类型,1:强制应用启动  2:等待应用启动
           template.TransmissionType = 2;        
           //透传内容  
           template.TransmissionContent = "请填写透传内容";  
           //接收到消息是否响铃,true:响铃 false:不响铃   
           template.IsRing = true;        
           //接收到消息是否震动,true:震动 false:不震动   
           template.IsVibrate = true;         
           //接收到消息是否可清除,true:可清除 false:不可清除    
           template.IsClearable = true;

           return template;
       }

10.7.6 pushMessageToList 完整示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Google.ProtocolBuffers;
using com.gexin.rp.sdk.dto;
using com.igetui.api.openservice;
using com.igetui.api.openservice.igetui;
using com.igetui.api.openservice.igetui.template;
using System.Net;

private static String HOST = "http://api.getui.com/apiex.htm";
private static String APPID = "";
private static String APPKEY = "";
private static String MASTERSECRET = "";
private static String CLIENTID = "";
private static String CLIENTID1 = "";
private static String CLIENTID2 = "";
 private static void PushMessageToList()
        {
            // 推送主类(方式1,不可与方式2共存)
            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);

            ListMessage message = new ListMessage();

            NotificationTemplate template = NotificationTemplateDemo();
            // 用户当前不在线时,是否离线存储,可选
            message.IsOffline = true;
            // 离线有效时间,单位为毫秒,可选
            message.OfflineExpireTime = 1000 * 3600 * 12;
            message.Data = template;
 com.igetui.api.openservice.igetui.sms.SmsInfo smsMessage = new com.igetui.api.openservice.igetui.sms.SmsInfo();
            Dictionary<string, string> smscount = new Dictionary<string, string>();
            smscount.Add("name", "");
            smscount.Add("code", "");
            smscount.Add("hour","");

            smsMessage.Payload = "1234";
            smsMessage.SmsContent = smscount;
            smsMessage.SmsTemplateId = "";
            smsMessage.IsApplink = false;
            smsMessage.Url = "";
            smsMessage.OfflineSendtime = 1;
            template.setSmsInfo(smsMessage);        
            List<com.igetui.api.openservice.igetui.Target> targetList = new List<com.igetui.api.openservice.igetui.Target>();
            com.igetui.api.openservice.igetui.Target target1 = new com.igetui.api.openservice.igetui.Target();
            target1.appId = APPID;
            target1.clientId = CLIENTID;

            com.igetui.api.openservice.igetui.Target target2 = new com.igetui.api.openservice.igetui.Target();
            target2.appId = APPID;
            target2.clientId = CLIENTID1;

            com.igetui.api.openservice.igetui.Target target3 = new com.igetui.api.openservice.igetui.Target();
            target3.appId = APPID;
            target3.clientId = CLIENTID2;

            targetList.Add(target1);
            targetList.Add(target2);
            targetList.Add(target3);

            String contentId = push.getContentId(message);
            String pushResult = push.pushMessageToList(contentId, targetList);
            System.Console.WriteLine("-----------------------------------------------");
            System.Console.WriteLine(pushResult);
        }

        public static NotificationTemplate NotificationTemplateDemo()
         {
             NotificationTemplate template = new NotificationTemplate();
             template.AppId = APPID;
             template.AppKey = APPKEY;
             //通知栏标题
             template.Title = "请填写通知标题";     
             //通知栏内容     
             template.Text = "请填写通知内容";          
             //通知栏显示本地图片
             template.Logo = "";               
             //通知栏显示网络图标
             template.LogoURL = "";                    
             //应用启动类型,1:强制应用启动  2:等待应用启动
             template.TransmissionType = 2;        
             //透传内容  
             template.TransmissionContent = "请填写透传内容";  
             //接收到消息是否响铃,true:响铃 false:不响铃   
             template.IsRing = true;        
             //接收到消息是否震动,true:震动 false:不震动   
             template.IsVibrate = true;         
             //接收到消息是否可清除,true:可清除 false:不可清除    
             template.IsClearable = true;

             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 下载

文档中心搜索

技术
咨询

微信扫一扫

随时联系技术支持

在线
咨询