.net平台借助第三方推送服务在推送Android消息(极光推送)
最近做的.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平台不管
- <appSettings>
- <add key="ApiKey" value="**********"/>
- <add key="APIMasterSecret" value="*******"/>
- </appSettings>
2,读取配置中的值
- private readonly string ApiKey = "";
- private readonly string APIMasterSecret = "";
- ApiKey = ConfigurationManager.AppSettings["ApiKey"].ToString();//Android ApiKey
- APIMasterSecret = ConfigurationManager.AppSettings["APIMasterSecret"].ToString();//Android密码
3,开始推送方法

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

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

- /// <summary>
- /// MD5字符串
- /// </summary>
- /// <param name="paras">参数数组</param>
- /// <returns>MD5字符串</returns>
- public string GetMD5Str(params string [] paras)
- {
- string str = "";
- for(int i=0;i<paras.Length;i++)
- {
- str += paras[i];
- }
- byte[] buffer = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(str));
- string md5Str = string.Empty;
- for (int i = 0; i < buffer.Length; i++)
- {
- md5Str = md5Str + buffer[i].ToString("X2");
- }
- return md5Str;
- }

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

- /// <summary>
- /// Post方式请求获取返回值
- /// </summary>
- /// <param name="data"></param>
- /// <returns></returns>
- public string GetPostRequest(byte[] data)
- {
- HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("http://api.jpush.cn:8800/v2/push");
- myRequest.Method = "POST";//极光http请求方式为post
- myRequest.ContentType = "application/x-www-form-urlencoded";//按照极光的要求
- myRequest.ContentLength = data.Length;
- Stream newStream = myRequest.GetRequestStream();
- // Send the data.
- newStream.Write(data, 0, data.Length);
- newStream.Close();
- // Get response
- var response = (HttpWebResponse)myRequest.GetResponse();
- using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")))
- {
- string result = reader.ReadToEnd();
- reader.Close();
- response.Close();
- return result;
- }
- }

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

- public class JpushMsg
- {
- private string sendno;//编号
- public string Sendno
- {
- get { return sendno; }
- set { sendno = value; }
- }
- private string msg_id;//信息编号
- public string Msg_id
- {
- get { return msg_id; }
- set { msg_id = value; }
- }
- private string errcode;//返回码
- public string Errcode
- {
- get { return errcode; }
- set { errcode = value; }
- }
- private string errmsg;//错误信息
- public string Errmsg
- {
- get { return errmsg; }
- set { errmsg = value; }
- }
- }
.net平台借助第三方推送服务在推送Android消息(极光推送)的更多相关文章
- 【FAQ】HMS Core推送服务与本地创建通知消息如何相互覆盖?
我们知道,单独使用HMS Core推送服务或本地创建通知消息,都可以实现通知消息的覆盖,方式分别为: 1.本地创建通知消息(简称本地通知消息) 通过notificationManager.notify ...
- Android集成极光推送
要说学习极光推送,个人感觉官方文档就非常好啦,但是没法,人太懒啦,为了下次能够快速的将极光推送集成到项目中,故结合之前开发的项目和官方文档记录下简单的Android集成极光推送,在这之前,先上一张简单 ...
- .net平台借助第三方推送服务在推送Android,IOS消息(极光推送_V3版本)最新
最近刚从极光推送官网上看到V2版本要停用,不得不有重新写V3版本的.这里用到了 HTTP Basic Authentication http://www.cnblogs.com/pingming/p/ ...
- Android JPush(极光推送)的使用教程
首先进入官网https://www.jpush.cn/,先注册一个账号. 注册号以后,创建应用 1.点击右上角进入个人中心 2.点击创建应用 3.在创建应用界面输入自己项目的应用名和应用的包名,输入后 ...
- Xamarin.Forms学习系列之Android集成极光推送
一般App都会有消息推送的功能,如果是原生安卓或者IOS集成消息推送很容易,各大推送平台都有相关的Sample,但是关于Xamarin.Forms的消息推送集成的资料非常少,下面就说下Xamarin. ...
- Android JPush极光推送应用
JPush纠结了5-6个小时,一直报下面的错误,纠结! [AndroidUtil] AndroidManifest.xml missing required intent filter for Pus ...
- Android之极光推送发送自定义消息
Android端实现主要代码: <span style="font-size:14px;">import java.io.IOException; import jav ...
- android极光推送
版权声明:本文为博主原创文章,未经博主允许不得转载. Android开发记录18-集成推送服务的一点说明 关于推送服务,国内有很多选择,笔者也对它们进行了一个详细的对比,一般我们产品选择推送服务主要考 ...
- java SDK服务端推送 --极光推送(JPush)
网址:https://blog.csdn.net/duyusean/article/details/86581475 消息推送在APP应用中越来越普遍,来记录一下项目中用到的一种推送方式,对于Andr ...
随机推荐
- 删除 list 集合中的元素
删除 list 集合中的元素,当删除的元素有多个的时候,只能使用迭代器来删除. 当删除 list 集合中的元素只有一个的时候,有三种方法都可以实现. import java.util.ArrayLis ...
- disconf-client-for-java
一.disconf客户端部署 disconf目前仅支持java客户端,下文针对java客户端安装作为整理,记录下安装部署的步骤 1.环境依赖 首先需要安装java环境及maven环境,不再过多介绍 2 ...
- Docker入门到实战
1.系统要求 Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10. CentOS 7满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存 ...
- 利用linux判断elf文件是64位还是32位
readelf 命令,参数为-h 例如 文件名为python >>>readelf -h python 得到的是ELF Header中的项Magic 第五个数 02时为64位,01时 ...
- Redis学习篇(一)之String类型及其操作
SET 作用: 设置key对应的值, 返回ok 语法: SET key value [EX seconds] [PX milliseconds] [NX] [XX] 如果key已经存在,同名会产生覆盖 ...
- FastReport.Net使用:[28]数据合并
基础数据 1.拖动数据源中的数据列到报表设计器中,获得一张简单的报表. 2.下面使用两种方法将期中考试和期末考试的成绩合并到一行显示 合并数据(分组方法) 1.按学生名字和科目来进行分组,成绩文本框咱 ...
- 【BZOJ 3534】 3534: [Sdoi2014]重建 (Matrix-Tree Theorem)
3534: [Sdoi2014]重建 Time Limit: 10 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 709 Solved: 32 ...
- 【BZOJ 4305】 4305: 数列的GCD (数论)
4305: 数列的GCD Description 给出一个长度为N的数列{a[n]},1<=a[i]<=M(1<=i<=N). 现在问题是,对于1到M的每个整数d,有多少个不 ...
- 一个安卓应用 多少个 dalvik 虚拟机
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 一个
- bzoj 3437: 小P的牧场 -- 斜率优化
3437: 小P的牧场 Time Limit: 10 Sec Memory Limit: 128 MB Description 小P在MC里有n个牧场,自西向东呈一字形排列(自西向东用1…n编号), ...