Windows 8 WinRT实时互动程序徽章更新

Windows 8 WinRT实时互动程序徽章更新,windows-8,notifications,windows-runtime,tile,badge,Windows 8,Notifications,Windows Runtime,Tile,Badge,我目前正在使用HTML5/JavaScript开发一个提要阅读器应用程序,我在使用live tiles时遇到了一个问题。 我有一个实时互动程序,它通过查询从博客返回最新3篇文章的web服务定期更新。 live互动程序按预期工作,但我想创建一个显示未读文章的徽章通知 我认为这样做的方式是查看一个磁贴是否更新,然后从徽章通知中增加数字。当用户启动应用程序时,徽章将被清除 我使用以下代码行: var notifications = Windows.UI.Notifications; v

我目前正在使用HTML5/JavaScript开发一个提要阅读器应用程序,我在使用live tiles时遇到了一个问题。 我有一个实时互动程序,它通过查询从博客返回最新3篇文章的web服务定期更新。 live互动程序按预期工作,但我想创建一个显示未读文章的徽章通知

我认为这样做的方式是查看一个磁贴是否更新,然后从徽章通知中增加数字。当用户启动应用程序时,徽章将被清除

我使用以下代码行:

    var notifications = Windows.UI.Notifications;
    var polledUri = new Windows.Foundation.Uri("http://my_url/feed.php");
    var recurrence = notifications.PeriodicUpdateRecurrence.halfHour;
    var tileUpdater = notifications.TileUpdateManager.createTileUpdaterForApplication()
    tileUpdater.startPeriodicUpdate(polledUri, recurrence);
这将创建每半小时更新一次的实时互动程序。我的问题是:我想在每次定期更新时创建一个徽章更新。我使用以下代码:

    var badgeType = notifications.BadgeTemplateType.badgeNumber;
    var badgeXml = notifications.BadgeUpdateManager.getTemplateContent(badgeType);
    var badgeAttributes = badgeXml.getElementsByTagName("badge");
    var tileUpdater = notifications.TileUpdateManager.createTileUpdaterForApplication()
    tileUpdater.startPeriodicUpdate(polledUri, recurrence);
    // this is where my problem is
    // if (tileUpdater.update() == true) -> This line is not correct: how can I catch the update event?
    //badgeAttributes[0].setAttribute("value", currentValue + 1);
    var badgeNotification = new notifications.BadgeNotification(badgeXml);
    notifications.BadgeUpdateManager.createBadgeUpdaterForApplication().update(badgeNotification);
我想捕获tileUpdater.startPeriodicUpdate函数的更新事件,并增加徽章的值。我该怎么做?我到处都找遍了,找不到答案

我感谢你的帮助。

Julian Atanasoae

即使你能检测到周期性磁贴更新已经发生(我很确定你不能),它也会在你的应用程序未运行的大部分时间发生。因此,必须通过“本地通知”设置徽章更新的代码将不会执行。事实上,徽章只会在应用程序位于前台且周期性通知命中时更新(这并不那么有趣,因为应用程序位于前台时,你根本看不到互动程序!)

听起来你想通过在徽章中显示来跟踪磁贴的更新次数?(请注意,最多只能使用99,即最大徽章编号)

我要说的是,对徽章也使用定期通知,定期更新的URL端点可以是一个接受唯一标识客户端的查询字符串参数的服务。然后,您的服务将为该客户端生成正确的徽章通知,方法是增加它在服务器端维护的特定于客户端的值


尽管如此,您仍会收到两个定期通知,一个用于磁贴,另一个用于徽章,虽然您可以将它们安排在相同的时间间隔内,但它们到达时仍有可能出现偏差,距离所需时间最多15分钟。

此问题有两种解决方案:

1) 我为徽章更新创建定期通知,并将每个客户端的GUID存储在web服务上。此解决方案适用于使用率不高的应用程序(低于2000个用户),因为XML文件会变得太大,web服务必须为每个客户端增加很多值

2) 我用定时器创建一个后台任务,每隔15分钟左右检查一次更新

朱利安