Xamarin iOS Push通知在生产环境中不起作用,而在开发环境中则可以正常工作

时间:2018-11-02 22:02:19

标签: azure xamarin.ios apple-push-notifications

我在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时没有收到推送通知:

我已经完成的步骤:

  1. 移动应用程序和Notification Service Extension的应用程序ID。
  2. 同时在两者上启用了推送通知,并在Apple Developer网站上为两者都创建了开发SSL推送通知证书和生产推送通知证书。
  3. 在我的钥匙串中,右键单击“ Apple Push Services:MyMobileApp”(生产)并导出p12。
  4. 将p12证书上载到APNS下的Azure通知中心,并将“通知中心”开关从“沙箱”设置为“生产”。
  5. 为移动应用程序和Notification Service Extension的Development和Productions创建了Provisioning配置文件。
  6. 编辑了移动应用程序和Notification Extension Service的Entitlement.plist,并将“ aps-environment”设置为“ production”
  7. 在info.plist中选择了每个产品的生产证书和生产设置。
  8. 创建了ipa文件并上传到商店。

对于通知中心,我是否需要对Web API进行任何设置才能将其设置为正式生产?这些步骤是否都是将Notification Hub设置为具有p12证书的生产版本的步骤,还是我错过了什么?

1 个答案:

答案 0 :(得分:2)

我想我明白了。问题似乎出在我用手机进行开发模式测试时。我的电话已使用开发设备令牌注册。在生产模式下从商店下载应用程序时,该令牌不再有效,并且我的手机未收到通知。即使删除了与Visual Studio一起安装的应用程序并从商店下载了该应用程序,我的设备仍以某种方式保持与开发令牌的关联。

我在Azure文档网站链接上找到了此文件:

https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-faq

”“如果您的集线器最初配置有Apple沙盒证书,然后重新配置为使用Apple生产证书,则原始设备令牌无效。无效的令牌会导致推送失败。将生产和测试环境分开,并针对不同的环境使用不同的集线器。”

因此,最佳实践是拥有两个通知中心,一个用于开发,另一个用于生产。