Azure Notification Hub已注册设备列表

时间:2014-06-27 05:47:48

标签: ios azure asp.net-web-api azure-notificationhub

我正在关注This Post以使用azure通知中心。我想要做的是创建web api,使用Azure通知中心注册设备。当我按照文章中所示发送注册设备的请求时,它会点击azure通知中心。

以下是我的天蓝色门户网站的屏幕截图。这显示有注册请求。

但是当我尝试使用以下代码获取已注册设备的详细信息时,它总是为0.

var registrationsCount = await hub.GetAllRegistrationsAsync(Int32.MaxValue);
return registrationsCount.Count().ToString();

现在我几乎没有问题:

1)我如何探索已注册的设备详情?

2)我如何从后端向ios设备发送测试通知。下面是我用来发送测试通知的代码。

 var payload = string.Format(toastTemplate, message);

 hub.SendAppleNativeNotificationAsync(payload, "worldnews");

3)如果我使用web api作为后端,是否有必要在azure通知中心配置ios应用程序详细信息?即在azure portal上上传证书和其他详细信息?

enter image description here

3 个答案:

答案 0 :(得分:19)

您的首要问题是如何致电GetAllRegistrationsAsync。该参数不是您想要返回的最大注册数。它是您想要的第一次注册的索引。在大多数情况下,这将是0,而不是Int32.MaxValue

请参阅:https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.notificationhubs.notificationhubclient#Microsoft_Azure_NotificationHubs_NotificationHubClient_GetAllRegistrationsAsync_System_Int32_

public Task<CollectionQueryResult<RegistrationDescription>> 
    GetAllRegistrationsAsync(int top)

请记住,此方法最多返回100个注册。如果你想要更多,你需要使用ContinuationToken。

这是我用来注册的代码:

internal async Task<List<RegistrationDescription>> GetAllRegisteredDevicesAsync()
{
    var hub = NotificationHubClient.CreateClientFromConnectionString(
        Settings.Default.AzureNotificationsMobileAppFullSharedAccessListenerConnection,
        Settings.Default.AzureNotificationsMobileAppHubName,
        Settings.Default.AzureNotificationsTestSendMode);

    var allRegistrations = await hub.GetAllRegistrationsAsync(0);
    var continuationToken = allRegistrations.ContinuationToken;
    var registrationDescriptionsList = new List<RegistrationDescription>(allRegistrations);
    while (!string.IsNullOrWhiteSpace(continuationToken))
    {
        var otherRegistrations = await hub.GetAllRegistrationsAsync(continuationToken, 0);
        registrationDescriptionsList.AddRange(otherRegistrations);
        continuationToken = otherRegistrations.ContinuationToken;
    }

    return registrationDescriptionsList;
}

请注意,如果您只有几百个,也许几千个注册,则此方法应。如果您有数十,数十万或数百万注册,则不应使用此方法,并找到更有效的方法来查找所需内容。

答案 1 :(得分:7)

如果某个人只想获取注册设备的详细信息而仅仅是为了不用于应用目的的知识,还有一种方法。 Service Bus Explorer可用。您可以下载项目并将其解压缩并使用visual studio运行。

您可以通过提供连接字符串和所有者密钥来连接到azure服务。我用它来查看已注册的设备并发送测试通知等。这是一个非常有用的工具。

希望这可以帮助一些人。

答案 2 :(得分:0)

短代码:

    private async Task<List<RegistrationDescription>> GetAllRegisteredDevicesAsync()
    {
        List<RegistrationDescription> allRegistrations = new List<RegistrationDescription>();

        var hub = NotificationHubClient.CreateClientFromConnectionString(
            Settings.Default.AzureNotificationsMobileAppFullSharedAccessListenerConnection,
            Settings.Default.AzureNotificationsMobileAppHubName,
            Settings.Default.AzureNotificationsTestSendMode);

        CollectionQueryResult<RegistrationDescription> page = null;
        do
        {
            page = await hub.GetAllRegistrationsAsync(page?.ContinuationToken, 0);
            allRegistrations.AddRange(page);
        }
        while (!string.IsNullOrWhiteSpace(page.ContinuationToken));

        return allRegistrations;
    }