asp.net - 获取苹果推送通知响应“MissingProviderToken”,即使我使用.p12 基于证书的身份验证来发送推送通知
问题描述
这是我第一次使用 Web API,我正在使用开发证书发送四个月前生成的推送通知,它也没有过期。因此,请让我知道我的代码中是否缺少任何内容。
try
{
string certpw = "xxx";
string devicetoken = "/3/device/2d4ee6e932a2e1216db4240fbad8c120a06211ec7d290246de221a16213d5243";
string bundleid = "xxxxxxxxx";
string certificatePath = "xxxx\\cert.p12";
X509Certificate cert = X509Certificate.CreateFromCertFile(certificatePath);
byte[] certificatesfdata = cert.GetRawCertData();
X509Certificate2 certificate = new X509Certificate2(certificatesfdata, certpw, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);
string url = "https://api.sandbox.push.apple.com";
string payload = @"{""aps"":{""alert"":""Test""}}";
var handler = new WinHttpHandler(){AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip, SslProtocols = SslProtocols.Tls |
SslProtocols.Tls11 |
SslProtocols.Tls12
};
handler.ClientCertificates.Add(certificate);
if (client == null)
client = new HttpClient(handler);
using (var request = new HttpRequestMessage(HttpMethod.Post, url+devicetoken ))
{
var messageGuid = Guid.NewGuid().ToString();
request.Version = new Version("2.0");
request.Content = new StringContent(payload);
request.Headers.Add("apns-id", messageGuid);
request.Headers.Add("apns-push-type", "alert");
request.Headers.Add("apns-priority", "10");
request.Headers.Add("apns-topic", bundleid);
using (var httpResponseMessage = client.SendAsync(request).GetAwaiter().GetResult())
{
var responseContent = httpResponseMessage.Content.ReadAsStringAsync().Result;
string result = $"status: {(int)httpResponseMessage.StatusCode} content: {responseContent}";
}
}
}
catch (ArgumentNullException anu) { }
catch (InvalidOperationException ioe) { }
catch (HttpRequestException hre) { }
catch (TaskCanceledException tce) { }
catch (Exception e) { }
解决方案
推荐阅读
- azure - 将域迁移到 Azure 后将 MS Outlook 邮箱添加到 AAD 用户
- javascript - 合并对象数组
- java - 确定一个比率以查看二叉搜索树在 java 中的平衡程度
- codeigniter - 如何将两列相乘并在codeigniter活动记录中求和?
- node.js - 运行繁重的预定 MongoDB 查询
- opengl - 如何处理 OpenGL 实现之间的差异
- swiftui - 在 macOS 上的 SwiftUI 中将颜色从源拖放到目标
- c - 在 K&R 字符计数示例的“C 编程语言”一书中
- flutter - 在带有颤振图的水平条形图上显示自定义目标线
- c++ - C++ 大数