友盟移动开发平台.NET版本SDK

由于项目需要给安卓、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 = new
112             {
113                 appkey = App_Key,
114                 timestamp = GetTimeStamp,
115                 type = "unicast",
116                 device_tokens = deviceId,
117                 payload = new
118                 {
119                     display_type = "notification", // 消息,message
120                     body = new
121                     {
122                         //custom = msg
123                         ticker = msg,
124                         title = msg,
125                         text = msg,
126                         after_open = "go_custom",
127                         custom = "0"
128                     },
129                     extra = new
130                     {
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.cnblogs.com/files/zpc870921/Common.rar

时间: 2024-08-07 00:13:10

友盟移动开发平台.NET版本SDK的相关文章

友盟在线参数+自动更新升级SDK实现指定版本强制更新升级

项目上有这样的需求:对指定的版本要求强制升级,同时其它的版本可以选择性升级. 友盟的自动更新功能还是挺好用的,只不过对强制升级这块支持的还不到位. 不过友盟的开发人员也给出了勉强可行的方案: 使用友盟在线参数来控制哪些版本需要强制更新,哪些版本不需要 相关的内容如下: 1.在线参数配置: http://dev.umeng.com/analytics/android/advanced-integration-guide#3 2.强制更新官方代码: https://github.com/nxzhou

从友盟微社区看Android第三方SDK架构实践【转载】

从友盟微社区看Android第三方SDK架构实践[转载] “先写在前面吧,本来想通过链接来转载这篇文章,发现没找到有相关的按钮.上网查了一下,都说博客园没有这功能.我在博客园也有一段时间了,鼓励原创是必须的,不过适当的转载也算是一种将有价值的文章进行分享的方式,不知道以后会不会支持呢!” 原文链接:http://www.csdn.net/article/2015-05-08/2824648-micro-community 摘要:第三方SDK的开发需要考虑很多因素,比如稳定性.灵活性等,并且还要做

利用友盟定位iOS线上版本项目的崩溃位置

引言 当我们的项目打包上传苹果商店之后,出现的崩溃问题不会想在XCode中那么明显了,那么我们就要对项目的crash日志进行分析,至此,友盟的崩溃分析作用就体现出来了. 前提 你的项目中集成了友盟 能获取到项目的dSYM文件 什么是 dSYM 文件 Xcode 编译项目后,我们会看到一个同名的 dSYM 文件,dSYM 是保存 16 进制函数地址映射信息的中转文件,我们调试的 symbols 都会包含在这个文件中,并且每次编译项目的时候都会生成一个新的 dSYM 文件,位于 /Users/<用户

友盟分享各平台URL设置

首先,想要进项友盟分享,需要到各平台去申请ID和KEY 比如想进行微信分享,就到微信开发者平台去创建应用,拿到对应的id和appScreat,然后进行设置: 参考资料

基于XP打造windows7的C++开发平台--vs2010+windows SDK for windows7

IT业是一个创造奇迹的行业,IT业也是一个年轻的行业,IT业更是一个不断更新的行业.在今年2009年,微软已经连续推出visual studio2010 beta1 与 visual studio2010 beta2 两个版本.在2010.2月就要推出正式版了,beta版本已经展示了visual studio2010的所有新特性与革新,自从visual studio 2002推出以来,visual studio 2002 -> 2003 ->2005 ->2008 ->2010,产

友盟分享 第三方平台白名单

<key>LSApplicationQueriesSchemes</key><array>    <string>mqqOpensdkSSoLogin</string>    <string>mqzone</string>    <string>sinaweibo</string>    <string>alipayauth</string>    <string>

【MDCC 2015】友盟数据平台负责人吴磊:移动大数据平台的架构与实践

转自: http://www.csdn.net/article/2015-10-20/2825962 [MDCC 2015]友盟数据平台负责人吴磊:移动大数据平台的架构与实践 [CSDN现场报道]10月14日-16日,“ 2015移动开发者大会 · 中国” (Mobile Developer Conference China 2015,简称MDCC 2015)在北京新云南皇冠假日酒店隆重举行.本次大会由全球最大中文IT社区CSDN和中国最具关注度的全方位创业平台创新工场联合主办,以“万物互 联,

友盟推送的集成过程及开发建议

一.服务简介 友盟以移动应用统计分析为产品起点,发展成为综合性的移动开发者服务平台.友盟推送是一款帮你将应用的内容更新或活动通知主动推送给终端用户,让用户第一时间获取到相关信息,有效提升用户活跃度和留存率的一种服务. 二.集成过程 1. 导入SDK所需jar包 2. 配置AndroidManifest.xml 2.1 添加权限 2.2 添加组件 2.3 添加AppKey 和 Umeng Message Secret 3. 添加代码,编译测试 3.1 在应用的主Activity onCreate(

Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件

Android应用开发-小巫CSDN博客客户端之集成友盟社会化分享组件 上一篇博客给大家介绍了如何分析网页并且使用jsoup这个库对html代码进行解析,本篇博客继续给大家介绍如何集成友盟社会化组件,如何使用SDK提供的API轻松实现多平台的社会化分享,官网的文档和Demo看起来很头疼的有木有,小巫在集成这个社会化的组件也有点烦躁,所以也需要各位耐心看下面的博文把友盟社会化组件集成到你的应用中去.为什么要选择友盟呢,这里也是答应了小喵的,要帮忙集成他们的服务,所以也顺带帮他们写一篇这样的博文,千