Bagikan melalui


Pemberitahuan petak peta chaseable

Pemberitahuan petak peta Chaseable memungkinkan Anda menentukan pemberitahuan petak peta mana yang ditampilkan Petak Peta Langsung aplikasi Anda saat pengguna mengklik petak peta.
Misalnya, aplikasi berita dapat menggunakan fitur ini untuk menentukan berita berita mana yang ditampilkan Petak Peta Langsungnya saat pengguna meluncurkannya; bisa memastikan bahwa cerita ditampilkan secara menonjol sehingga pengguna dapat menemukannya.

Penting

Memerlukan Pembaruan Hari Jadi: Untuk menggunakan pemberitahuan petak peta yang dapat dikejar dengan aplikasi UWP berbasis C#, C++, atau VB, Anda harus menargetkan SDK 14393 dan menjalankan build 14393 atau yang lebih baru. Untuk aplikasi UWP berbasis JavaScript, Anda harus menargetkan SDK 17134 dan menjalankan build 17134 atau yang lebih baru.

API Penting: LaunchActivatedEventArgs.TileActivatedInfo properti, kelas TileActivatedInfo

Cara kerjanya

Untuk mengaktifkan pemberitahuan petak peta yang dapat dikejar, Anda menggunakan properti Argumen pada payload pemberitahuan petak peta, mirip dengan properti peluncuran pada payload pemberitahuan toast, untuk menyematkan info tentang konten dalam pemberitahuan petak peta.

Saat aplikasi Anda diluncurkan melalui Petak Peta Langsung, sistem mengembalikan daftar argumen dari pemberitahuan petak peta saat ini/yang baru ditampilkan.

Kapan menggunakan pemberitahuan petak peta yang dapat dikejar

Pemberitahuan petak peta chaseable biasanya digunakan saat Anda menggunakan antrean pemberitahuan pada Petak Peta Langsung Anda (yang berarti Anda bersepeda hingga 5 pemberitahuan yang berbeda). Mereka juga bermanfaat ketika konten di Petak Peta Langsung Anda berpotensi tidak sinkron dengan konten terbaru di aplikasi. Misalnya, aplikasi Berita me-refresh Petak Peta Langsungnya setiap 30 menit, tetapi ketika aplikasi diluncurkan, aplikasi memuat berita terbaru (yang mungkin tidak menyertakan sesuatu yang ada di petak peta dari interval polling terakhir). Ketika ini terjadi, pengguna mungkin merasa frustrasi karena tidak dapat menemukan cerita yang mereka lihat di Petak Peta Langsung mereka. Di situlah pemberitahuan petak peta yang dapat dikejar dapat membantu, dengan memungkinkan Anda memastikan bahwa apa yang dilihat pengguna di petak peta mereka mudah ditemukan.

Apa yang harus dilakukan dengan pemberitahuan petak peta yang dapat dikejar

Hal terpenting yang perlu diperhatikan adalah bahwa dalam sebagian besar skenario, Anda TIDAK boleh langsung menavigasi ke pemberitahuan tertentu yang ada di petak peta ketika pengguna mengkliknya. Petak Peta Langsung Anda digunakan sebagai titik masuk ke aplikasi Anda. Mungkin ada dua skenario ketika pengguna mengklik Petak Peta Langsung Anda: (1) mereka ingin meluncurkan aplikasi Anda secara normal, atau (2) mereka ingin melihat informasi selengkapnya tentang pemberitahuan tertentu yang ada di Petak Peta Langsung. Karena tidak ada cara bagi pengguna untuk secara eksplisit mengatakan perilaku mana yang mereka inginkan, pengalaman idealnya adalah meluncurkan aplikasi Anda secara normal, sambil memastikan bahwa pemberitahuan yang dilihat pengguna mudah ditemukan.

Misalnya, mengklik Petak Peta Langsung aplikasi MSN News meluncurkan aplikasi secara normal: aplikasi menampilkan halaman beranda, atau artikel mana pun yang dibaca pengguna sebelumnya. Namun, di halaman beranda, aplikasi memastikan bahwa cerita dari Petak Peta Langsung mudah ditemukan. Dengan begitu, kedua skenario didukung: skenario di mana Anda hanya ingin meluncurkan/melanjutkan aplikasi, dan skenario di mana Anda ingin melihat cerita tertentu.

Cara menyertakan properti Argumen dalam payload pemberitahuan petak peta Anda

Dalam payload pemberitahuan, properti argumen memungkinkan aplikasi Anda untuk memberikan data yang dapat Anda gunakan untuk mengidentifikasi pemberitahuan nanti. Misalnya, argumen Anda mungkin menyertakan id cerita, sehingga saat diluncurkan, Anda dapat mengambil dan menampilkan cerita. Properti menerima string, yang dapat diserialisasikan sesuka Anda (string kueri, JSON, dll), tetapi kami biasanya merekomendasikan format string kueri, karena ringan dan xml-encode dengan baik.

Properti dapat diatur pada elemen TileVisual dan TileBinding , dan akan bertingkat. Jika Anda menginginkan argumen yang sama pada setiap ukuran petak peta, cukup atur argumen pada TileVisual. Jika Anda memerlukan argumen tertentu untuk ukuran petak peta tertentu, Anda dapat mengatur argumen pada elemen TileBinding individual.

Contoh ini membuat payload pemberitahuan yang menggunakan properti argumen sehingga pemberitahuan dapat diidentifikasi nanti.

// Uses the following NuGet packages
// - Microsoft.Toolkit.Uwp.Notifications
// - QueryString.NET
 
TileContent content = new TileContent()
{
    Visual = new TileVisual()
    {
        // These arguments cascade down to Medium and Wide
        Arguments = new QueryString()
        {
            { "action", "storyClicked" },
            { "story", "201c9b1" }
        }.ToString(),
 
 
        // Medium tile
        TileMedium = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                // Omitted
            }
        },
 
 
        // Wide tile is same as Medium
        TileWide = new TileBinding() { /* Omitted */ },
 
 
        // Large tile is an aggregate of multiple stories
        // and therefore needs different arguments
        TileLarge = new TileBinding()
        {
            Arguments = new QueryString()
            {
                { "action", "storiesClicked" },
                { "story", "43f939ag" },
                { "story", "201c9b1" },
                { "story", "d9481ca" }
            }.ToString(),
 
            Content = new TileBindingContentAdaptive() { /* Omitted */ }
        }
    }
};

Cara memeriksa properti argumen saat aplikasi Anda diluncurkan

Sebagian besar aplikasi memiliki file App.xaml.cs yang berisi penimpaan untuk metode OnLaunched . Seperti namanya, aplikasi Anda memanggil metode ini saat diluncurkan. Dibutuhkan satu argumen, objek LaunchActivatedEventArgs .

Objek LaunchActivatedEventArgs memiliki properti yang memungkinkan pemberitahuan yang dapat dikejar: properti TileActivatedInfo, yang menyediakan akses ke objek TileActivatedInfo. Saat pengguna meluncurkan aplikasi Anda dari petak petanya (bukan daftar aplikasi, pencarian, atau titik entri lainnya), aplikasi Anda menginisialisasi properti ini.

Objek TileActivatedInfo berisi properti yang disebut RecentlyShownNotifications, yang berisi daftar pemberitahuan yang telah ditampilkan pada petak dalam 15 menit terakhir. Item pertama dalam daftar mewakili pemberitahuan yang saat ini ada di petak peta, dan item berikutnya mewakili pemberitahuan yang dilihat pengguna sebelum item saat ini. Jika petak peta Anda telah dihapus, daftar ini kosong.

Setiap ShownTileNotification memiliki properti Argumen. Properti Argumen akan diinisialisasi dengan string argumen dari payload pemberitahuan petak peta Anda, atau null jika payload Anda tidak menyertakan string argumen.

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // If the API is present (doesn't exist on 10240 and 10586)
    if (ApiInformation.IsPropertyPresent(typeof(LaunchActivatedEventArgs).FullName, nameof(LaunchActivatedEventArgs.TileActivatedInfo)))
    {
        // If clicked on from tile
        if (args.TileActivatedInfo != null)
        {
            // If tile notification(s) were present
            if (args.TileActivatedInfo.RecentlyShownNotifications.Count > 0)
            {
                // Get arguments from the notifications that were recently displayed
                string[] allArgs = args.TileActivatedInfo.RecentlyShownNotifications
                .Select(i => i.Arguments)
                .ToArray();
 
                // TODO: Highlight each story in the app
            }
        }
    }
 
    // TODO: Initialize app
}

Mengakses OnLaunched dari aplikasi desktop

Aplikasi desktop (seperti WPF, dll) menggunakan Desktop Bridge, juga dapat menggunakan ubin yang dapat dikejar! Satu-satunya perbedaan adalah mengakses argumen OnLaunched. Perhatikan bahwa Anda harus terlebih dahulu mengemas aplikasi Anda dengan Desktop Bridge.

Penting

Memerlukan Pembaruan Oktober 2018: Untuk menggunakan AppInstance.GetActivatedEventArgs() API, Anda harus menargetkan SDK 17763 dan menjalankan build 17763 atau yang lebih baru.

Untuk aplikasi desktop, untuk mengakses argumen peluncuran, lakukan hal berikut...


static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    // API only available on build 17763 or later
    var args = AppInstance.GetActivatedEventArgs();
    switch (args.Kind)
    {
        case ActivationKind.Launch:

            var launchArgs = args as LaunchActivatedEventArgs;

            // If clicked on from tile
            if (launchArgs.TileActivatedInfo != null)
            {
                // If tile notification(s) were present
                if (launchArgs.TileActivatedInfo.RecentlyShownNotifications.Count > 0)
                {
                    // Get arguments from the notifications that were recently displayed
                    string[] allTileArgs = launchArgs.TileActivatedInfo.RecentlyShownNotifications
                    .Select(i => i.Arguments)
                    .ToArray();
     
                    // TODO: Highlight each story in the app
                }
            }
    
            break;

Contoh XML mentah

Jika Anda menggunakan XML mentah alih-alih pustaka Pemberitahuan, berikut adalah XML.

<tile>
  <visual arguments="action=storyClicked&amp;story=201c9b1">
 
    <binding template="TileMedium">
       
      <text>Kitten learns how to drive a car...</text>
      ... (omitted)
     
    </binding>
 
    <binding template="TileWide">
      ... (same as Medium)
    </binding>
     
    <!--Large tile is an aggregate of multiple stories-->
    <binding
      template="TileLarge"
      arguments="action=storiesClicked&amp;story=43f939ag&amp;story=201c9b1&amp;story=d9481ca">
   
      <text>Can your dog understand what you're saying?</text>
      ... (another story)
      ... (one more story)
   
    </binding>
 
  </visual>
</tile>