从asp.net webservice推送android的通知 [英] Push notification for android from asp.net webservice

查看:76
本文介绍了从asp.net webservice推送android的通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请帮助我,我有一个问题是从ASP.NET webservice(VB.NET)推送android的通知。

这是我的代码。

Please help me, I have a problem to push notification for android from ASP.NET webservice (VB.NET).
this is my code.

Public sApplicationID As String = "YYY....ZZZ"
Public sSENDER_ID As String = "222...555"

<WebMethod()> _
Public Function SendMessage(ByVal RegistrationID As String, ByVal Message As String) As String
        Dim regid As String = RegistrationID
        Dim tRequest As WebRequest
        tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send")
        tRequest.Method = "post"
        'tRequest.ContentType = " application/json"
        tRequest.ContentType = " application/x-www-form-urlencoded"
        tRequest.Headers.Add(String.Format("Authorization: key={0}", sApplicationID))

        tRequest.Headers.Add(String.Format("Sender: id={0}", sSENDER_ID))

        Dim postData As String = "{""collapse_key"":""score_update"",""time_to_live"":108,""delay_while_idle"":1,""data"":{""message"":""" & Convert.ToString(Message) & """,""time"":""" & System.DateTime.Now.ToString() & """},""registration_ids"":" & regid & "}"
        Console.WriteLine(postData)
        Dim byteArray As [Byte]() = Encoding.UTF8.GetBytes(postData)
        tRequest.ContentLength = byteArray.Length

        Dim dataStream As Stream = tRequest.GetRequestStream()
        dataStream.Write(byteArray, 0, byteArray.Length)
        dataStream.Close()

        Dim tResponse As WebResponse = tRequest.GetResponse()

        dataStream = tResponse.GetResponseStream()

        Dim tReader As New StreamReader(dataStream)

        Dim sResponseFromServer As [String] = tReader.ReadToEnd()

        tReader.Close()
        dataStream.Close()
        tResponse.Close()

        Return sResponseFromServer
    End Function

< br $> b $ b



我正在测试这项服务,但我总是收到错误消息




I was testing this service but I always getting error message

System.Net.WebException: The remote server returned an error: (401) Unauthorized.
at System.Net.HttpWebRequest.GetResponse()





请帮助我..



Please Help me..

推荐答案

这对我来说在C#



This worked for me in C#

using System;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Text;

namespace ENSource.Infrastructure
{
    public static class AndroidGCM
    {
        public static string SendGCMNotification(string apiKey, string postData, string postDataContentType = "application/json")
        {
            //Delegate Modeling to Validate Server Certificate
            ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(ValidateServerCertificate);           
            
            //MESSAGE CONTENT
            byte[] byteArray = Encoding.UTF8.GetBytes(postData);
            
            //CREATE REQUEST
            HttpWebRequest Request = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send");
            Request.Method = "POST";
            Request.KeepAlive = false;
            Request.ContentType = postDataContentType;
            Request.Headers.Add(HttpRequestHeader.Authorization, string.Format("key={0}", apiKey));
            Request.ContentLength = byteArray.Length;

            //Create Stream to Write Byte Array
            Stream dataStream = Request.GetRequestStream();
            dataStream.Write(byteArray, 0, byteArray.Length);
            dataStream.Close();

            try
            {
                //Post a Message
                WebResponse Response = Request.GetResponse();

                //Check the response status
                HttpStatusCode ResponseCode = ((HttpWebResponse)Response).StatusCode;

                string errorMessage = string.Empty;
                if (ResponseCode.Equals(HttpStatusCode.Unauthorized) || ResponseCode.Equals(HttpStatusCode.Forbidden))
                {
                    errorMessage = "Unauthorized - need new token";

                }
                else if (!ResponseCode.Equals(HttpStatusCode.OK))
                {
                    errorMessage = "Response from web service isn't OK";
                }

                StreamReader Reader = new StreamReader(Response.GetResponseStream());
                string responseLine = Reader.ReadToEnd();
                Reader.Close();

                return responseLine;
            }
            catch (Exception e)
            {
                return "error";
            }            
        }

        public static bool ValidateServerCertificate(

                                                   object sender,

                                                  X509Certificate certificate,

                                                  X509Chain chain,

                                                   SslPolicyErrors sslPolicyErrors)
        {

            return true;

        }
    }    
}





您可以在




You can use it as under

/*

GCM gcm = new GCM();

            var applicationID = "******wdVY8xs";
            string deviceId = "A*****EAsEDth";
            string message = "hey ,some text message";
            string tickerText = "example test GCM";
            string contentTitle = "content title GCM";
            string postData =
            "{ \"registration_ids\": [ \"" + deviceId + "\" ], " +
              "\"data\": {\"tickerText\":\"" + tickerText + "\", " +
                         "\"contentTitle\":\"" + contentTitle + "\", " +
                         "\"message\": \"" + message + "\"}}";

            var X = gcm.SendGCMNotification(applicationID, postData);
*/





您可以使用一些在线转换器将上述C#代码转换为VB.net。

希望这有助于



You can convert the above C# code to VB.net by using some online convertor.
Hope this helps


这篇关于从asp.net webservice推送android的通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆