1

現在、HTML5 / JavaScriptのフィードリーダーアプリに取り組んでいますが、ライブタイルに問題があります。ブログから最新の3つの記事を返すWebサービスにクエリを実行することにより、定期的に更新されるライブタイルがあります。ライブタイルは期待どおりに機能しますが、未読の記事を表示するバッジ通知を作成したいと思います。

私がこれを行うと思った方法は、タイルが更新されるかどうかを確認してから、バッジ通知から番号を増やすことです。ユーザーがアプリを起動すると、バッジがクリアされます。

次のコード行を使用します。

    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);

これにより、30分ごとに更新されるライブタイルが作成されます。私の問題は、PeriodicUpdateが発生するたびにバッジの更新を作成したいということです。私は次のコードを使用します:

    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関数の更新イベントをキャッチし、バッジの値をインクリメントしたいと思います。どうやってやるの?どこでも検索しましたが、答えが見つかりませんでした。

私はあなたの助けに感謝します。
ジュリアン・アタナソエ

4

2 に答える 2

2

定期的なタイルの更新が発生したことを検出できたとしても(私はそれができないと確信しています)、ほとんどの場合、アプリが実行されていないときに発生します。その結果、「ローカル通知」を介してバッジの更新を設定する必要があるコードは実行されません。実際、バッジはアプリがフォアグラウンドにあり、定期的な通知がヒットした場合にのみ更新されます(アプリがフォアグラウンドにあると、とにかくタイルが表示されないため、これはそれほど興味深いことではありません!)。

バッジに表示してタイルが更新された回数を追跡したいようですが? (最大バッジ数である99までしか機能しないことに注意してください)

バッジにも定期的な通知を使用すると思います。その定期的な更新のURLエンドポイントは、クライアントを一意に識別するクエリ文字列引数を受け入れるサービスである可能性があります。次に、サービスは、サーバー側を維持しているクライアント固有の値をインクリメントすることにより、そのクライアントの正しいバッジ通知を生成します。

これでも、2つの定期的な通知が発生します。1つはタイル用、もう1つはバッジ用です。同じ間隔でスケジュールすることはできますが、到着時に最大15分でスキューが発生する可能性があります。希望の時間。

于 2013-01-16T06:14:18.890 に答える
0

この問題には2つの解決策があります。

1)バッジの更新に関する定期的な通知を作成し、各クライアントのGUIDをWebサービスに保存します。このソリューションは、XMLファイルが大きくなりすぎて、Webサービスがクライアントごとに多くの値をインクリメントする必要があるため、あまり使用されていない(2000ユーザー未満)アプリで機能します。

2)タイマーを使用してバックグラウンドタスクを作成し、15分程度ごとに更新を確認します。

ジュリアン

于 2013-01-18T07:51:05.703 に答える