Mengirim pemberitahuan petak peta lokal

Petak peta aplikasi utama di Windows 10 ditentukan dalam manifes aplikasi Anda, sementara petak peta sekunder dibuat dan ditentukan secara terprogram oleh kode aplikasi Anda. Artikel ini menjelaskan cara mengirim pemberitahuan petak peta lokal ke petak primer dan petak peta sekunder menggunakan templat petak peta adaptif. (Pemberitahuan lokal adalah pemberitahuan yang dikirim dari kode aplikasi dibandingkan dengan yang didorong atau ditarik dari server web.)

default tile and tile with notification

Catatan

Pelajari tentang membuat petak peta adaptif dan skema konten petak peta.

 

Instal paket NuGet

Sebaiknya instal paket NuGet pustaka Pemberitahuan, yang menyederhanakan hal-hal dengan menghasilkan payload petak peta dengan objek alih-alih XML mentah.

Contoh kode sebaris dalam artikel ini adalah untuk C# menggunakan pustaka Pemberitahuan. (Jika Anda lebih suka membuat XML Anda sendiri, Anda dapat menemukan contoh kode tanpa pustaka Pemberitahuan di akhir artikel.)

Menambahkan deklarasi namespace

Untuk mengakses API petak peta, sertakan Windows. UI. Namespace pemberitahuan. Sebaiknya sertakan namespace Microsoft.Toolkit.Uwp.Notifications sehingga Anda dapat memanfaatkan API pembantu petak peta kami (Anda harus menginstal paket NuGet pustaka Pemberitahuan untuk mengakses API ini).

using Windows.UI.Notifications;
using Microsoft.Toolkit.Uwp.Notifications; // Notifications library

Membuat konten pemberitahuan

Dalam Windows 10, payload petak peta ditentukan menggunakan templat petak peta adaptif, yang memungkinkan Anda membuat tata letak visual kustom untuk pemberitahuan Anda. (Untuk mempelajari apa yang mungkin dengan petak peta adaptif, lihat Membuat petak peta adaptif.)

Contoh kode ini membuat konten petak peta adaptif untuk petak peta sedang dan lebar.

// In a real app, these would be initialized with actual data
string from = "Jennifer Parker";
string subject = "Photos from our trip";
string body = "Check out these awesome photos I took while in New Zealand!";
 
 
// Construct the tile content
TileContent content = new TileContent()
{
    Visual = new TileVisual()
    {
        TileMedium = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                Children =
                {
                    new AdaptiveText()
                    {
                        Text = from
                    },

                    new AdaptiveText()
                    {
                        Text = subject,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    },

                    new AdaptiveText()
                    {
                        Text = body,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    }
                }
            }
        },

        TileWide = new TileBinding()
        {
            Content = new TileBindingContentAdaptive()
            {
                Children =
                {
                    new AdaptiveText()
                    {
                        Text = from,
                        HintStyle = AdaptiveTextStyle.Subtitle
                    },

                    new AdaptiveText()
                    {
                        Text = subject,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    },

                    new AdaptiveText()
                    {
                        Text = body,
                        HintStyle = AdaptiveTextStyle.CaptionSubtle
                    }
                }
            }
        }
    }
};

Konten pemberitahuan terlihat seperti berikut ini saat ditampilkan pada petak peta sedang:

notification content on a medium tile

Membuat pemberitahuan

Setelah memiliki konten pemberitahuan, Anda harus membuat TileNotification baru. Konstruktor TileNotification mengambil objek Windows Runtime XmlDocument, yang dapat Anda peroleh dari metode TileContent.GetXml jika Anda menggunakan pustaka Pemberitahuan.

Contoh kode ini membuat pemberitahuan untuk petak peta baru.

// Create the tile notification
var notification = new TileNotification(content.GetXml());

Mengatur waktu kedaluwarsa untuk pemberitahuan (opsional)

Secara default, pemberitahuan petak dan lencana lokal tidak kedaluwarsa, sementara pemberitahuan push, berkala, dan terjadwal kedaluwarsa setelah tiga hari. Karena konten petak peta tidak boleh bertahan lebih lama dari yang diperlukan, ini adalah praktik terbaik untuk mengatur waktu kedaluwarsa yang masuk akal untuk aplikasi Anda, terutama pada petak peta lokal dan pemberitahuan lencana.

Contoh kode ini membuat pemberitahuan yang kedaluwarsa dan akan dihapus dari petak setelah sepuluh menit.

tileNotification.ExpirationTime = DateTimeOffset.UtcNow.AddMinutes(10);

Mengirim pemberitahuan

Meskipun mengirim pemberitahuan petak peta secara lokal sederhana, mengirim pemberitahuan ke petak peta primer atau sekunder sedikit berbeda.

Petak primer

Untuk mengirim pemberitahuan ke petak peta utama, gunakan TileUpdateManager untuk membuat pembaruan petak peta untuk petak peta utama, dan mengirim pemberitahuan dengan memanggil "Perbarui". Terlepas dari apakah itu terlihat, petak peta utama aplikasi Anda selalu ada, sehingga Anda dapat mengirim pemberitahuan ke dalamnya bahkan ketika tidak disematkan. Jika pengguna menyematkan petak utama Anda nanti, pemberitahuan yang Anda kirim akan muncul.

Contoh kode ini mengirimkan pemberitahuan ke petak utama.

// Send the notification to the primary tile
TileUpdateManager.CreateTileUpdaterForApplication().Update(notification);

Petak sekunder

Untuk mengirim pemberitahuan ke petak sekunder, pertama-tama pastikan bahwa petak sekunder ada. Jika Anda mencoba membuat pembaruan petak peta untuk petak sekunder yang tidak ada (misalnya, jika pengguna tidak menyematkan petak sekunder), pengecualian akan dilemparkan. Anda dapat menggunakan SecondaryTile.Exists(tileId) untuk menemukan apakah petak peta sekunder Anda disematkan, lalu membuat pembaruan petak peta untuk petak sekunder dan mengirim pemberitahuan.

Contoh kode ini mengirimkan pemberitahuan ke petak sekunder.

// If the secondary tile is pinned
if (SecondaryTile.Exists("MySecondaryTile"))
{
    // Get its updater
    var updater = TileUpdateManager.CreateTileUpdaterForSecondaryTile("MySecondaryTile");
 
    // And send the notification
    updater.Update(notification);
}

default tile and tile with notification

Menghapus pemberitahuan pada petak peta (opsional)

Dalam kebanyakan kasus, Anda harus menghapus pemberitahuan setelah pengguna berinteraksi dengan konten tersebut. Misalnya, saat pengguna meluncurkan aplikasi, Anda mungkin ingin menghapus semua pemberitahuan dari petak peta. Jika pemberitahuan Anda terikat waktu, kami sarankan Anda mengatur waktu kedaluwarsa pada pemberitahuan alih-alih menghapus pemberitahuan secara eksplisit.

Contoh kode ini menghapus pemberitahuan petak peta untuk petak utama. Anda dapat melakukan hal yang sama untuk petak sekunder dengan membuat pembaruan petak peta untuk petak peta sekunder.

TileUpdateManager.CreateTileUpdaterForApplication().Clear();

Untuk petak peta dengan antrean pemberitahuan diaktifkan dan pemberitahuan dalam antrean, memanggil metode Clear mengosongkan antrean. Namun, Anda tidak dapat menghapus pemberitahuan melalui server aplikasi Anda; hanya kode aplikasi lokal yang dapat menghapus pemberitahuan.

Pemberitahuan berkala atau push hanya dapat menambahkan pemberitahuan baru atau mengganti pemberitahuan yang ada. Panggilan lokal ke metode Clear akan menghapus petak peta apakah pemberitahuan itu sendiri datang melalui dorong, berkala, atau lokal atau tidak. Pemberitahuan terjadwal yang belum muncul tidak dibersihkan oleh metode ini.

tile with notification and tile after being cleared

Langkah berikutnya

Menggunakan antrean pemberitahuan

Sekarang setelah Anda melakukan pembaruan petak peta pertama, Anda dapat memperluas fungsionalitas petak peta dengan mengaktifkan antrean pemberitahuan.

Metode pengiriman pemberitahuan lainnya

Artikel ini memperlihatkan kepada Anda cara mengirim pembaruan petak peta sebagai pemberitahuan. Untuk menjelajahi metode pengiriman pemberitahuan lainnya, termasuk terjadwal, berkala, dan push, lihat Mengirimkan pemberitahuan.

Metode pengiriman XmlEncode

Jika Anda tidak menggunakan pustaka Pemberitahuan, metode pengiriman pemberitahuan ini adalah alternatif lain.

public string XmlEncode(string text)
{
    StringBuilder builder = new StringBuilder();
    using (var writer = XmlWriter.Create(builder))
    {
        writer.WriteString(text);
    }

    return builder.ToString();
}

Contoh kode tanpa pustaka Pemberitahuan

Jika Anda lebih suka bekerja dengan XML mentah alih-alih paket NuGet pustaka Pemberitahuan , gunakan contoh kode alternatif ini untuk tiga contoh pertama yang disediakan dalam artikel ini. Contoh kode lainnya dapat digunakan baik dengan pustaka Pemberitahuan atau dengan XML mentah.

Menambahkan deklarasi namespace

using Windows.UI.Notifications;
using Windows.Data.Xml.Dom;

Membuat konten pemberitahuan

// In a real app, these would be initialized with actual data
string from = "Jennifer Parker";
string subject = "Photos from our trip";
string body = "Check out these awesome photos I took while in New Zealand!";
 
 
// TODO - all values need to be XML escaped
 
 
// Construct the tile content as a string
string content = $@"
<tile>
    <visual>
 
        <binding template='TileMedium'>
            <text>{from}</text>
            <text hint-style='captionSubtle'>{subject}</text>
            <text hint-style='captionSubtle'>{body}</text>
        </binding>
 
        <binding template='TileWide'>
            <text hint-style='subtitle'>{from}</text>
            <text hint-style='captionSubtle'>{subject}</text>
            <text hint-style='captionSubtle'>{body}</text>
        </binding>
 
    </visual>
</tile>";

Membuat pemberitahuan

// Load the string into an XmlDocument
XmlDocument doc = new XmlDocument();
doc.LoadXml(content);
 
// Then create the tile notification
var notification = new TileNotification(doc);