由于项目需要给安卓、ios提供提送消息服务。找到了umeng这个平台,官方竟然没有提供.net版本的SDK,同时项目需要就拿出来和大家分享一下需要的同学们可以做个参考,建议官方提供.net版本。

这里就提供、单播、组播和广播模式

1.接口声明

  public interface IMsgService
{
/// <summary>
/// 单播
/// </summary>
/// <param name="msg"></param>
MsgDTO UniCast(string msg, string deviceId); /// <summary>
/// 组播
/// </summary>
/// <param name="msg"></param>
MsgDTO GroupCast(string msg, int operatorId); /// <summary>
/// 广播
/// </summary>
/// <param name="msg"></param>
MsgDTO BroadCast(string msg);
}

2.安卓服务实现

 public class AndroidMsgService : MsgServiceBase, IMsgService
{ protected static readonly string App_Master_Secret = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/Android", "appmastersecret"); protected static readonly string App_Key = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/Android", "appkey"); private AndroidMsgService()
{ } public static readonly AndroidMsgService Instance =new AndroidMsgService(); protected override string GetSign(string post_body)
{
return (String.Concat("POST", SendUrl, post_body, App_Master_Secret)).MD5().ToLower();
} public MsgDTO BroadCast(string msg)
{
var sendData = new
{
appkey = App_Key,
timestamp = GetTimeStamp,
type = "broadcast",
payload = new
{
display_type = "notification",// 通知,notification
body = new
{
//custom = msg
ticker =msg,
title = msg,
text = msg,
after_open = "go_custom",
custom=""
},
extra = new
{
key1 = "key1",
key2 = "key2"
}
},
policy = new
{
// start_time = "2013-10-29 12:00:00", //定时发送
expire_time = DateTime.Now.AddDays().ToString("yyyy-MM-dd HH:mm:ss")
},
production_mode = ProductMode,
description = "测试广播通知-android"
}; //var result = this.GetResult(sendData, GetSign(sendData.ToJson()));
//return result; var result = this.GetResult(sendData);
return result;
} public MsgDTO GroupCast(string msg, int operatorId)
{
var sendData = new
{
appkey = App_Key,
timestamp = GetTimeStamp,
type = "groupcast",
filter = new
{
where = new
{
and = new[]
{
new {tag=operatorId.ToString()}
}
}
},
payload = new
{
display_type = "notification", // 通知,notification
body = new
{
//custom = msg
ticker = msg,
title = msg,
text = msg,
after_open = "go_custom",
custom = ""
},
extra = new
{
key1 = "key1",
key2 = "key2"
}
},
policy = new
{
expire_time = DateTime.Now.AddDays().ToString("yyyy-MM-dd HH:mm:ss")
},
production_mode = ProductMode,
description = "测试组播通知-Android"
};
var result = base.GetResult(sendData);
return result;
} public MsgDTO UniCast(string msg, string deviceId)
{ var sendData = new
{
appkey = App_Key,
timestamp = GetTimeStamp,
type = "unicast",
device_tokens = deviceId,
payload = new
{
display_type = "notification", // 消息,message
body = new
{
//custom = msg
ticker = msg,
title = msg,
text = msg,
after_open = "go_custom",
custom = ""
},
extra = new
{
key1= "key1",
key2= "key2"
}
},
production_mode= ProductMode,
description = "测试单播"
};
var result = base.GetResult(sendData);
return result; } }

3.IOS服务实现

 public class IosMsgService : MsgServiceBase, IMsgService
{
protected static readonly string App_Master_Secret = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/IOS", "appmastersecret"); protected static readonly string App_Key =
AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList/IOS", "appkey"); public static readonly IosMsgService Instance = new IosMsgService(); private IosMsgService()
{ } protected override string GetSign(string post_body)
{
return (String.Concat("POST", SendUrl, post_body, App_Master_Secret)).MD5().ToLower();
} public MsgDTO BroadCast(string msg)
{
var sendData = new
{
appkey = App_Key,
timestamp = GetTimeStamp,
type = "broadcast",
payload = new
{
aps = new { alert = msg } // 苹果必填字段
},
policy = new
{
// start_time = "2013-10-29 12:00:00", //定时发送
expire_time = DateTime.Now.AddDays().ToString("yyyy-MM-dd HH:mm:ss")
},
production_mode = ProductMode,
description = "测试广播通知-iOS"
}; //var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={GetSign(sendData.ToJson())}"), sendData);
//return result; var result = this.GetResult(sendData);
return result;
} public MsgDTO GroupCast(string msg,int operatorId)
{
var sendData = new
{
appkey = App_Key,
timestamp = GetTimeStamp,
type = "groupcast",
filter = new
{
where = new
{
and = new []
{
new {tag=operatorId.ToString()}
}
}
},
payload = new
{
aps = new { alert = msg } // 苹果必填字段
},
policy = new
{
expire_time = DateTime.Now.AddDays().ToString("yyyy-MM-dd HH:mm:ss")
},
production_mode = ProductMode,
description = "测试组播通知-IOS"
};
var result = base.GetResult(sendData);
return result;
//var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={GetSign(sendData.ToJson())}"), sendData);
//return result;
} public MsgDTO UniCast(string msg, string deviceId)
{
var sendData = new
{
appkey = App_Key,
timestamp = GetTimeStamp,
type = "unicast",
device_tokens = deviceId,
payload = new
{
aps = new
{
alert = msg
} // 苹果必填字段
},
policy = new
{
expire_time = DateTime.Now.AddDays().ToString("yyyy-MM-dd HH:mm:ss")
},
production_mode= ProductMode,
description = "测试单播消息"
};
var result = base.GetResult(sendData);
return result;
//var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={GetSign(sendData.ToJson())}"), sendData);
//return result;
}
}

4.MsgServiceBase服务基类

 public abstract class MsgServiceBase
{
protected static readonly string SendUrl = AppSettingHelper.DomainSetting.GetValue("Api/UmengMsgList/RequestUrl"); protected static readonly string ProductMode = AppSettingHelper.DomainSetting.GetAttribute<string>("Api/UmengMsgList", "productmode"); protected abstract string GetSign(string sendData); protected string GetTimeStamp => (DateTime.UtcNow - new DateTime(, , , , , , DateTimeKind.Utc)).TotalMilliseconds.ToString(
"#"); protected MsgDTO GetResult(dynamic sendData)
{ var result = RequestHelper.HttpUtil<MsgDTO>(String.Concat(SendUrl, $"?sign={this.GetSign(JsonConvert.SerializeObject(sendData))}"), sendData);
return result;
}
}

5.HttpUtil

 public static T HttpUtil<T>(string url, dynamic data) where T :new()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded"; //设置HTTP头
request.Method = "POST"; //byte[] postdata = Encoding.UTF8.GetBytes(data);
byte[] postdata = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data));
request.ContentLength = postdata.Length; Stream newStream = request.GetRequestStream();
newStream.Write(postdata, , postdata.Length);
newStream.Close(); HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
return (reader.ReadToEnd()).FromJson<T>();//得到结果
}

贴上源码:http://files.cnblogs.com/files/zpc870921/Common.rar

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

  1. 友盟分享各平台URL设置

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

  2. 商业创新不能等?用友低代码开发平台YonBuilder为您加速!

    随着云计算.人工智能.物联网.大数据.5G等新一代技术的快速发展,越来越多的企业希望借助技术的力量加速数智化转型,期许通过更加敏捷和强大的应用系统推动企业的商业创新速度.但传统软件开发周期长.开发成本 ...

  3. 用友低代码开发平台YonBuilder首次亮相DevRun开发者沙龙

    2020年的今天,没有人会再质疑企业上云的必要性与价值所在.从高科技行业到传统领域,大大小小的企业都希望走在变革道路前列,通过企业云加快业务数字化转型,更好地维护和管理企业数据. 然而,大多数企业都很 ...

  4. UmengAppDemo【友盟统计SDK集成以及多渠道打包配置,基于V7.5.3版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里只是记录下集成友盟统计SDK以及简单配置多渠道打包的步骤.所以1.该Demo不能运行:2.配置多渠道打包只是一种简单的写法,具体 ...

  5. 友盟推送 .NET (C#) 服务端 SDK rest api 调用库

    友盟推送 .NET SDK rest api 介绍 该版本是基于友盟推送2.3版本封装的,网上查询了下发现没有.NET版本的调用库,官方也没有封装.NET的版本,只有python.java.php版本 ...

  6. iOS开发-友盟分享(3)

    iOS 友盟分享 这个主要是提到如何通过友盟去自定义分享的步骤: 一.肯定要去友盟官网下载最新的SDK包,然后将SDK导入到你的工程文件夹里面去: 二.注册友盟账号,将你的APP添加到你的账号里面然后 ...

  7. android开发系列之友盟统计集成

    相比大家都遇到这种情况,当我们的app上线之后,我们想要实时的跟踪了解到app里面的bug情况.新增用户情况.用户相关的行为属性情况等.但是如果自己在app里面去开发集成这些功能,一方面开发工作量还挺 ...

  8. Android中用友盟实现QQ的第三方登录

    //首先应该去友盟的官网注册你的账号,创建一个应用,获得它的APPkey,也可以用它的API上的appkey,下载SDK,下面根据API文档一步步实现就行了. //下面是友盟的APi文档 1.  产品 ...

  9. Android 友盟分享详细集成过程及所遇问题解决

    最近项目需要针对微信.朋友圈.QQ.QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并 ...

随机推荐

  1. github上面创建文件夹

  2. 前后端分离中,gulp实现头尾等公共页面的复用 前言

    前言 通常我们所做的一些页面,我们可以从设计图里面看出有一些地方是相同的.例如:头部,底部,侧边栏等等.如果前后端分离时,制作静态页面的同学,对于这些重复的部分只能够通过复制粘贴到新的页面来,如果页面 ...

  3. [LeetCode] 大数问题,相加和相乘,题 Multiply Strings

    Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...

  4. 【c#】winform 上传图片

    1.拖拽上传图片 1.1.后台代码中修改窗体属性,添加 AllowDrop = true 1.2.给窗体添加拖拽事件,在事件列表找到拖拽 双击即可: 在 DragDrop 生成的方法中添加代码如下: ...

  5. codevs 1332 上白泽慧音

    1332 上白泽慧音  时间限制: 1 s  空间限制: 128000 KB     题目描述 Description 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大 ...

  6. C11简洁之道:模板改进

    1.  右尖括号 我们在C++98/03中使用泛型编程的时候,经常遇到“>>”被当作右移操作符,而不是模板参数的结尾.假如我们有如下代码: template <typename T& ...

  7. Cppcheck代码分析上

    1.检查点 1.自动变量检查: 返回自动变量(局部变量)指针: 2.越界检查:数组越界返回自动变量(局部变量)指针: 3.类检查:构造函数初始化: 4.内存泄露检查:  5.空指针检查: 6.废弃函数 ...

  8. PowerDesigner16 把设计图导出成图片

    1. 用鼠标选择要导出的对象,必须先选择. 2. 选择Edit—>Export Image 导出为你需要的格式图片,见下图:

  9. Freemarker <#list List/Map/Array[] as Object>

    http://blog.csdn.net/ani521smile/article/details/52164366 详细教程链接

  10. Bzoj4873 [SXOI2017]寿司餐厅

    Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 64  Solved: 45 Description Kiana最近喜欢到一家非常美味的寿司餐厅用餐.每 ...