我在Azure中托管了一个Web API。 Web API具有POST方法,当使用Postman将带有字符串正文消息的消息发布到Web API url时,该消息会在 Development 中完美地发送到移动设备。这是它的代码:
[Authorize]
[HttpPost, Route("send")]
public async Task<NotificationOutcome> Post([FromBody]string message)
{
string hubName = "hubname";
string hubNameDefaultShared = "endpointAddress";
NotificationHubClient hub = NotificationHubClient
.CreateClientFromConnectionString(hubNameDefaultShared, hubName, enableTestSend: true);
string installationId = string.Empty;
var templateParams = new Dictionary<string, string>
{
["messageParam"] = message
};
NotificationOutcome result = null;
if (string.IsNullOrWhiteSpace(installationId))
{
result = await hub.SendTemplateNotificationAsync(templateParams).ConfigureAwait(false);
}
else
{
result = await hub.SendTemplateNotificationAsync(templateParams, "$InstallationId:{" + installationId + "}").ConfigureAwait(false);
}
return result;
}
当我切换到生产并从商店下载应用程序时,使用Postman发布到上面的Web API时没有收到推送通知:
我已经完成的步骤:
对于通知中心,我是否需要对Web API进行任何设置才能将其设置为正式生产?这些步骤是否都是将Notification Hub设置为具有p12证书的生产版本的步骤,还是我错过了什么?
答案 0 :(得分:2)
我想我明白了。问题似乎出在我用手机进行开发模式测试时。我的电话已使用开发设备令牌注册。在生产模式下从商店下载应用程序时,该令牌不再有效,并且我的手机未收到通知。即使删除了与Visual Studio一起安装的应用程序并从商店下载了该应用程序,我的设备仍以某种方式保持与开发令牌的关联。
我在Azure文档网站链接上找到了此文件:
https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-faq
”“如果您的集线器最初配置有Apple沙盒证书,然后重新配置为使用Apple生产证书,则原始设备令牌无效。无效的令牌会导致推送失败。将生产和测试环境分开,并针对不同的环境使用不同的集线器。”
因此,最佳实践是拥有两个通知中心,一个用于开发,另一个用于生产。