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

问题描述 投票:0回答:2

我正在使用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)
{

}
azure push-notification xamarin.android azure-notificationhub
2个回答
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进行比较,如果不匹配则取消注册所有旧的Registration Token,然后注册新的Registration Token与您的通知中心。

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


0
投票

这是我从azure hub注册和取消注册的工作方法

    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

© www.soinside.com 2019 - 2024. All rights reserved.