在ASP.NET Web服务中推送Android和iPhone的通知 [英] Push Notification for Android and iPhone in ASP.NET Web Service

查看:68
本文介绍了在ASP.NET Web服务中推送Android和iPhone的通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,



我们如何在ASP.NET Web服务中为Android和iPhone发送推送通知。



我必须遵循的步骤和所有设置是什么?



谢谢

解决方案

< blockquote>对于Android:



public void Notify(string regId)

{

var applicationID =Application从谷歌帐户生成的ID来到这里;

var result =;

var SENDER_ID =您将从谷歌帐户获得的12位数字;

var httpWebRequest =(HttpWebRequest)WebRequest.Create(https://android.googleapis.com/gcm/send);

httpWebRequest.ContentType =application / json;

httpWebRequest.Method =POST;

httpWebRequest.Headers.Add(string.Format(Authorization:key = {0},applicationID));

httpWebRequest.Headers.Add(string.Format(Sender:key = {0} ,SENDER_ID));

使用(var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))

{

string json ={ \registration_ids\:[\+ regId +\],+\data \:{\message \:\您的消息文本将会到来这里...... \}};

Console.WriteLine(json);

streamWriter.Write(json);

streamWriter。 Flush();

streamWriter.Close();



var httpResponse =(HttpWebResponse)httpWebRequest.GetResponse();

使用(var streamReader = new StreamReader(httpResponse.GetResponseStream()))

{

result = streamReader.ReadToEnd();

}

}

}

--------------------- -------------------------------------------------- ---------------

For iPhone:



public void pushMessage(string deviceID)

{

int port = 2195;

String hostname =gateway.sandbox.push.apple.com;



String certificatePath = HttpContext.Current.Server.MapPath(CertificateNameCommeshere。 P12\" );

X509Certificate2 clientCertificate = new X509Certificate2(System.IO.File.ReadAllBytes(certificatePath),PasswordofCertificateComeshere);

X509Certificate2Collection certificatesCollection = new X509Certificate2Collection(clientCertificate);



TcpClient client = new TcpClient(hostname,port);

SslStream sslStream = new SslStream(client.GetStream(),false,new RemoteCertificateValidationCallback(ValidateServerCertificate) ),null);



尝试

{

sslStream.AuthenticateAsClient(hostname,certificatesCollection,SslProtocols.Ssl3 ,false);

MemoryStream memoryStream = new MemoryStream();

BinaryWriter writer = new BinaryWriter(memoryStream);

writer.Write((字节)0);

writer.Write((byte)0);

writer.Write((byte)32);



writer.Write(HexStringToByteArray(deviceID.ToUpper()));

String payload ={\aps \:{\alert \:\+你的消息文本会来这里..+\,\\ \\badge \:1,\sound \:\default \}};

writer.Write((byte)0);

writer.Write((byte)payload.Length);

byte [] b1 = System.Text.Encoding.UTF8.GetBytes(payload);

writer.Write(b1);

writer.Flush();

byte [] array = memoryStream.ToArray();

sslStream。写(数组);

sslStream.Flush();

client.Close();

}

catch(System.Security.Authentication.AuthenticationException ex)

{

client.Close();

}

catch(例外e)

{

client.Close();

}

}



我得到了这些解决方案..


执行上述方法时出现以下错误



System.dll中出现'System.Net.WebException'类型的异常,但未在用户代码中处理



附加信息:远程服务器返回错误:(401)未经授权。


Hi All,

How we can Send Push Notification for Android and iPhone in ASP.NET Web Service.

What are the steps I will have to follow and all settings ?

Thanks

解决方案

For Android :

public void Notify(string regId)
{
var applicationID = "Application Id generated from google account comes here";
var result = "";
var SENDER_ID = "12 digit id you will get from google account";
var httpWebRequest = (HttpWebRequest)WebRequest.Create("https://android.googleapis.com/gcm/send");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";
httpWebRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID));
httpWebRequest.Headers.Add(string.Format("Sender: key={0}", SENDER_ID));
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
string json = "{\"registration_ids\":[\"" + regId + "\"]," + "\"data\": { \"message\" : \"Your Message Text Will Come here..\"}}";
Console.WriteLine(json);
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
result = streamReader.ReadToEnd();
}
}
}
--------------------------------------------------------------------------------------
For iPhone :

public void pushMessage(string deviceID)
{
int port = 2195;
String hostname = "gateway.sandbox.push.apple.com";

String certificatePath = HttpContext.Current.Server.MapPath("CertificateNameCommeshere.p12");
X509Certificate2 clientCertificate = new X509Certificate2(System.IO.File.ReadAllBytes(certificatePath), "PasswordofCertificateComeshere");
X509Certificate2Collection certificatesCollection = new X509Certificate2Collection(clientCertificate);

TcpClient client = new TcpClient(hostname, port);
SslStream sslStream = new SslStream(client.GetStream(), false, new RemoteCertificateValidationCallback(ValidateServerCertificate), null);

try
{
sslStream.AuthenticateAsClient(hostname, certificatesCollection, SslProtocols.Ssl3, false);
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
writer.Write((byte)0);
writer.Write((byte)0);
writer.Write((byte)32);

writer.Write(HexStringToByteArray(deviceID.ToUpper()));
String payload = "{\"aps\":{\"alert\":\"" + "Your Message Text Will Come here.." + "\",\"badge\":1,\"sound\":\"default\"}}";
writer.Write((byte)0);
writer.Write((byte)payload.Length);
byte[] b1 = System.Text.Encoding.UTF8.GetBytes(payload);
writer.Write(b1);
writer.Flush();
byte[] array = memoryStream.ToArray();
sslStream.Write(array);
sslStream.Flush();
client.Close();
}
catch (System.Security.Authentication.AuthenticationException ex)
{
client.Close();
}
catch (Exception e)
{
client.Close();
}
}

I got these solutions..


Getting below error while executing above method

An exception of type 'System.Net.WebException' occurred in System.dll but was not handled in user code

Additional information: The remote server returned an error: (401) Unauthorized.


这篇关于在ASP.NET Web服务中推送Android和iPhone的通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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