using System; using System.Collections.Generic; using System.Linq; using System.Web; using com.igetui.api.openservice; using System.Threading.Tasks; using System.Data; using Newtonsoft.Json.Linq; using Newtonsoft.Json; using com.igetui.api.openservice.igetui.template; using com.igetui.api.openservice.igetui; namespace WebAPI.Service { public static class GeTuiService { //http的域名 // private static String HOST = "http://sdk.open.api.igexin.com/apiex.htm"; //https的域名 private static String HOST = "https://api.getui.com/apiex.htm"; // 配置为DCLOUD 中的 unipush 个推 中对应的数据 private static String APPID = "X3I10VqaROAH8C7ElIc1L5"; private static String APPKEY = "V425beWn5K65BcOYKTcXx8"; private static String MASTERSECRET = "LOXAgRbXS98NxHKUXmlJQ"; // 推送服务实例 private static IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET); // 单条消息推送 public static void PubishSingle(int HInterID) { SQLHelper.ClsCN oCN = new SQLHelper.ClsCN(); DataSet ds = new DataSet(); try { JObject NameMsgKVP = new JObject(); ds = oCN.RunProcReturn($@" select * from h_v_OA_WorkLinkBillAllList where hmainid = {HInterID} select * from Gy_UserClientIdRelation ", "h_v_OA_WorkLinkBillAllList"); NotificationTemplate template = null; if(ds.Tables[0].Rows.Count > 0) { string title = ds.Tables[0].Rows[0]["主题"].ToString(); string content = ds.Tables[0].Rows[0]["内容"].ToString(); template = GetNotificationTemplate(title, content, "/pages/ZLGL/OA_WorkLink/OA_WorkLinkBillList", "0"); // 广播 if(ds.Tables[0].Rows[0]["发送类型"].ToString() == "公共") { // 遍历 全推送 foreach(DataRow row in ds.Tables[1].Rows) { PushMessageToSingle(template, row["HClientID"].ToString()); } }else // 单独推送 { // 推送给接收人 和 抄送人 foreach (DataRow row in ds.Tables[1].Rows) { if(ds.Tables[0].Rows[0]["接收人"].ToString() == row["HUserName"].ToString() || ds.Tables[0].Rows[0]["抄送接收人"].ToString() == row["HUserName"].ToString()) PushMessageToSingle(template, row["HClientID"].ToString()); } } } } catch (Exception ex) { LogService.Write(ex.ToString()); return; } } // 单推 使用通知消息模型 private static void PushMessageToSingle(NotificationTemplate template, string ClientID) { IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET); // 单推消息模型 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); LogService.Write("-----------------------------------------------"); LogService.Write("-----------------------------------------------"); LogService.Write("----------------服务端返回结果:" + pushResult); } catch (RequestException e) { String requestId = e.RequestId; //发送失败后的重发 String pushResult = push.pushMessageToSingle(message, target, requestId); LogService.Write("-----------------------------------------------"); LogService.Write("-----------------------------------------------"); LogService.Write("----------------服务端返回结果:" + pushResult); } } //透传模板动作内容 public static TransmissionTemplate TransmissionTemplateDemo() { TransmissionTemplate template = new TransmissionTemplate(); template.AppId = APPID; template.AppKey = APPKEY; //应用启动类型,1:强制应用启动 2:等待应用启动 template.TransmissionType = 1; //透传内容 template.TransmissionContent = "透传内容"; //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟) // String begin = "2015-03-06 14:36:10"; // String end = "2015-03-06 14:46:20"; // template.setDuration(begin, end); return template; } //通知透传模板动作内容 public static NotificationTemplate GetNotificationTemplate(string title, string content, string pagePath, string HItemID) { NotificationTemplate template = new NotificationTemplate(); template.AppId = APPID; template.AppKey = APPKEY; //通知栏标题 template.Title = title; //通知栏内容 template.Text = content; //通知栏显示本地图片 template.Logo = "@/static/logo.png"; //通知栏显示网络图标 template.LogoURL = ""; //应用启动类型,1:强制应用启动 2:等待应用启动 template.TransmissionType = 1; //透传内容 template.TransmissionContent = ""; //接收到消息是否响铃,true:响铃 false:不响铃 template.IsRing = true; //接收到消息是否震动,true:震动 false:不震动 template.IsVibrate = true; //接收到消息是否可清除,true:可清除 false:不可清除 template.IsClearable = true; var customData = new Dictionary { {"pagePath", pagePath}, // 示例:"/pages/detail/detail" {"itemId", HItemID} // 示例:"123456" }; template.TransmissionContent = JsonConvert.SerializeObject(customData); // 序列化为 JSON 字符串 template.TransmissionType = 1; // 1=点击通知后触发客户端回调(透传内容给客户端) //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟) // String begin = "2015-03-06 14:36:10"; // String end = "2015-03-06 14:46:20"; // template.setDuration(begin, end); return template; } } }