如何在 iOS 的 NotificationHub 中设置基于令牌的身份验证

How to setup Token Based Authentication in NotificationHub for iOS

我的目标是在 iOS 上不使用证书的情况下在 Azure NotificationHub 中设置令牌身份验证模式。我按原样生成了令牌 described here。然后我将令牌、密钥 ID、捆绑 ID 和团队 ID 放入 NotificationHub Apple(APNS) 部分(我很确定这是有效的,因为我试图将令牌更改为不同的值并且出现错误:"Error updating notification hub"。这意味着所有值都已正确保存。

在我的移动应用程序中,我遵循了这个 tutorial here. 如果我尝试将用户注册到 NotificationHub,我会遇到此错误:

Foundation.NSErrorException: Error Domain=NSURLErrorDomain Code=-1012 "(null)" 
UserInfo={NSErrorFailingURLStringKey=https://dev...NotificationHub/Registrations/?
$filter=deviceToken+eq+''&api-version=2013-04, NSUnderlyingError=0x2811b89c0 
{Error Domain=kCFErrorDomainCFNetwork Code=-1012 "(null)" 
UserInfo={_kCFURLErrorAuthFailedResponseKey=<NSHTTPURLResponse: 0x281903cc0> 
{ URL: https://dev...hubnamespace.servicebus.windows.net/dev...NotificationHub/Registrations/?
$filter=deviceToken+eq+''&api-version=2013-04 } { Status Code: 401, Headers {
    "Content-Length" =     (
        0
    );
    Date =     (
        "Wed, 25 Mar 2020 11:51:09 GMT"
    );
    Server =     (
        "Microsoft-HTTPAPI/2.0"
    );
    "Strict-Transport-Security" =     (
        "max-age=2592000"
    );

这意味着身份验证存在问题。在此之前,我有另一个 NotificationHub 的不同测试解决方案。我所做的不同之处在于,我在 apple.developer.com 中创建了证书并使用了证书身份验证方法,然后切换到令牌身份验证方法。在此示例测试项目中,一切正常,没有任何问题。在我当前的项目中,我没有为 APNS 创建证书。

我的问题是,即使我想使用Token,是否还需要创建证书?如果是这样,如果我也必须创建证书,创建令牌有什么意义?

对于您遇到的问题,我们深表歉意。

您是对的 - 如果门户允许您保存凭据,那么您已正确设置它。通知中心实际上在保存时使用 APNS 进行验证。

注册设备时收到身份验证错误表明您的 iOS 应用程序与通知中心本身之间存在身份验证问题。不会有从通知中心 SDK 到 APNS 本身的相应调用来获得拒绝。我建议仔细检查您如何使用集线器进行身份验证,因为它应该同时需要 Listen 访问 Policy/Connection 字符串和集线器名称才能成功进行身份验证和注册。

通知中心文档 (https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-registration-management#registration-management-from-the-device) 中的这张图显示了我的意思:

首先,我要感谢 Kyle Kamperschroer 帮助我。

回答我的问题 - 如果您使用基于令牌的身份验证,则不需要创建证书。

我的连接字符串和 Azure Hub 名称是正确的。我的问题是没有调用 AppDelegate 中的 RegisteredForRemoteNotifications 方法。然后令牌为空,导致 NotificationHub 出现身份验证问题。

我在 developer.apple.com 中解决了这个问题。我编辑了配置文件和 select 适当的证书。

还有一件事可能会解决它。在标识符部分,我检查了 PushNotifications 并在没有选择证书的情况下完成了配置。