2015-03-24 10 views
5

Ich habe ein Problem mit der Registrierung von Notification Hub von Azure.Android Azure Notification-Hub Registrierung abmelden

Ich verwende Methode unregister() wie folgt aus:

gcm = GoogleCloudMessaging.getInstance(getApplicationContext()); 

String connectionString = "xxx"; 
hub = new NotificationHub("xxx", connectionString, getApplicationContext()); 

try { 
    gcm.unregister(); 
    hub.unregister(); 
    Log.d("GCM","Unregister"); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (Exception e) { 
    e.printStackTrace(); 
}; 

ich keine Ausnahme in diesem Code, aber ich bin immer noch Push-Benachrichtigung bekommen. Jede Hilfe wird geschätzt. Danke im Voraus.

+0

gcm.unregister() scheint nicht erforderlich zu sein. Wie registrieren Sie sich bei NH, verwenden Sie Vorlagen? – efimovandr

Antwort

4

Sie sollten sich nicht von GCM abmelden.

Warum sollten Sie selten deregistrieren

Sie sollten nur in seltenen Fällen deregistrieren benötigen, wie zum Beispiel, wenn Sie wollen eine App Empfangen von Nachrichten zu beenden, oder wenn Sie vermuten, dass die Registrierungs-ID hat wurde kompromittiert. Wenn eine App eine Registrierungs-ID hat, sollten Sie diese normalerweise nicht ändern.

Insbesondere sollten Sie nie deregistrieren Ihre Anwendung als Mechanismus für logout oder zwischen Benutzerwechsel, aus den folgenden Gründen:

  • A-ID-Registrierung nicht mit einem bestimmten angemeldeten Benutzer zugeordnet ist, . Wenn Sie die Registrierung aufheben und sich erneut registrieren, gibt GCM möglicherweise dieselbe ID oder eine andere ID zurück - es gibt jedoch keine Garantie.

  • Die Registrierung kann bis zu 5 Minuten dauern, um zu propagieren.

  • Nach der Aufhebung der Registrierung kann die erneute Registrierung erneut bis zu 5 Minuten dauern. Während dieser Zeit können Nachrichten aufgrund von aufgrund von unregistrierter Nachricht zurückgewiesen werden, und nach all dem können Nachrichten weiterhin an den falschen Benutzer gehen.

Mehr Infos hier: http://developer.android.com/google/gcm/gcm.html#unreg-why

Da Sie Azure Mitteilung Hub verwenden, müssen Sie nur Registrierung löschen von dort nicht von GCM.

+0

hi @Andrei danke für deine antwort, aber kannst du mir sagen, wie man registrierung von azur löschen? –

+0

versuchen DeleteRegistrationAsync. –

+0

Ich habe auch das gleiche Problem. Ich habe beide Methode der Registrierung von notificationHub.UnregisterAll (storedRegGCMId); notificationHub.unregister(); Aber ich erhalte immer noch die Benachrichtigungen von Azure Hub –

2

Im Allgemeinen genügt die Verwendung von hub.unregister(). Alternativ rufen Sie einfach hub.register() mit einem ungültigen Tag, und es sollte die bestehende Registrierung überschreiben.

Ich habe jedoch festgestellt, dass Registrierungen manchmal im Notification Hub dupliziert werden (gleicher PNS, unterschiedliche Tags/Azure Registration ID), und unregister entfernt nur einen von ihnen, so dass Sie immer benachrichtigt werden. Vielleicht passiert dies, wenn Sie die App neu installieren, nicht sicher.

Um dies zu lösen, können Sie die Registrierung manuell löschen (Visual Studio> Server Explorer> Benachrichtigungs-Hubs> Wählen Sie einen> Registerkarte Geräte-Registrierungen).

0

Ich denke, Sie sollten eine andere Thread verwenden, um dieses Gerät abzumelden. Der untere Weg funktioniert für mich richtig. Bitte vergessen Sie nicht, hub zu behalten, die verwendet wird, um Gerät zu registrieren.In unten, generierte ich eine HubKeeper Klasse und ich hielt diese hub in HubKeeper Klasse als statisch. Aber anders, habe ich verwendet FCM statt GCM

Thread thread = new Thread(new Runnable() { 

      @Override 
      public void run() { 
       try { 
        if (HubKeeper.hub != null) { 
         HubKeeper.hub.unregister(); 
        } 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
     thread.setPriority(Thread.MIN_PRIORITY); 
     thread.start(); 
Verwandte Themen