我正在使用带有Xamarin Android的Azure通知中心。它在正常情况下运行良好,我可以在我的已注册标签上获得推送通知,但在更新标签或重新注册集线器时,它会创建重复的注册。此外,在注册后被删除的标签仍然会收到通知。下面是相同的示例代码片段
try
{
Hub.UnregisterAll(registrationId);
}
catch (Exception ex)
{
}
var tags = getting active tags
try
{
var hubregistration = Hub.Register(registrationId, tags);
}
catch (Exception ex)
{
}发布于 2017-08-23 12:11:34
AFAIK,由GCM发布的Registration Token (registrationId)用于标识客户端应用程序,当从GCM重新注册而不从GCM注销时,它可能是相同的。根据您的代码,您使用的是注册模型。Hub.UnregisterAll(registrationId)将尝试使用相同的注册令牌(pnsHandle)从您的azure通知中心注销注册。
我建议您在调用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。
发布于 2019-04-15 20:39:03
这是我在azure hub中注册和UnRegister的工作方法
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://stackoverflow.com/questions/45810683
复制相似问题