Phonegap 极光推送api 服务器端推送代码

.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; //总是接受    

    }

}
View Code

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;

    }  

}
View Code

然后调用方法即可。

至于服务器接收代码,因为直接使用的极光上下载的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);

    }



}
View Code

 

参考资料:http://hi.baidu.com/taobao458/item/4ec606f34f169156c9f33781

你可能感兴趣的:(PhoneGap)