繁体   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