gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:52:29 30 4
gpt4 key购买 nike

对于具有某种基于聊天功能的应用程序,我想添加推送通知支持以接收新消息。我想做的是使用 Apple 的新的基于 token 的身份验证(.p8 文件),但我找不到有关服务器部分的太多信息。

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

但是答案并不令人满意,因为没有太多关于如何执行以下操作的详细信息:

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

最佳答案

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

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

  • 在 Windows 上,您必须运行 Windows 10 周年纪念版 (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 上会发生什么。

您必须做三件事:

  1. 解析您获得的私钥。目前这是一个 ECDSA key ,您可以将其加载到 System.Security.Cryptography.ECDsa 对象中。
  • 在 Windows 上,您可以使用 CNG API。解析 key 文件的 Base64 编码 DER 部分后,您可以使用 new ECDsaCng(CngKey.Import(data, CngKeyBlobFormat.Pkcs8PrivateBlob)) 创建 key 。
  • 在 macOS 或 Linux 上,没有受支持的 API,您必须自己解析 DER 结构,或使用第三方库。
  • 创建 JSON Web token /承载 token 。如果您使用 NuGet 中的 System.IdentityModel.Tokens.Jwt 包,则这相当简单。您需要 Apple 提供的 key ID 和团队 ID。
  • public static string CreateToken(ECDsa key, string keyID, string teamID)
    {
    var securityKey = new ECDsaSecurityKey(key) { KeyId = keyID };
    var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.EcdsaSha256);

    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 设置为 new Version(2, 0),以便使用 HTTP/2 发出请求。
  • yourRequestMessage.Headers.Authorization 设置为 new AuthenticationHeaderValue("bearer", token),以便为您的请求提供承载身份验证 token /JWT。
  • 然后只需将 JSON 放入 HTTP 请求中并将其 POST 到正确的 URL。

    关于c# - 如何在 C# 中实现基于苹果 token 的推送通知(使用 p8 文件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43870237/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com