最近做的.net项目(Windows Service)需要向Android手机发送推送消息,真是有点困难,没有搞过就不停的搜文档,最后看到了一个开源项目PushSharp,可以在.net平台推送IOS,Android,Windows Phone等设备消息,大喜,然后先做了IOS的,成功了,但是做Android的时候遇到了问题,一直推送不成功,程序执行了,但是推送一直出不来,后来费劲的在网上搜,没有找到,最后放弃使用这种推送Android,另寻出路,随后找到了一种C2DM云端推送功能,但是问题又出现了,(1)C2DM内置于Android的2.2系统上,无法兼容老的1.6到2.1系统;(2)C2DM需要依赖于Google官方提供的C2DM服务器,由于国内的网络环境,这个服务经常不可用,如果想要很好的使用,我们的App Server必须也在国外,这个恐怕不是每个开发者都能够实现的;(3)不像在iPhone中,他们把硬件系统集成在一块了。所以对于我们开发者来说,如果要在我们的应用程序中使用C2DM的推送功能,因为对于不同的这种硬件厂商平台,比如摩托罗拉、华为、中兴做一个手机,他们可能会把Google的这种服务去掉,尤其像在国内就很多这种,把Google这种原生的服务去掉。买了一些像什么山寨机或者是华为这种国产机,可能Google的服务就没有了。而像在国外出的那些可能会内置。没办法了,最后转到了第三方推送服务平台,极光推送,下面将介绍怎么使用极光推送。

1,首先需要将你的app在极光官网上进行注册,获取一个ApiKey,一个APIMasterSecret(密码),将这两个值保存在配置文件(app/web.config)中,具体手机开发端需要做什么操作我们.net平台不管

  1. <appSettings>
  2. <add key="ApiKey" value="**********"/>
  3. <add key="APIMasterSecret" value="*******"/>
  4. </appSettings>

2,读取配置中的值

  1. private readonly string ApiKey = "";
  2. private readonly string APIMasterSecret = "";
  3. ApiKey = ConfigurationManager.AppSettings["ApiKey"].ToString();//Android ApiKey
  4. APIMasterSecret = ConfigurationManager.AppSettings["APIMasterSecret"].ToString();//Android密码

3,开始推送方法

  1. /// <summary>
  2. /// Android极光推送
  3. /// </summary>
  4. /// <param name="RegistrationID">设备号</param>
  5. public void PushAndroid(string RegistrationID)
  6. {
  7. try
  8. {
  9. Random ran = new Random();
  10. int sendno = ran.Next(1, 2100000000);//随机生成的一个编号
  11. string app_key = ApiKey;
  12. string masterSecret = APIMasterSecret;
  13. int receiver_type = 5;//接收者类型。2、指定的 tag。3、指定的 alias。4、广播:对 app_key 下的所有用户推送消息。5、根据 RegistrationID 进行推送。当前只是 Android SDK r1.6.0 版本支持
  14. string receiver_value = RegistrationID;
  15.  
  16. int msg_type = 1;//1、通知2、自定义消息(只有 Android 支持)
  17. string msg_content = "{\"n_builder_id\":\"00\",\"n_title\":\"" + Title + "\",\"n_content\":\"" + Content + "\"}";//消息内容
  18. string platform = "android";//目标用户终端手机的平台类型,如: android, ios 多个请使用逗号分隔。
  19. string verification_code = GetMD5Str(sendno.ToString(), receiver_type.ToString(), receiver_value,masterSecret);//验证串,用于校验发送的合法性。MD5
  20. string postData = "sendno=" + sendno;
  21. postData += ("&app_key=" + app_key);
  22. postData += ("&masterSecret=" + masterSecret);
  23. postData += ("&receiver_type=" + receiver_type);
  24. postData += ("&receiver_value=" + receiver_value);
  25. postData += ("&msg_type=" + msg_type);
  26. postData += ("&msg_content=" + msg_content);
  27. postData += ("&platform=" + platform);
  28. postData += ("&verification_code=" + verification_code);
  29.  
  30. //byte[] data = encoding.GetBytes(postData);
  31. byte[] data = Encoding.UTF8.GetBytes(postData);
  32. string resCode = GetPostRequest(data);//调用极光的接口获取返回值
  33. JpushMsg msg = Newtonsoft.Json.JsonConvert.DeserializeObject<JpushMsg>(resCode);//定义一个JpushMsg类,包含返回值信息,将返回的json格式字符串转成JpushMsg对象
  34. }
  35. catch (Exception ex)
  36. {
  37.  
  38. }
  39. }

4,MD5加密验证字符串,用于调用接口的时候,极光将做验证使用

  1. /// <summary>
  2. /// MD5字符串
  3. /// </summary>
  4. /// <param name="paras">参数数组</param>
  5. /// <returns>MD5字符串</returns>
  6. public string GetMD5Str(params string [] paras)
  7. {
  8. string str = "";
  9. for(int i=0;i<paras.Length;i++)
  10. {
  11. str += paras[i];
  12. }
  13. byte[] buffer = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(str));
  14. string md5Str = string.Empty;
  15. for (int i = 0; i < buffer.Length; i++)
  16. {
  17. md5Str = md5Str + buffer[i].ToString("X2");
  18. }
  19. return md5Str;
  20. }

5,http Post方式调用极光的推送服务

  1. /// <summary>
  2. /// Post方式请求获取返回值
  3. /// </summary>
  4. /// <param name="data"></param>
  5. /// <returns></returns>
  6. public string GetPostRequest(byte[] data)
  7. {
  8. HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://api.jpush.cn:8800/v2/push");
  9.  
  10. myRequest.Method = "POST";//极光http请求方式为post
  11. myRequest.ContentType = "application/x-www-form-urlencoded";//按照极光的要求
  12. myRequest.ContentLength = data.Length;
  13. Stream newStream = myRequest.GetRequestStream();
  14.  
  15. // Send the data.
  16. newStream.Write(data, 0, data.Length);
  17. newStream.Close();
  18.  
  19. // Get response
  20. var response = (HttpWebResponse)myRequest.GetResponse();
  21. using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")))
  22. {
  23. string result = reader.ReadToEnd();
  24. reader.Close();
  25. response.Close();
  26. return result;
  27. }
  28. }

6,定义一个类,接收返回值

  1. public class JpushMsg
  2. {
  3. private string sendno;//编号
  4.  
  5. public string Sendno
  6. {
  7. get { return sendno; }
  8. set { sendno = value; }
  9. }
  10. private string msg_id;//信息编号
  11.  
  12. public string Msg_id
  13. {
  14. get { return msg_id; }
  15. set { msg_id = value; }
  16. }
  17. private string errcode;//返回码
  18.  
  19. public string Errcode
  20. {
  21. get { return errcode; }
  22. set { errcode = value; }
  23. }
  24. private string errmsg;//错误信息
  25.  
  26. public string Errmsg
  27. {
  28. get { return errmsg; }
  29. set { errmsg = value; }
  30. }
  31. }

.net平台借助第三方推送服务在推送Android消息(极光推送)的更多相关文章

  1. 【FAQ】HMS Core推送服务与本地创建通知消息如何相互覆盖?

    我们知道,单独使用HMS Core推送服务或本地创建通知消息,都可以实现通知消息的覆盖,方式分别为: 1.本地创建通知消息(简称本地通知消息) 通过notificationManager.notify ...

  2. Android集成极光推送

    要说学习极光推送,个人感觉官方文档就非常好啦,但是没法,人太懒啦,为了下次能够快速的将极光推送集成到项目中,故结合之前开发的项目和官方文档记录下简单的Android集成极光推送,在这之前,先上一张简单 ...

  3. .net平台借助第三方推送服务在推送Android,IOS消息(极光推送_V3版本)最新

    最近刚从极光推送官网上看到V2版本要停用,不得不有重新写V3版本的.这里用到了 HTTP Basic Authentication http://www.cnblogs.com/pingming/p/ ...

  4. Android JPush(极光推送)的使用教程

    首先进入官网https://www.jpush.cn/,先注册一个账号. 注册号以后,创建应用 1.点击右上角进入个人中心 2.点击创建应用 3.在创建应用界面输入自己项目的应用名和应用的包名,输入后 ...

  5. Xamarin.Forms学习系列之Android集成极光推送

    一般App都会有消息推送的功能,如果是原生安卓或者IOS集成消息推送很容易,各大推送平台都有相关的Sample,但是关于Xamarin.Forms的消息推送集成的资料非常少,下面就说下Xamarin. ...

  6. Android JPush极光推送应用

    JPush纠结了5-6个小时,一直报下面的错误,纠结! [AndroidUtil] AndroidManifest.xml missing required intent filter for Pus ...

  7. Android之极光推送发送自定义消息

    Android端实现主要代码: <span style="font-size:14px;">import java.io.IOException; import jav ...

  8. android极光推送

    版权声明:本文为博主原创文章,未经博主允许不得转载. Android开发记录18-集成推送服务的一点说明 关于推送服务,国内有很多选择,笔者也对它们进行了一个详细的对比,一般我们产品选择推送服务主要考 ...

  9. java SDK服务端推送 --极光推送(JPush)

    网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...

随机推荐

  1. 删除 list 集合中的元素

    删除 list 集合中的元素,当删除的元素有多个的时候,只能使用迭代器来删除. 当删除 list 集合中的元素只有一个的时候,有三种方法都可以实现. import java.util.ArrayLis ...

  2. disconf-client-for-java

    一.disconf客户端部署 disconf目前仅支持java客户端,下文针对java客户端安装作为整理,记录下安装部署的步骤 1.环境依赖 首先需要安装java环境及maven环境,不再过多介绍 2 ...

  3. Docker入门到实战

    1.系统要求 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10. CentOS 7满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存 ...

  4. 利用linux判断elf文件是64位还是32位

    readelf 命令,参数为-h 例如 文件名为python >>>readelf -h python 得到的是ELF Header中的项Magic 第五个数 02时为64位,01时 ...

  5. Redis学习篇(一)之String类型及其操作

    SET 作用: 设置key对应的值, 返回ok 语法: SET key value [EX seconds] [PX milliseconds] [NX] [XX] 如果key已经存在,同名会产生覆盖 ...

  6. FastReport.Net使用:[28]数据合并

    基础数据 1.拖动数据源中的数据列到报表设计器中,获得一张简单的报表. 2.下面使用两种方法将期中考试和期末考试的成绩合并到一行显示 合并数据(分组方法) 1.按学生名字和科目来进行分组,成绩文本框咱 ...

  7. 【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)

    3534: [Sdoi2014]重建 Time Limit: 10 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 709  Solved: 32 ...

  8. 【BZOJ 4305】 4305: 数列的GCD (数论)

    4305: 数列的GCD Description 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N).  现在问题是,对于1到M的每个整数d,有多少个不 ...

  9. 一个安卓应用 多少个 dalvik 虚拟机

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 一个

  10. bzoj 3437: 小P的牧场 -- 斜率优化

    3437: 小P的牧场 Time Limit: 10 Sec  Memory Limit: 128 MB Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号), ...