由于项目需要给安卓、ios提供提送消息服务。找到了umeng这个平台,官方竟然没有提供.net版本的SDK,同时项目需要就拿出来和大家分享一下需要的同学们可以做个参考,建议官方提供.net版本。
这里就提供、单播、组播和广播模式
1.接口声明
1 public interface IMsgService 2 { 3 /// <summary> 4 /// 单播 5 /// </summary> 6 /// <param name="msg"></param> 7 MsgDTO UniCast(string msg, string deviceId); 8 9 /// <summary>10 /// 组播11 /// </summary>12 /// <param name="msg"></param>13 MsgDTO GroupCast(string msg, int OperatorId);14 15 /// <summary>16 /// 广播17 /// </summary>18 /// <param name="msg"></param>19 MsgDTO BroadCast(string msg);20 }
2.安卓服务实现
1 public class AndroidMsgService : MsgServiceBase, IMsgService 2 { 3 4 PRotected static readonly string App_Master_Secret = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/Android", "appmastersecret"); 5 6 protected static readonly string App_Key = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/Android", "appkey"); 7 8 9 private AndroidMsgService() 10 { 11 12 } 13 14 public static readonly AndroidMsgService Instance =new AndroidMsgService(); 15 16 protected override string GetSign(string post_body) 17 { 18 return (String.Concat("POST", SendUrl, post_body, App_Master_Secret)).md5().ToLower(); 19 } 20 21 public MsgDTO BroadCast(string msg) 22 { 23 var sendData = new 24 { 25 appkey = App_Key, 26 timestamp = GetTimeStamp, 27 type = "broadcast", 28 payload = new 29 { 30 display_type = "notification",// 通知,notification 31 body = new 32 { 33 //custom = msg 34 ticker =msg, 35 title = msg, 36 text = msg, 37 after_open = "go_custom", 38 custom="0" 39 }, 40 extra = new 41 { 42 key1 = "key1", 43 key2 = "key2" 44 } 45 }, 46 policy = new 47 { 48 // start_time = "2013-10-29 12:00:00", //定时发送 49 expire_time = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd HH:mm:ss") 50 }, 51 production_mode = ProductMode, 52 description = "测试广播通知-android" 53 }; 54 55 //var result = this.GetResult(sendData, GetSign(sendData.ToJson())); 56 //return result; 57 58 var result = this.GetResult(sendData); 59 return result; 60 } 61 62 public MsgDTO GroupCast(string msg, int operatorId) 63 { 64 var sendData = new 65 { 66 appkey = App_Key, 67 timestamp = GetTimeStamp, 68 type = "groupcast", 69 filter = new 70 { 71 where = new 72 { 73 and = new[] 74 { 75 new {tag=operatorId.ToString()} 76 } 77 } 78 }, 79 payload = new 80 { 81 display_type = "notification", // 通知,notification 82 body = new 83 { 84 //custom = msg 85 ticker = msg, 86 title = msg, 87 text = msg, 88 after_open = "go_custom", 89 custom = "0" 90 }, 91 extra = new 92 { 93 key1 = "key1", 94 key2 = "key2" 95 } 96 }, 97 policy = new 98 { 99 expire_time = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd HH:mm:ss")100 },101 production_mode = ProductMode,102 description = "测试组播通知-Android"103 };104 var result = base.GetResult(sendData);105 return result;106 }107 108 public MsgDTO UniCast(string msg, string deviceId)109 {110 111 var sendData = new112 {113 appkey = App_Key,114 timestamp = GetTimeStamp,115 type = "unicast",116 device_tokens = deviceId,117 payload = new118 {119 display_type = "notification", // 消息,message120 body = new121 {122 //custom = msg123 ticker = msg,124 title = msg,125 text = msg,126 after_open = "go_custom",127 custom = "0"128 },129 extra = new130 {131 key1= "key1",132 key2= "key2"133 }134 },135 production_mode= ProductMode,136 description = "测试单播"137 };138 var result = base.GetResult(sendData);139 return result;140 141 }142 143 144 }
3.IOS服务实现
1 public class IosMsgService : MsgServiceBase, IMsgService 2 { 3 protected static readonly string App_Master_Secret = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/IOS", "appmastersecret"); 4 5 protected static readonly string App_Key = 6 AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/IOS", "appkey"); 7 8 public static readonly IosMsgService Instance = new IosMsgService(); 9 10 private IosMsgService() 11 { 12 13 } 14 15 protected override string GetSign(string post_body) 16 { 17 return (String.Concat("POST", SendUrl, post_body, App_Master_Secret)).MD5().ToLower(); 18 } 19 20 public MsgDTO BroadCast(string msg) 21 { 22 var sendData = new 23 { 24 appkey = App_Key, 25 timestamp = GetTimeStamp, 26 type = "broadcast", 27 payload = new 28 { 29 aps = new { alert = msg } // 苹果必填字段 30 }, 31 policy = new 32 { 33 // start_time = "2013-10-29 12:00:00", //定时发送 34 expire_time = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd HH:mm:ss") 35 }, 36 production_mode = ProductMode, 37 description = "测试广播通知-iOS" 38 }; 39 40 //var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={GetSign(sendData.ToJson())}"), sendData); 41 //return result; 42 43 var result = this.GetResult(sendData); 44 return result; 45 } 46 47 public MsgDTO GroupCast(string msg,int operatorId) 48 { 49 var sendData = new 50 { 51 appkey = App_Key, 52 timestamp = GetTimeStamp, 53 type = "groupcast", 54 filter = new 55 { 56 where = new 57 { 58 and = new [] 59 { 60 new {tag=operatorId.ToString()} 61 } 62 } 63 }, 64 payload = new 65 { 66 aps = new { alert = msg } // 苹果必填字段 67 }, 68 policy = new 69 { 70 expire_time = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd HH:mm:ss") 71 }, 72 production_mode = ProductMode, 73 description = "测试组播通知-IOS" 74 }; 75 var result = base.GetResult(sendData); 76 return result; 77 //var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={GetSign(sendData.ToJson())}"), sendData); 78 //return result; 79 } 80 81 public MsgDTO UniCast(string msg, string deviceId) 82 { 83 var sendData = new 84 { 85 appkey = App_Key, 86 timestamp = GetTimeStamp, 87 type = "unicast", 88 device_tokens = deviceId, 89 payload = new 90 { 91 aps = new 92 { 93 alert = msg 94 } // 苹果必填字段 95 }, 96 policy = new 97 { 98 expire_time = DateTime.Now.AddDays(3).ToString("yyyy-MM-dd HH:mm:ss") 99 },100 production_mode= ProductMode,101 description = "测试单播消息"102 };103 var result = base.GetResult(sendData);104 return result;105 //var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={GetSign(sendData.ToJson())}"), sendData);106 //return result;107 }108 }
4.MsgServiceBase服务基类
1 public abstract class MsgServiceBase 2 { 3 protected static readonly string SendUrl = AppSettingHelper.DomainSetting.GetValue("Api/UmengMsgList/RequestUrl"); 4 5 protected static readonly string ProductMode = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList", "productmode"); 6 7 protected abstract string GetSign(string sendData); 8 9 protected string GetTimeStamp => (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds.ToString(10 "#");11 12 protected MsgDTO GetResult(dynamic sendData)13 {14 15 var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={this.GetSign(JsonConvert.SerializeObject(sendData))}"), sendData);16 return result;17 }18 }
5.HttpUtil
1 public static T HttpUtil<T>(string url, dynamic data) where T :new() 2 { 3 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 4 request.ContentType = "application/x-www-form-urlencoded"; //设置HTTP头 5 request.Method = "POST"; 6 7 //byte[] postdata = Encoding.UTF8.GetBytes(data); 8 byte[] postdata = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data)); 9 request.ContentLength = postdata.Length;10 11 Stream newStream = request.GetRequestStream();12 newStream.Write(postdata, 0, postdata.Length);13 newStream.Close();14 15 16 17 HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse();18 StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);19 return (reader.ReadToEnd()).FromJson<T>();//得到结果20 }
贴上源码:http://files.VEVb.com/files/zpc870921/Common.rar
新闻热点
疑难解答