如何在C#中实现基于苹果令牌的推送通知(使用p8文件)?
对于具有某种基于聊天功能的应用,我想添加推送通知支持以接收新消息.
我想要做的是使用Apple的基于新令牌的身份验证(.p8文件),但我找不到有关服务器部分的更多信息. 我发现了以下帖子: 然而,答案并不令人满意,因为没有太多关于如何: >与APN建立连接 解决方法
目前,您无法在原始.NET Framework上实现此目的.新的基于JWT的APNS服务器仅使用HTTP / 2,.NET Framework尚不支持.
但是,只要满足以下先决条件,.NET Core的System.Net.Http版本就可以了: >在Windows上,您必须运行Windows 10 Anniversary Edition(v1607)或更高版本,或Windows Server 2016的等效版本(我认为). 如果您真的想要,您应该能够在.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))创建密钥. >创建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发出请求. 然后将您的JSON放入HTTP请求并将其POST到正确的URL. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |