Список зарегистрированных устройств Azure Notification Hub

Я Этот Пост для работы с Azure notification hub. Я пытаюсь создать веб-api, который регистрирует устройства с помощью концентратора уведомлений Azure. Когда я отправляю запрос на регистрацию устройства, как показано в статье, он попадает в Центр уведомлений 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) Если я использую веб-api в качестве задней части, необходимо ли настраивать сведения о приложении ios в Azure notification hub ? я.электронная выгрузка сертификат и другие сведения на портале azure ?

enter image description here

3 ответов


ваша первая проблема заключается в том, как вы звоните 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;
}

обратите внимание, что этот метод должен только используется, если у вас есть только несколько сотен, возможно, несколько тысяч регистраций. Если у вас есть десятки, сотни тысяч или миллионы регистраций, вы не должны использовать этот метод, и найти более эффективный метод для поиска Что вам нужно.


есть еще один способ, если кто-то просто хочет получить сведения о зарегистрированных устройствах только для знаний, а не для целей приложения. Обозреватель Служебных Шин доступно. Вы можете загрузить проект, извлечь его и запустить с помощью visual studio.

вы сможете подключиться к службам azure, предоставив строку подключения и ключ владельца. Я использовал это для просмотра зарегистрированных устройств и отправки тестовых уведомлений и т. д. Это отличный полезный инструмент.

надеюсь, это может помочь кому-то.


короткий код:

    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;
    }