1

我使用以下代码固定了一个辅助磁贴:

string secondaryTileId = "1";

var tile = new SecondaryTile(secondaryTileId, "Short name", "Display name", 
    "ActivationArgument", TileOptions.ShowNameOnLogo, photoUri);
var result = await tile.RequestCreateForSelectionAsync(...);

我可以通过推送通知(从我的后端)只更新这个辅助磁贴吗?如果是 - 我应该将此 ID 放在此 xml 中的什么位置?:

<?xml version='1.0' encoding='utf-8'?>
<tile>
    <visual lang="en-US">
        <binding template="TileSquarePeekImageAndText02">
            <image id="1" src="{0}"/>
            <text id="1">{1}</text>
            <text id="2">{2}</text>
        </binding>
    </visual>
</tile>

我尝试为图块节点添加属性 Id="1" 或 TileId="1" 但没有运气(它只更新主图块)

4

1 回答 1

2

推送通知始终通过通道 URI 发送,并且每个通道 URI 都绑定到特定的磁贴+用户+设备。因此,如果您要发送到主磁贴的通道 URI(来自Windows.Networking.PushNotifications 中的PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync),该通知将始终在该磁贴上结束。有一个例外,我稍后会解释。

通常,对于辅助磁贴,您可以通过[CreatePushNotificationChannelForSecondaryTileAsync][2]API 获取其自己的通道。您需要将此频道的 URI 发送到您的服务,就像您发送主磁贴的 URI 一样。

但是,如果您想直接接收和处理推送通知,则可以为此目的使用主磁贴通道。也就是说,“ChannelForApplication”通道用于主磁贴、toast 和原始通知等,因此它与主磁贴的链接只是其使用的一部分。无论如何,要处理通知,您可以订阅 Channel 对象的 PushNotificationReceived 事件,在该事件中您可以拦截通知,检查您想要放入其中的任何自定义标签,并在需要时将其路由到辅助磁贴。

当然,这只适用于正在运行的应用程序。要在不运行时执行此操作,需要一个带有 PushNotificationTrigger 的后台任务,您基本上会在同一时间执行此操作。

于 2013-07-15T17:20:30.413 回答