Подобные примеры кода можно найти во многих местах в Интернете:
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 описывает здесь различные заголовки, которые можно указать, и я заинтересован в указании apns-expiration
и apns-priority
, но я просто не могу понять, куда и в какой код я могу вписаться здесь, чтобы достичь моей цели?