stefanzan分享 http://blog.sciencenet.cn/u/stefanzan

博文

c#中调用友盟推送API实例

已有 3268 次阅读 2015-6-12 07:03 |个人分类:c#|系统分类:博客资讯

最近因为一个项目使用友盟推送,在网上一番查找,相关文章很少,最贴切的贴出源代码的仅有来自友盟的BBS社区 (http://bbs.umeng.com/forum.php?mod=viewthread&tid=6324),因此参照此代码改写。不过,里面使用的Json Serilization 实在是有点过于绕弯子了,而且会多次转义。因此我贴出一个简化版,希望能让接下来的人少走点弯路。


改进部分:构造JSON,并序列化为String。

附: 原推送代码网址



具体代码如下:



   public string umeng_send_noti(string[] tokens, string title, string message)

       {

           int timestamp = ConvertDateTimeInt(DateTime.Now);

           string validationToken = GetMD5(appkey + master_secrete + timestamp.ToString());

           var payload = new

           {

               display_type = "notification",

               body = new

               {

                   ticker = title,

                   title = title,

                   text = message,

                   after_open = "go_app"

               }

           };


           var send_data = new

           {

               appkey = appkey,

               timestamp = timestamp,

               validation_token = validationToken,

               type = "listcast",

               device_tokens = string.Join(",", tokens),

               payload = payload

           };

           var send_data_json_string = ServiceStack.Text.JsonSerializer.SerializeToString(send_data, send_data.GetType());

           var result = HttpPost(api_send_url, send_data_json_string);

           return result;

       }

 


   private   string HttpPost(string Url, string postDataStr)

       {

           System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(Url);

           request.Method = "POST";

           //   request.ContentType = "application/json";

           //  request.Headers.Set("Pragma", "no-cache");

           byte[] postdata = Encoding.UTF8.GetBytes(postDataStr);

           request.ContentLength = postdata.Length;

           using (Stream reqStream = request.GetRequestStream())

           {

               reqStream.Write(postdata, 0, postdata.Length);

               reqStream.Close();

           }

       try

       {

           System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();

           Stream myResponseStream = response.GetResponseStream();

           StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));

           string retString = myStreamReader.ReadToEnd();

           myStreamReader.Close();

           myResponseStream.Close();

           return retString;

       }

       catch (System.Net.WebException ex)

           {

               System.Net.HttpWebResponse res = (System.Net.HttpWebResponse)ex.Response;

               Stream myResponseStream = res.GetResponseStream();

               StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));

               string retString = myStreamReader.ReadToEnd();

               throw ex;

           }

       }


       /// <summary>

       /// DateTime时间格式转换为Unix时间戳格式

       /// </summary>

       /// <param name="time"> DateTime时间格式</param>

       /// <returns>Unix时间戳格式</returns>

       public static int ConvertDateTimeInt(System.DateTime time)

       {

           System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));

           return (int)(time - startTime).TotalSeconds;

       }


       /// 计算MD5

       /// </summary>

       /// <param name="s"></param>

       /// <returns></returns>

       public string GetMD5(String s)

       {

           if (string.IsNullOrEmpty(s)) return "";

           System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

           byte[] bytes = System.Text.Encoding.UTF8.GetBytes(s);

           bytes = md5.ComputeHash(bytes);

           md5.Clear();

           StringBuilder strReturn = new StringBuilder();

           for (int i = 0; i < bytes.Length; i++)

           {

               strReturn.Append(Convert.ToString(bytes[i], 16).PadLeft(2, '0'));

           }

           return strReturn.ToString().PadLeft(32, '0');

       }




https://blog.sciencenet.cn/blog-811611-897343.html

上一篇:测试敏感词
下一篇:个人网站搭建
收藏 IP: 136.187.81.*| 热度|

1 yangb919

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-9-27 15:30

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部