2014-06-27 5 views
7

Ich befolge This Post, um mit azurem Benachrichtigungshub zu arbeiten. Was ich versuche, ist das Erstellen der Web-API, die die Geräte mit dem Azure-Benachrichtigungs-Hub registriert. Wenn ich die Anfrage für die Registrierung des Geräts sende, wie in dem Artikel gezeigt, trifft es den Azure Notification Hub.Azure Notification Hub Registrierte Geräteliste

Unten ist der Screenshot meines azurblauen Portals. Was zeigt, dass eine Registrierung beantragt wurde.

Aber wenn ich versuche, die Details der registrierten Geräte zu erhalten mit dem folgenden Code ist es immer 0.

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

Jetzt habe ich einige Fragen:

1) Wie kann ich die registrierte erkunden Gerätedetails?

2) Wie kann ich eine Testbenachrichtigung an die IOS-Geräte vom Back-End senden. Unten ist der Code, den ich verwende, um Testbenachrichtigungen zu senden.

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

hub.SendAppleNativeNotificationAsync(payload, "worldnews"); 

3) Wenn ich mit der Bahn api als Backend ist es notwendig, die ios app Details in azur Benachrichtigung Hub zu konfigurieren? Laden Sie das Zertifikat und andere Details auf azurblaues Portal hoch?

enter image description here

Antwort

17

Ihr erstes Problem ist, wie Sie GetAllRegistrationsAsync anrufen. Der Parameter ist nicht die maximale Anzahl von Anmeldungen, die Sie zurück haben möchten. Es ist der Index der ersten Registrierung, die Sie wollen. In den meisten Szenarien würde, dass 0, nicht Int32.MaxValue

See: 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) 

Beachten Sie auch, dass dieses Verfahren maximal 100 Registrierungen zurückgibt. Wenn Sie mehr möchten, müssen Sie ContinuationToken verwenden.

Hier ist der Code, den ich verwende, um die Registrierung zu erhalten:

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

Beachten Sie, dass diese Methode sollte nur verwendet werden, wenn Sie nur ein paar hundert, vielleicht ein paar Tausend Registrierungen. Wenn Sie Zehner, Hunderttausende oder Millionen von Registrierungen haben, sollten Sie diese Methode nicht verwenden und eine effizientere Methode finden, um das zu finden, was Sie brauchen.

+0

Dank für Erklärung.Das war wirklich heplful :) Es gibt noch eine Frage, wenn Sie den 2. Punkt bemerkt haben. Ich möchte eine Benachrichtigung an Apple-Geräte senden. Es gibt eine Einrichtung für nicht autorisierte Benachrichtigungen für Windows Phone. Gibt es eine Möglichkeit, dass ich dieselben Benachrichtigungen für iOS-Geräte senden kann, ohne den Appkey oder das Zertifikat zu senden? –

+0

StackOverflow funktioniert besser, wenn Sie keine Fragen kombinieren. Aber kurz, ich weiß keine Möglichkeit, Benachrichtigungen über den Apple Push Notification Service zu senden, ohne das benötigte Zertifikat in Azure hochzuladen. Dieser Artikel zeigt, was zu tun ist: http://azure.microsoft.com/en-us/documentation/articles/notification-hubs-ios-get-started/ –

+0

Bitte werfen Sie einen Blick auf diese: http://azure.microsoft .com/de-de/dokumentation/artikel/notification-hubs-ios-aspnet-register-benutzer-push-benachrichtigungen /. Ist es noch notwendig, die App mit Zertifikat und allen zu registrieren? oder es kann direkt mit dem Back-End-Web-API getan werden? –

5

Es gibt einen weiteren Weg, wenn jemand nur die Details der registrierten Geräte nur für ein Wissen abrufen möchte, nicht für den Anwendungszweck. Service Bus Explorer ist verfügbar. Sie können das Projekt herunterladen und extrahieren und mit Visual Studio ausführen.

Sie können eine Verbindung zu azure-Diensten herstellen, indem Sie die Verbindungszeichenfolge und den Besitzerschlüssel angeben. Ich benutzte dies, um die registrierten Geräte zu sehen und die Testbenachrichtigungen usw. zu senden. Es ist ein großartiges hilfreiches Werkzeug.

Hoffe, das kann jemand helfen.

0

kurzer Code:

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

Können Sie Ihre Antwort näher erläutern? Es ist oft nicht sehr hilfreich, einen Code ohne Text zu veröffentlichen. –