zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Android 电话播号和短信发送以及单元测试
    Android 自动判断是电话,网址,EMAIL方法之Linkify
    Android 解析网络数据传输JSON或XML对象
    Android ListView常用属性及数据绑定显示
    Android SQLite使用详解
    Android Content Provider 使用
    SQL Server 2008之空间数据应用(二)
    使用ASP.NET IIS注册工具(Aspnet_regiis.exe)注册IIS
    MSDN(VS2010版)使用问题小记
    ArcGIS Server开发——Web ADF应用程序开发入门
  • 原文地址:https://www.cnblogs.com/Jokers/p/3568826.html
Copyright © 2011-2022 走看看