Xamarin Forms IOS 与 Azure 通知中心

Xamarin Forms IOS with Azure Notification Hub

我知道这个问题被问过多次了。所以请耐心等待。

我正在尝试通过我的 Android / iOS 客户端使用 Xamarin Forms 实施 Azure 通知中心。

Android 一切正常,但 iOS 我没有收到任何通知。

这是我为 iOS

所做的检查清单
  1. 生成了证书和配置文件
  2. 使用 MacOS 注册证书
  3. 导出 p12 文件并导入到 Azure Hub
  4. 我也在Info.plist中添加了权限(后台远程通知)
  5. Entitlements.plist 文件没有变化
  6. 我能够从 APN 服务获取设备令牌
  7. 获得令牌后我可以注册到 Azure Hub

但是我无法收到任何通知,而且 none 的函数被调用了(DidRegisterUserNotificationSettings,WillPresentNotification,ReceivedRemoteNotification,DidRegisterUserNotificationSettings,FailedToRegisterForRemoteNotifications,DidReceiveRemoteNotification)

但是RegisteredForRemoteNotifications被调用了

我还测试了 devicetoken,有或没有从中删除 '<> ' 但没有成功。

可能是什么问题?

这是我的代码

 public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
        {
            GlobalVariables.Instance.PnsToken = deviceToken.Description
                                 .Replace("<", string.Empty)
                                 .Replace(">", string.Empty)
                                 .Replace(" ", string.Empty)
                                 .ToUpper();
            RegisteredForHub(application, deviceToken);
        }

        public void RegisteredForHub(UIApplication application, NSData deviceToken)
        {
            string pnsHandle = deviceToken.Description
                                 .Replace("<", string.Empty)
                                 .Replace(">", string.Empty)
                                 .Replace(" ", string.Empty)
                                 .ToUpper();
            _hub = new SBNotificationHub(Constant.ListenConnectionString, Constant.NotificationHubName);

            _hub.UnregisterNative((error) =>
            {
                if (error != null)
                {
                    Debug.WriteLine($"Unable to call unregister Native {error}");
                }
            });
            _hub.UnregisterTemplate("defaultTemplate",(error) =>
            {
                if (error != null)
                {
                    Debug.WriteLine($"Unable to call unregister Template {error}");
                }
            });
            // update registration with Azure Notification Hub
            _hub.UnregisterAll(deviceToken, (error) =>
            {
                if (error != null)
                {
                    Debug.WriteLine($"Unable to call unregister {error}");
                    return;
                }

                var tags = new NSSet(Constant.SubscribeTags);
                _hub.RegisterNative(pnsHandle, tags, (errorCallback) =>
                {
                    if (errorCallback != null)
                    {
                        Debug.WriteLine($"RegisterNativeAsync error: {errorCallback}");
                    }
                });
                var templateExpiration = DateTime.Now.AddDays(120)
                    .ToString(System.Globalization.CultureInfo.CreateSpecificCulture("en-US"));
                //_hub.RegisterTemplate(deviceToken, "defaultTemplate", Constant.ApnTemplateBody, templateExpiration,
                //    tags, (errorCallback) =>
                //    {
                //        if (errorCallback != null)
                //        {
                //            Debug.WriteLine($"RegisterTemplateAsync error: {errorCallback}");
                //        }
                //    });
            });

经过大量试验和错误以及谷歌搜索这么多小时。我发现问题出在 Azure 上。

我上传了正确的证书,但密码是一个字符,因此没有发送通知。

如果用户为其证书文件输入了错误的密码,Azure 应提示用户输入 APN。