从.net项目(Windows Service)向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 + "\"}";//消息内容
		// 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/
                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;
            }
        }

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
, 获取系统platform文件
, string
, 字符串
, 手机app接口开发
, 推送
, 消息
, 第三方推送
, android消息推送
, 消息推送的问题
, 极光推送 alertview
, 极光api 安卓消息推送
, 手机短信推送
, 极光推送api
推送android
webservice 消息推送、windows 消息推送、windows 发送消息、windows发送消息命令、c 发送windows消息,以便于您获取更多的相关知识。

时间: 2024-11-01 19:21:09

从.net项目(Windows Service)向Android手机发送推送消息的相关文章

解决方案-java web项目,想实现从手机端浏览器向PC端推送消息。

问题描述 java web项目,想实现从手机端浏览器向PC端推送消息. 要求:实现微信浏览器中向PC端推送消息. 我用DWR在PC端能实现推送消息,但是在手机端浏览器中没有任何效果,不知道是我弄错了还是说DWR本身的原因. 问题:请问哪位大神能够给出一套可行的解决方案? 解决方案 服务器主动向android手机端推送消息---------Linux下实现使用js判断手机端和pc端浏览器内核 解决方案二: 借助服务器中转,你把数据推送到服务器,服务器在送到客户端. 解决方案三: GoEasyWeb

禁用Wi-Fi是否可以阻止Android手机发送无线帧?

本文讲的是禁用Wi-Fi是否可以阻止Android手机发送无线帧?, 前言 移动智能手机发出的Wi-Fi信号可以被某些机构和别有用心的人利用,跟踪用户的移动行为,所以你如果关闭移动设备的Wi-Fi接口则意味着你不想被人发现. Android系统具有设置启用或禁用Wi-Fi功能的选项,然而,你以为只要通过禁用Wi-Fi选项就足以阻止你手机的所有Wi-Fi活动吗?大错特错.为此,我还专门进行了一些测试,以验证这种说法的准确性. Android手机的Wi-Fi配置 Android手机的Wi-Fi扫描

Android顶栏定时推送消息_Android

在用安卓设备时,经常会应用到弹出推送消息.下面在此把我之前写的推送代码分享给大家,供大家参考,有不同见解的朋友欢迎提出,共同学习进步! 最近搜索看这个的朋友比较多.这个也只是单独的内置推送.时时推送与服务器关联 我们可以用SDK云推送来实现我们所需的需求.相关介绍内容.往下移! 首先XML <!-- 安卓推送服务 --> <service android:name=".MessageService" android:enabled="true" a

Android顶栏定时推送消息

在用安卓设备时,经常会应用到弹出推送消息.下面在此把我之前写的推送代码分享给大家,供大家参考,有不同见解的朋友欢迎提出,共同学习进步! 最近搜索看这个的朋友比较多.这个也只是单独的内置推送.时时推送与服务器关联 我们可以用SDK云推送来实现我们所需的需求.相关介绍内容.往下移! 首先XML <!-- 安卓推送服务 --> <service android:name=".MessageService" android:enabled="true" a

Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSDK分享组件的,奈何需要去注册各平台的账号,还要审核,有些审核还挺久,就没办法,改为写这个Bmob了,相信大家对Bmob都是挺期待的吧,因为他作为Android后端的实现很好的支持,国内很多软件都在使用它,他的功能也是特别神奇,这里就不一一细说了,我们用实际的例子来见证他的神奇 官网:http://w

Android不同应用如何筛选服务器推送消息?

问题描述 Android不同应用如何筛选服务器推送消息? 现在我们自己建一个推送系统.客户端可以通过推送接收到服务器端的消息.而我有多个客户端应用要使用这个系统,为了节约服务器资源,我们想一个手机和服务器建立一条链接,避免资源的浪费.你有什么办法解决这个问题?会使用哪些技术? 解决方案 可以参照_极光推送_的一些机制. 每个客户端与服务器连接的时候可以绑定一个**标签(Tag)**或者**设备别名(Alias)**或者**唯一标识(Registration ID)**. 这样服务器就可以 1.

重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知

原文:重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 [源码下载] 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 推送通知 示例1.客户端BackgroundTask/PushNotification.xaml <Page x:Class="XamlDemo.BackgroundTask.PushNotificatio

在 ubuntu 下使用 Pushbullet Indicator 向 Android/iOS 设备推送文件

在 ubuntu 下使用 Pushbullet Indicator 向 Android/iOS 设备推送文件 Pushbullet是一款iOS和Android设备与桌面系统互相传输文件.链接.图片的APP应用,Pushbullet可以在任何装有Firefox或Chrome 浏览器的操作系统上安装使用. 如果你不是浏览器扩展插件的粉丝,却依然想使用桌面应用Pushbullet in Ubuntu 14.04的话,你可以使用由 Atareao开发 的Pushbullet Indicator. Pus

Android重启服务后收不到推送消息

杀掉Android app后,服务会重启,但是还是收不到推送消息. 为什么呢? 因为重启service 后,intent为null 见类com\shop\services\MQTTService.Java  源码见附件   参考:http://hw1287789687.iteye.com/blog/2070552