Windows phone 8.1 Windows Phone 8.1 live互动程序未每日更新

Windows phone 8.1 Windows Phone 8.1 live互动程序未每日更新,windows-phone-8.1,live-tile,Windows Phone 8.1,Live Tile,每天早上7点左右,我无法自行获取Windows Phone 8.1 live tile更新 我的项目分为两部分: 托管在Azure上的Web API项目,该项目以XML格式提供互动程序模板,该部分工作正常 一个Windows Phone 8.1项目,有一个MainPage.xaml,我在其中构建了2个正方形/宽的平铺 当我将我的应用程序从应用程序列表固定到开始屏幕时,无论我选择的是方形还是宽格式,我的互动程序都会在我当天的两个品牌之间来回翻转。 第二天早上7:15,瓷砖将不会更新为2个新品牌:

每天早上7点左右,我无法自行获取Windows Phone 8.1 live tile更新

我的项目分为两部分:

托管在Azure上的Web API项目,该项目以XML格式提供互动程序模板,该部分工作正常 一个Windows Phone 8.1项目,有一个MainPage.xaml,我在其中构建了2个正方形/宽的平铺 当我将我的应用程序从应用程序列表固定到开始屏幕时,无论我选择的是方形还是宽格式,我的互动程序都会在我当天的两个品牌之间来回翻转。 第二天早上7:15,瓷砖将不会更新为2个新品牌:

我注意到,如果我点击互动程序启动应用程序并返回开始屏幕,互动程序已经更新。 如果我取消绑定并重新绑定互动程序,它也会起作用,但在这两种情况下,这都是作弊:-/

我这样称呼我的Azure网站,以获取两个品牌的瓷砖模板: 品牌1

品牌2

XML磁贴模板类似于以下示例:

<tile>
    <visual>
        <binding template="TileWide310x150ImageAndText01">
            <image id="1" src="http://www.example.com/sales/BRAND1/visualWide.png"/>
            <text id="1">Brand 1</text>
        </binding>
        <binding template="TileSquare150x150PeekImageAndText04">
          <image id="1" src="http://www.example.com/sales/BRAND1/visualSquare.png"/>
          <text id="1">Brand 1</text>
        </binding>
    </visual>
 </tile>
WP8.1页面包含以下内容:

public MainPage()
{
    this.InitializeComponent();

    this.NavigationCacheMode = NavigationCacheMode.Required;

    TileUpdateManager.CreateTileUpdaterForApplication().EnableNotificationQueue(true);
    PeriodicUpdateRecurrence recurrence = PeriodicUpdateRecurrence.Daily;

    Task<string> responseBody;

    for (int i = 0; i < 2; i++)
    {
    using (var httpClient = new HttpClient())
    {
        httpClient.BaseAddress = new Uri("http://xxxxx.azurewebsites.net/api/tiles/" + i); //I hid the address here for discretion
        HttpResponseMessage response = httpClient.GetAsync(httpClient.BaseAddress).Result;
        string statusCode = response.StatusCode.ToString();
        response.EnsureSuccessStatusCode();
        responseBody = response.Content.ReadAsStringAsync();
    }

    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(responseBody.Result);

    string srcWide, srcSquare, textWide, textSquare, templateWide, templateSquare;

    XElement root = XElement.Parse(responseBody.Result);

    IEnumerable<XElement> wideElement = root.Descendants("binding").Where(a => a.Attribute("template").Value.ToLower().Contains("wide"));
    IEnumerable<XElement> squareElement = root.Descendants("binding").Where(a => a.Attribute("template").Value.ToLower().Contains("square"));

    templateWide = wideElement.Attributes("template").SingleOrDefault().Value;
    srcWide = wideElement.Descendants("image").Attributes("src").SingleOrDefault().Value;
    textWide = wideElement.Descendants("text").SingleOrDefault().Value;

    templateSquare = squareElement.Attributes("template").SingleOrDefault().Value;
    srcSquare = wideElement.Descendants("image").Attributes("src").SingleOrDefault().Value;
    textSquare = wideElement.Descendants("text").SingleOrDefault().Value;

    XmlDocument wideTileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150ImageAndText01);
    XmlNodeList wideTileTextAttributes = wideTileXml.GetElementsByTagName("text");
    wideTileTextAttributes[0].InnerText = textWide;
    XmlNodeList wideTileImageAttributes = wideTileXml.GetElementsByTagName("image");
    ((XmlElement)wideTileImageAttributes[0]).SetAttribute("src", srcWide);
    ((XmlElement)wideTileImageAttributes[0]).SetAttribute("alt", textWide);

    XmlDocument squareTileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150PeekImageAndText01);
    XmlNodeList squareTileTextAttributes = squareTileXml.GetElementsByTagName("text");
    squareTileTextAttributes[0].AppendChild(squareTileXml.CreateTextNode(textSquare));
    XmlNodeList squareTileImageAttributes = squareTileXml.GetElementsByTagName("image");
    ((XmlElement)squareTileImageAttributes[0]).SetAttribute("src", srcSquare);
    ((XmlElement)squareTileImageAttributes[0]).SetAttribute("alt", textSquare);


    IXmlNode node = wideTileXml.ImportNode(squareTileXml.GetElementsByTagName("binding").Item(0), true);
    wideTileXml.GetElementsByTagName("visual").Item(0).AppendChild(node);

    TileNotification tileNotification = new TileNotification(wideTileXml);
    tileNotification.ExpirationTime = DateTimeOffset.UtcNow.AddDays(1).AddHours(7).AddMinutes(0);
    TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification);
    }

    List<Uri> urisToPoll = new List<Uri>(5);
    urisToPoll.Add(new Uri("http://example.azurewebsites.net/api/tiles/0")); //fake url
    urisToPoll.Add(new Uri("http://example.azurewebsites.net/api/tiles/1")); //fake url

    //I want the tile to update its content every day at 7:15am
    //(the Azure website supposedly returns new brands of the day at 7am)
    DateTime dtTomorrow7 = DateTime.SpecifyKind(DateTime.Today.AddDays(1).AddHours(7).AddMinutes(15), DateTimeKind.Local);
    DateTimeOffset dtoTomorrow7 = dtTomorrow7;
    TileUpdateManager.CreateTileUpdaterForApplication().StartPeriodicUpdateBatch(urisToPoll, dtoTomorrow7, recurrence);
}
我不确定是否正确使用了StartPeriodicUpdateBatch方法。 在调试模式下,我可以看到DateTimeOffset值为Day+1 7:15am+2:00,这看起来是正确的,但磁贴不会更新。 我住在UTC+2的法国
谢谢您的建议。

您的dtTomorrow7不正确。应该是早上7点15分。然后,它将首先在上午7:15进行更新,然后在您将其设置为“每日”后,在定期间隔进行后续更新

最后一个时间间隔偏离UTC的开始时间示例:

    DateTime tomorrow = DateTime.Today.AddDays(1);
    var startTime = new DateTimeOffset(tomorrow.Year, tomorrow.Month, tomorrow.Day, 7, 15, 0, TimeSpan.FromHours(2));

我用断点快速测试了DateTime.SpecifyKind的DateTimeKind第三个参数的3个可能枚举值,认为UTC的+2可能是原因。无效:DateTimeKind.Local dtTomorrow7{28/09/2014 07:15:00}dtoTomorrow7{28/09/2014 07:15:00+02:00}DateTimeKind.Utc dtTomorrow7{28/09/2014 07:15:00}dtoTomorrow7{28/09/2014 07:15:00+00}DateTimeKind.Utc dtTomorrow7{28/09/2014 07:15:00}所以我选择了DateTimeKind.Utc,它返回原始的07:15:00DateTime dtTomorrow7=DateTime.SpecificyKindDateTime.Today.AddHours7.AddMinutes15,DateTimeKind.Utc;今天早上,我的互动程序在07:15:00时没有更新,尽管我的Azure url在7:05时显示了更新的xml,但已经过了9:15,仍然没有更新的互动程序。我等待07:15:00+2小时,以确保UTC的事情可能会发生。抱歉,我无法在我的评论中添加换行符:-/更新了答案,并提供了开始时间的示例。让我知道这是否有效。