如何在 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 并在没有选择证书的情况下完成了配置。
我的目标是在 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 并在没有选择证书的情况下完成了配置。