如何使用标准 C#.NET 发送带有“apns-expiration”标头的推送通知?
Posted
技术标签:
【中文标题】如何使用标准 C#.NET 发送带有“apns-expiration”标头的推送通知?【英文标题】:How do I send Push Notification with "apns-expiration" header using standard C#.NET? 【发布时间】:2019-03-15 15:35:48 【问题描述】:您可以在互联网上的许多地方找到类似的代码示例:
var apnsHost = "gateway.sandbox.push.apple.com";
var apnsPort = 2195;
var timeout = 3000;
using(TcpClient client = new TcpClient(AddressFamily.InterNetwork))
await client.ConnectAsync(apnsHost, apnsPort);
using (SslStream sslStream = new SslStream(client.GetStream(), false, _certificateValidationCallback, null))
try
sslStream.AuthenticateAsClient(apnsHost, _certificateCollection, System.Security.Authentication.SslProtocols.Tls, true);
catch
throw;
MemoryStream memoryStream = new MemoryStream();
BinaryWriter writer = new BinaryWriter(memoryStream);
byte[] binaryToken = StringToByteArray(deviceToken);
writer.Write((byte)0); // The command
writer.Write((byte)0); // The first byte of the deviceId length (bit-endian first byte)
writer.Write((byte)32); // The deviceId length (big-endian second byte)
writer.Write(binaryToken);
byte[] bytesPayload = Encoding.UTF8.GetBytes(payload);
writer.Write((byte)0);
writer.Write((byte)bytesPayload.Length);
writer.Write(bytesPayload);
writer.Flush();
byte[] array = memoryStream.ToArray();
sslStream.Write(array);
sslStream.Flush();
虽然我知道这段代码与 APNS 握手、建立 TLS 连接并编写适当的请求内容,但我真的不明白在这段代码中我可以在哪里指定额外的标头!
Apple 描述了 here 可以指定的各种标头,我对指定 apns-expiration
和 apns-priority
很感兴趣,但我只是不知道我可以在哪里以及在这里使用哪种代码来实现我的目标?
【问题讨论】:
【参考方案1】:我认为当你有 TCP 客户端连接(不是 connectAsync)时,你可以指定一个 IPEndPoint 对象并使用它来设置标头。
TCP 客户端连接:https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets.tcpclient.connect?view=netframework-4.7.2#System_Net_Sockets_TcpClient_Connect_System_Net_IPEndPoint_
IPEndPoint:https://docs.microsoft.com/en-us/dotnet/api/system.net.ipendpoint?view=netframework-4.7.2
我从来没有尝试过发送这样的帖子,所以不确定你的请求的 JSON 是什么。
【讨论】:
以上是关于如何使用标准 C#.NET 发送带有“apns-expiration”标头的推送通知?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 System.NET.mail 发送带有附件但没有任何纯文本正文的电子邮件?
C#.net 对带有附件的电子邮件进行排队以进行发送的最佳方式