Lanjutkan aktivitas pengguna, bahkan di seluruh perangkat

Topik ini menjelaskan cara membantu pengguna melanjutkan apa yang mereka lakukan di aplikasi Anda di PC mereka, dan di seluruh perangkat.

Catatan

Mulai Juli 2021, pengguna yang memiliki riwayat aktivitas yang disinkronkan di seluruh perangkat Windows mereka melalui Akun Microsoft (MSA) mereka tidak akan lagi memiliki opsi untuk mengunggah aktivitas baru di Timeline. Mereka masih dapat menggunakan Timeline dan melihat riwayat aktivitas mereka (informasi tentang aplikasi, situs web, dan file terbaru) di PC lokal mereka. Akun yang terhubung dengan AAD tidak akan terpengaruh.

Aktivitas dan Garis Waktu Pengguna

Waktu kami setiap hari tersebar di beberapa perangkat. Kami mungkin menggunakan ponsel kami saat berada di bus, PC di siang hari, lalu ponsel atau tablet di malam hari. Mulai Windows 10 Build 1803 atau yang lebih baru, membuat Aktivitas Pengguna membuat aktivitas tersebut muncul di Linimasa Windows dan di Penjemputan Cortana tempat saya meninggalkan fitur. Garis waktu adalah tampilan tugas kaya yang memanfaatkan Aktivitas Pengguna untuk menunjukkan tampilan kronologis tentang apa yang telah Anda kerjakan. Ini juga dapat mencakup apa yang Sedang Anda kerjakan di seluruh perangkat.

Gambar garis waktu Windows

Demikian juga, menautkan ponsel ke PC Windows memungkinkan Anda untuk melanjutkan apa yang Anda lakukan sebelumnya di perangkat iOS atau Android Anda.

Anggap UserActivity sebagai sesuatu yang spesifik yang sedang digarap pengguna dalam aplikasi Anda. Misalnya, jika Anda menggunakan pembaca RSS, UserActivity bisa menjadi umpan yang Anda baca. Jika Anda bermain game, UserActivity bisa menjadi level yang Anda mainkan. Jika Anda mendengarkan aplikasi musik, UserActivity bisa menjadi daftar putar yang Anda dengarkan. Jika Anda sedang mengerjakan dokumen, UserActivity bisa menjadi tempat Anda tinggalkan mengerjakannya, dan sebagainya. Singkatnya, UserActivity mewakili tujuan dalam aplikasi Anda sehingga memungkinkan pengguna untuk melanjutkan apa yang mereka lakukan.

Saat Anda berinteraksi dengan UserActivity dengan memanggil UserActivity.CreateSession, sistem membuat rekaman riwayat yang menunjukkan waktu mulai dan berakhir untuk UserActivity tersebut. Saat Anda berinteraksi kembali dengan UserActivity tersebut dari waktu ke waktu, beberapa rekaman riwayat direkam untuk itu.

Menambahkan Aktivitas Pengguna ke aplikasi Anda

UserActivity adalah unit keterlibatan pengguna di Windows. Ini memiliki tiga bagian: URI yang digunakan untuk mengaktifkan aplikasi tempat aktivitas berada, visual, dan metadata yang menjelaskan aktivitas.

  1. ActivationUri digunakan untuk melanjutkan aplikasi dengan konteks tertentu. Biasanya, tautan ini mengambil bentuk penangan protokol untuk skema (misalnya, "my-app://page2?action=edit") atau appUriHandler (misalnya, http://contoso.com/page2?action=edit).
  2. VisualElements memaparkan kelas yang memungkinkan pengguna mengidentifikasi aktivitas secara visual dengan elemen judul, deskripsi, atau Kartu Adaptif.
  3. Terakhir, Konten adalah tempat Anda dapat menyimpan metadata untuk aktivitas yang dapat digunakan untuk mengelompokkan dan mengambil aktivitas dalam konteks tertentu. Seringkali, ini mengambil bentuk https://schema.org data.

Untuk menambahkan UserActivity ke aplikasi Anda:

  1. Hasilkan objek UserActivity saat konteks pengguna Anda berubah dalam aplikasi (seperti navigasi halaman, tingkat permainan baru, dll.)
  2. Isi objek UserActivity dengan kumpulan bidang minimum yang diperlukan: ActivityId, ActivationUri, dan UserActivity.VisualElements.DisplayText.
  3. Tambahkan handler skema kustom ke aplikasi Anda sehingga dapat diaktifkan kembali oleh UserActivity.

UserActivity dapat diintegrasikan ke dalam aplikasi hanya dengan beberapa baris kode. Misalnya, bayangkan kode ini di MainPage.xaml.cs, di dalam kelas MainPage (catatan: mengasumsikan using Windows.ApplicationModel.UserActivities;):

UserActivitySession _currentActivity;
private async Task GenerateActivityAsync()
{
    // Get the default UserActivityChannel and query it for our UserActivity. If the activity doesn't exist, one is created.
    UserActivityChannel channel = UserActivityChannel.GetDefault();
    UserActivity userActivity = await channel.GetOrCreateUserActivityAsync("MainPage");
 
    // Populate required properties
    userActivity.VisualElements.DisplayText = "Hello Activities";
    userActivity.ActivationUri = new Uri("my-app://page2?action=edit");
     
    //Save
    await userActivity.SaveAsync(); //save the new metadata
 
    // Dispose of any current UserActivitySession, and create a new one.
    _currentActivity?.Dispose();
    _currentActivity = userActivity.CreateSession();
}

Baris pertama dalam metode di GenerateActivityAsync() atas mendapatkan UserActivityChannel pengguna. Ini adalah umpan tempat aktivitas aplikasi ini akan diterbitkan. Baris berikutnya meminta saluran aktivitas yang disebut MainPage.

  • Aplikasi Anda harus memberi nama aktivitas sewaktu-waktu ID yang sama dihasilkan setiap kali pengguna berada di lokasi tertentu di aplikasi. Misalnya, jika aplikasi Anda berbasis halaman, gunakan pengidentifikasi untuk halaman tersebut; jika berbasis dokumennya, gunakan nama dokumen (atau hash nama).
  • Jika ada aktivitas yang ada di umpan dengan ID yang sama, aktivitas tersebut akan dikembalikan dari saluran dengan UserActivity.State diatur ke Diterbitkan). Jika tidak ada aktivitas dengan nama tersebut, dan aktivitas baru dikembalikan dengan UserActivity.State diatur ke Baru.
  • Aktivitas dilingkup ke aplikasi Anda. Anda tidak perlu khawatir tentang ID aktivitas yang bertabrakan dengan ID di aplikasi lain.

Setelah mendapatkan atau membuat UserActivity, tentukan dua bidang lain yang diperlukan: UserActivity.VisualElements.DisplayTextdan UserActivity.ActivationUri.

Selanjutnya, simpan metadata UserActivity dengan memanggil SaveAsync, dan akhirnya CreateSession, yang mengembalikan UserActivitySession. UserActivitySession adalah objek yang dapat kita gunakan untuk mengelola kapan pengguna benar-benar terlibat dengan UserActivity. Misalnya, kita harus memanggil Dispose()UserActivitySession saat pengguna meninggalkan halaman. Dalam contoh di atas, kami juga memanggil Dispose()_currentActivity sebelum memanggil CreateSession(). Ini karena kami membuat _currentActivity bidang anggota halaman kami, dan kami ingin menghentikan aktivitas yang ada sebelum memulai yang baru (catatan: ? adalah operator bersyar-nihil yang menguji null sebelum melakukan akses anggota).

Karena, dalam hal ini, ActivationUri adalah skema kustom, kita juga perlu mendaftarkan protokol dalam manifes aplikasi. Ini dilakukan dalam file XML Package.appmanifest, atau dengan menggunakan perancang.

Untuk membuat perubahan dengan perancang, klik dua kali file Package.appmanifest di proyek Anda untuk meluncurkan perancang, pilih tab Deklarasi dan tambahkan definisi Protokol . Satu-satunya properti yang perlu diisi, untuk saat ini, adalah Nama. Ini harus cocok dengan URI yang kami tentukan di atas, my-app.

Sekarang kita perlu menulis beberapa kode untuk memberi tahu aplikasi apa yang harus dilakukan ketika telah diaktifkan oleh protokol. Kami akan mengambil OnActivated alih metode di App.xaml.cs untuk meneruskan URI ke halaman utama, seperti:

protected override void OnActivated(IActivatedEventArgs e)
{
    if (e.Kind == ActivationKind.Protocol)
    {
        var uriArgs = e as ProtocolActivatedEventArgs;
        if (uriArgs != null)
        {
            if (uriArgs.Uri.Host == "page2")
            {
                // Navigate to the 2nd page of the  app
            }
        }
    }
    Window.Current.Activate();
}

Apa yang dilakukan kode ini adalah mendeteksi apakah aplikasi diaktifkan melalui protokol. Jika ya, maka tampaknya melihat apa yang harus dilakukan aplikasi untuk melanjutkan tugas yang sedang diaktifkan. Menjadi aplikasi sederhana, satu-satunya aktivitas yang dilanjutkan aplikasi ini adalah menempatkan Anda di halaman sekunder saat aplikasi muncul.

Menggunakan Kartu Adaptif untuk meningkatkan pengalaman Garis Waktu

Aktivitas Pengguna muncul di Cortana dan Garis Waktu. Saat aktivitas muncul di Garis Waktu, kami menampilkannya menggunakan kerangka kerja Kartu Adaptif . Jika Anda tidak menyediakan kartu adaptif untuk setiap aktivitas, Timeline akan secara otomatis membuat kartu aktivitas sederhana berdasarkan nama dan ikon aplikasi Anda, bidang judul, dan bidang deskripsi opsional. Di bawah ini adalah contoh payload Kartu Adaptif dan kartu yang dihasilkannya.

Kartu adaptif]

Contoh string JSON payload kartu adaptif:

{ 
  "$schema": "http://adaptivecards.io/schemas/adaptive-card.json", 
  "type": "AdaptiveCard", 
  "version": "1.0",
  "backgroundImage": "https://winblogs.azureedge.net/win/2017/11/eb5d872c743f8f54b957ff3f5ef3066b.jpg", 
  "body": [ 
    { 
      "type": "Container", 
      "items": [ 
        { 
          "type": "TextBlock", 
          "text": "Windows Blog", 
          "weight": "bolder", 
          "size": "large", 
          "wrap": true, 
          "maxLines": 3 
        }, 
        { 
          "type": "TextBlock", 
          "text": "Training Haiti’s radiologists: St. Louis doctor takes her teaching global", 
          "size": "default", 
          "wrap": true, 
          "maxLines": 3 
        } 
      ] 
    } 
  ]
}

Tambahkan payload Kartu Adaptif sebagai string JSON ke UserActivity seperti ini:

activity.VisualElements.Content = 
Windows.UI.Shell.AdaptiveCardBuilder.CreateAdaptiveCardFromJson(jsonCardText); // where jsonCardText is a JSON string that represents the card

Integrasi lintas platform dan Layanan ke layanan

Jika aplikasi Anda berjalan lintas platform (misalnya di Android dan iOS), atau mempertahankan status pengguna di cloud, Anda dapat memublikasikan Aktivitas Pengguna melalui Microsoft Graph. Setelah aplikasi atau layanan Anda diautentikasi dengan Akun Microsoft, dibutuhkan dua panggilan REST sederhana untuk menghasilkan objek Aktivitas dan Riwayat , menggunakan data yang sama seperti yang dijelaskan di atas.

Ringkasan

Anda dapat menggunakan USERActivity API untuk membuat aplikasi Anda muncul di Timeline dan Cortana.

API Kunci