如何在C#中实现基于苹果令牌的推送通知(使用p8文件)?

前端之家收集整理的这篇文章主要介绍了如何在C#中实现基于苹果令牌的推送通知(使用p8文件)?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
对于具有某种基于聊天功能的应用,我想添加推送通知支持以接收新消息.
我想要做的是使用Apple的基于新令牌的身份验证(.p8文件),但我找不到有关服务器部分的更多信息.

我发现了以下帖子:
How to use APNs Auth Key (.p8 file) in C#?

然而,答案并不令人满意,因为没有太多关于如何:

>与APN建立连接
>使用p8文件(某种编码除外)
>将数据发送到Apple推送通知服务

解决方法

目前,您无法在原始.NET Framework上实现此目的.新的基于JWT的APNS服务器仅使用HTTP / 2,.NET Framework尚不支持.

但是,只要满足以下先决条件,.NET Core的System.Net.Http版本就可以了:

>在Windows上,您必须运行Windows 10 Anniversary Edition(v1607)或更高版本,或Windows Server 2016的等效版本(我认为).
>在Linux上,您必须具有支持HTTP / 2的libcurl版本.
>在macOS上,您必须编译支持HTTP / 2的libcurl,然后使用DYLD_INSERT_LIBRARIES环境变量来加载libcurl的自定义构建.

如果您真的想要,您应该能够在.NET Framework中使用.NET Core的System.Net.Http版本.

我不知道Mono,Xamarin或UWP会发生什么.

那么你需要做三件事:

>解析您已获得的私钥.这是当前的ECDSA密钥,您可以将其加载到System.Security.Cryptography.ECDsa对象中.

>在Windows上,您可以使用CNG API.在解析密钥文件的base64编码的DER部分之后,您可以使用新的ECDsaCng(CngKey.Import(data,CngKeyBlobFormat.Pkcs8PrivateBlob))创建密钥.
>在macOS或Linux上,没有受支持的API,您必须自己解析DER结构,或使用第三方库.

>创建JSON Web令牌/承载令牌.如果您使用NuGet的System.IdentityModel.Tokens.Jwt包,这非常简单.您将需要Apple的密钥ID和团队ID.

public static string CreateToken(ECDsa key,string keyID,string teamID)
{
    var securityKey = new ECDsaSecurityKey(key) { KeyId = keyID };
    var credentials = new SigningCredentials(securityKey,"ES256");

    var descriptor = new SecurityTokenDescriptor
    {
          IssuedAt = DateTime.Now,Issuer = teamID,SigningCredentials = credentials
    };

    var handler = new JwtSecurityTokenHandler();
    var encodedToken = handler.CreateEncodedJwt(descriptor);
    return encodedToken;
}

>发送HTTP / 2请求.这是正常的,但你需要做两件额外的事情:

>将yourRequestMessage.Version设置为新版本(2,0),以便使用HTTP / 2发出请求.
>将yourRequestMessage.Headers.Authorization设置为新的AuthenticationHeaderValue(“bearer”,token),以便为您的请求提供承载身份验证令牌/ JWT.

然后将您的JSON放入HTTP请求并将其POST到正确的URL.

猜你在找的C#相关文章