程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> .net平台借助第三方推送服務在推送Android消息(極光推送),.netandroid

.net平台借助第三方推送服務在推送Android消息(極光推送),.netandroid

編輯:C#入門知識

.net平台借助第三方推送服務在推送Android消息(極光推送),.netandroid


最近做的.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 + "\"}";//消息內容
                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;
            }
        }
復制代碼

6,定義一個類,接收返回值

復制代碼
public class JpushMsg
    {
        private string sendno;//編號

        public string Sendno
        {
            get { return sendno; }
            set { sendno = value; }
        }
        private string msg_id;//信息編號

        public string Msg_id
        {
            get { return msg_id; }
            set { msg_id = value; }
        }
        private string errcode;//返回碼

        public string Errcode
        {
            get { return errcode; }
            set { errcode = value; }
        }
        private string errmsg;//錯誤信息

        public string Errmsg
        {
            get { return errmsg; }
            set { errmsg = value; }
        }
    }

android push推送的問題

不知道具體用的那種推送,
不過,如果你要使用的話,有兩種途徑
使用一些公司提供的推送服務,比如極光,百度的,
自己搭建推送服務器,使用的技術有xmpp,mqtt。。
比較起來,第一種使用起來方便,繼承人家開放的sdk,就能使用,但是服務端是在極光百度的,必須要連接到外網才能使用。
第二種,實現起來比較難,也比較復雜。但是局限性小,服務端自己控制,穩定性也較高

 

android消息推送平台(server+client)

還是用第三方的吧,比如極光推送,百度推送
自己做的沒有第三方的快
如果自己做的話,不妨看看XMPP
而且自己做的後台服務要基於時鐘
比如做個HTTP的輪詢
或者socket
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved