使用Xamarin Android在Azure Notification Hub中重复注册

时间:2017-08-22 06:48:23

标签: azure push-notification xamarin.android azure-notificationhub

我正在使用Azure Notification Hub和Xamarin Android。它在正常情况下工作正常,我可以在我的注册标签上获得推送通知,但是在更新标签或重新注册集线器时,它会创建重复的注册。注册后删除的标签仍然会收到通知。以下是相同

的示例代码段
try
{
  Hub.UnregisterAll(registrationId);
}
catch (Exception ex)
{

}

var tags = getting active tags 
try
{
    var hubregistration = Hub.Register(registrationId, tags);
}
catch (Exception ex)
{

}

2 个答案:

答案 0 :(得分:0)

AFAIK,GCM发布的Registration Token(registrationId)用于标识客户端应用程序,从GCM重新注册而不从GCM注销时可能相同。根据您的代码,您正在使用注册模型。 Hub.UnregisterAll(registrationId)会尝试从您的azure通知中心使用相同的注册令牌(pnsHandle)取消注册注册。

我建议您在致电UnregisterAll时捕获异常。此外,您可以利用Visual Studio中的服务器资源管理器,选择您的通知中心,然后按如下方式查看和管理集线器中的所有注册,以缩小此问题:

注意:您可以查看您的设备注册,并尝试查找是否可以检索重复的注册(相同的PNS标识符(Registration Token),不同的标记/ Azure注册ID或不同同一客户端应用程序的PNS标识符(Registration Token)等。)

如果您为同一个客户端应用找到了不同的PNS标识符(Registration Token),我认为您的客户端应用需要存储之前的Registration Token并与最新的Registration Token进行比较,UnregisterAll旧的Registration Token如果不匹配,请在您的通知中心注册新的Registration Token

此外,安装模型可以避免重复注册。有关详细信息,请参阅Registration management

答案 1 :(得分:0)

这是我从azure中心注册和注销的工作方法

    void unregister ()
    {
        try {
            NotificationHub hub = new NotificationHub (Constants.NotificationHubName, Constants.ListenConnectionString, this);
            hub.UnregisterAll (FirebaseInstanceId.Instance.Token);
        } catch (Exception ex) {

        }
    }


    void register ()
    {
        try {

            NotificationHub hub = new NotificationHub (Constants.NotificationHubName, Constants.ListenConnectionString, this);

            var tags = new List<string> () { ... };
            hub.Register (FirebaseInstanceId.Instance.Token, tags.ToArray ());
        } catch (Exception ex) {

        }
    }

根据本文档https://docs.microsoft.com/en-us/azure/notification-hubs/xamarin-notification-hubs-push-notifications-android-gcm