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 utama 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.)

petak peta dan petak peta default dengan pemberitahuan

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 namespace Windows.UI.Notifications . 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:

konten pemberitahuan pada petak peta sedang

Membuat pemberitahuan

Setelah memiliki konten pemberitahuan, Anda harus membuat TileNotification baru. Konstruktor TileNotification mengambil objek XmlDocument Runtime Windows, 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 peta dan lencana lokal tidak kedaluwarsa, sementara pemberitahuan push, berkala, dan terjadwal kedaluwarsa setelah tiga hari. Karena konten petak peta seharusnya tidak 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 primer atau sekunder sedikit berbeda.

Petak peta primer

Untuk mengirim pemberitahuan ke petak 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 sana 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 petak peta sekunder ada. Jika Anda mencoba membuat pembaharu petak peta untuk petak sekunder yang tidak ada (misalnya, jika pengguna membuka petak peta sekunder), pengecualian akan dilemparkan. Anda dapat menggunakan SecondaryTile.Exists(tileId) untuk menemukan apakah petak 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);
}

petak peta dan petak peta default dengan pemberitahuan

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 peta utama. Anda dapat melakukan hal yang sama untuk petak sekunder dengan membuat pembaruan petak peta untuk petak 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 push, periodik, atau lokal atau tidak. Pemberitahuan terjadwal yang belum muncul tidak dibersihkan oleh metode ini.

petak dengan pemberitahuan dan petak peta setelah dihapus

Langkah berikutnya

Menggunakan antrean pemberitahuan

Setelah melakukan pembaruan petak peta pertama, Anda dapat memperluas fungsionalitas petak 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);