.net 版本 极光推送 后台接口
HttpWebResponseUtility类
using System; using System.Collections.Generic; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using System.Net; using System.IO; using System.IO.Compression; using System.Text.RegularExpressions; /// <summary> /// HttpWebResponseUtility 的摘要说明 /// </summary> public class HttpWebResponseUtility { /// <summary> /// 创建POST方式的HTTP请求 /// </summary> /// <param name="url">请求的URL</param> /// <param name="parameters">随同请求POST的参数名称及参数值字典</param> /// <param name="timeout">请求的超时时间</param> /// <param name="userAgent">请求的客户端浏览器信息,可以为空</param> /// <param name="requestEncoding">发送HTTP请求时所用的编码</param> /// <param name="cookies">随同HTTP请求发送的Cookie信息,如果不需要身份验证可以为空</param> /// <returns></returns> public static HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int? timeout, string userAgent, Encoding requestEncoding, CookieCollection cookies) { if (string.IsNullOrEmpty(url)) { throw new ArgumentNullException("url"); } if (requestEncoding == null) { throw new ArgumentNullException("requestEncoding"); } HttpWebRequest request = null; //如果是发送HTTPS请求 if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase)) { ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult); request = WebRequest.Create(url) as HttpWebRequest; request.ProtocolVersion = HttpVersion.Version10; } else { request = WebRequest.Create(url) as HttpWebRequest; } request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; //如果需要POST数据 if (!(parameters == null || parameters.Count == 0)) { StringBuilder buffer = new StringBuilder(); int i = 0; foreach (string key in parameters.Keys) { if (i > 0) { buffer.AppendFormat("&{0}={1}", key, parameters[key]); } else { buffer.AppendFormat("{0}={1}", key, parameters[key]); } i++; } byte[] data = Encoding.UTF8.GetBytes(buffer.ToString()); using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); } } return request.GetResponse() as HttpWebResponse; } private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) { return true; //总是接受 } }
webservice类
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Services; using System.Data.SqlClient; using System.Data; using Newtonsoft.Json; using System.Web.Script.Serialization; using System.Net; using System.IO; using System.Text; using System.IO.Compression; /// <summary> ///WebService 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] //若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。 [System.Web.Script.Services.ScriptService] public class WebService : System.Web.Services.WebService { public WebService () { //如果使用设计的组件,请取消注释以下行 //InitializeComponent(); } [WebMethod] public string HelloWorld() { return "Hello World"; } public static string MD5Encrypt(string strSource) { return MD5Encrypt(strSource, 32); } /// <summary> /// </summary> /// <param name="strSource">待加密字串</param> /// <param name="length">16或32值之一,其它则采用.net默认MD5加密算法</param> /// <returns>加密后的字串</returns> public static string MD5Encrypt(string strSource, int length) { byte[] bytes = Encoding.ASCII.GetBytes(strSource); byte[] hashValue = ((System.Security.Cryptography.HashAlgorithm)System.Security.Cryptography.CryptoConfig.CreateFromName("MD5")).ComputeHash(bytes); StringBuilder sb = new StringBuilder(); switch (length) { case 16: for (int i = 4; i < 12; i++) sb.Append(hashValue[i].ToString("x2")); break; case 32: for (int i = 0; i < 16; i++) { sb.Append(hashValue[i].ToString("x2")); } break; default: for (int i = 0; i < hashValue.Length; i++) { sb.Append(hashValue[i].ToString("x2")); } break; } return sb.ToString(); } [WebMethod(Description = "极光发送信息")] public string doSend() { IDictionary<string, string> parameters = new Dictionary<string, string>(); string html = string.Empty; int sendno = 1; string receiverValue = "!!!!!!!!!";//这个是一个别名 int receiverType = 4; string appkeys = "ca9e556875921e4f5d9abdc6";//appkey String input = sendno.ToString() + receiverType + "" + "fa618664993ec1b9707cdef4";//market key string verificationCode = MD5Encrypt(input); string content = "{\"n_title\":\"" + "测试测试" + "\",\"n_content\":\"" + "推送新消息" + "\",\"n_builder_id\":\"1\",\"n_extras\":{\"nid\":\"" + 240 + "\"}}"; //发送的文本 string loginUrl = "http://api.jpush.cn:8800/sendmsg/v2/sendmsg"; parameters.Add("sendno", sendno.ToString()); parameters.Add("app_key", appkeys); parameters.Add("receiver_type", receiverType.ToString()); parameters.Add("verification_code", verificationCode); //MD5 parameters.Add("msg_type", "1"); parameters.Add("msg_content", content); //内容 parameters.Add("platform", "android,ios"); HttpWebResponse response = HttpWebResponseUtility.CreatePostHttpResponse(loginUrl, parameters, null, null, Encoding.UTF8, null); if (response != null) { // 得到返回的数据流 Stream receiveStream = response.GetResponseStream(); // 如果有压缩,则进行解压 if (response.ContentEncoding.ToLower().Contains("gzip")) { receiveStream = new GZipStream(receiveStream, CompressionMode.Decompress); } // 得到返回的字符串 html = new StreamReader(receiveStream).ReadToEnd(); } return html; } }
然后调用方法即可。
至于服务器接收代码,因为直接使用的极光上下载的3分钟demo所以直接使用的demo中的接收方法。不用修改任何代码手机端即可接收信息。
如果希望接收到消息之后能打开到对应的页面,则修改TestActivy.java代码如下:【代码未优化~无用的没删除】
package com.example.jpushdemo; import org.apache.cordova.DroidGap; import org.json.JSONArray; import org.json.JSONObject; import cn.jpush.android.api.JPushInterface; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.ViewGroup.LayoutParams; import android.widget.TextView; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class TestActivity extends DroidGap { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv = new TextView(this); tv.setText("用户自定义打开的Activity"); Intent intent = getIntent(); String path = ""; if (null != intent) { Bundle bundle = getIntent().getExtras(); String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); String content = bundle.getString(JPushInterface.EXTRA_ALERT); String extreaterjson = bundle.getString(JPushInterface.EXTRA_EXTRA); int index = extreaterjson.indexOf(":"); String result = extreaterjson.substring(index+2, extreaterjson.length()-2); tv.setText("Title : " + title + " " + "Content : " + content+" 附加字段:"+result); path="file:///android_asset/www/blog-single.html?nid="+result; } addContentView(tv, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); super.loadUrl(path); } }
参考资料:http://hi.baidu.com/taobao458/item/4ec606f34f169156c9f33781