簡體   English   中英

Android Azure通知中心取消注冊

[英]Android Azure Notification hub unregister

我在從Azure取消注冊通知中心時遇到問題。

我正在使用方法unregister()如下所示:

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

我在這段代碼中沒有任何異常,但我仍然得到推送通知。 任何幫助都會被貶低。 提前致謝。

您不應該從GCM取消注冊。

為什么你應該很少取消注冊

您應該只需要在極少數情況下取消注冊,例如,如果您希望應用程序停止接收郵件,或者您懷疑注冊ID已被盜用。 通常,一旦應用程序具有注冊ID,您就不需要更改它。

特別是,您應該永遠不要注銷您的應用程序作為注銷或在用戶之間切換的機制,原因如下:

  • 注冊ID與特定登錄用戶無關。 如果您取消注冊然后重新注冊,GCM可能會返回相同的ID或不同的ID - 無論如何都無法保證。

  • 取消注冊可能需要5分鍾才能傳播。

  • 取消注冊后,重新注冊可能需要最多5分鍾才能傳播。 在此期間,由於未注冊的狀態,消息可能被拒絕,並且在所有這些之后,消息仍可能發送給錯誤的用戶。

更多信息請訪問: http//developer.android.com/google/gcm/gcm.html#unreg-why

由於您使用的是Azure Notification Hub,因此您只需要從那里刪除注冊,而不是從GCM刪除注冊。

通常,只使用hub.unregister()就足夠了。 或者,只需使用無效標記調用hub.register() ,它應覆蓋現有注冊。

但是,我發現注冊有時在通知中心(相同的PNS,不同的標簽/ Azure注冊ID)中重復, unregister只會刪除其中一個,因此您會不斷收到通知。 當您重新安裝應用程序時可能會發生這種情況,但不確定。

無論如何,要解決此問題,您可以手動刪除注冊(Visual Studio>服務器資源管理器>通知中心>選擇一個>設備注冊選項卡)。

我認為你應該使用不同的Thread來取消注冊該設備。 以下方式對我有用。 請不要忘記保留用於注冊設備的hub 另外,在以下,我生成HubKeeper類和我保持該hubHubKeeper類作為靜態的。 但不同的是,我使用的是FCM而不是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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM