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

原文地址:https://www.cnblogs.com/Jokers/p/3568826.html