Cihazlar arasında bile kullanıcı etkinliğine devam edin

Bu konu başlığında, kullanıcıların kendi bilgisayarlarında ve cihazlarda uygulamanızda yaptıklarını sürdürmelerine nasıl yardımcı olundığı açıklanmaktadır.

Uyarı

Temmuz 2021'den itibaren, etkinlik geçmişi Microsoft Hesapları (MSA) aracılığıyla Windows cihazları arasında senkronize edilen kullanıcılar, Zaman Çizelgesi'ne yeni etkinlik yükleme seçeneğine artık sahip olmayacak. Zaman Çizelgesi'ni kullanmaya ve etkinlik geçmişini (son uygulamalar, web siteleri ve dosyalar hakkındaki bilgiler) yerel bilgisayarlarında görmeye devam edebilirler. AAD bağlantılı hesaplar etkilenmez.

Kullanıcı Etkinlikleri ve Zaman Çizelgesi

Her gün zamanımız birden çok cihaza yayılır. Otobüsteyken telefonumuz, gün boyunca bir bilgisayar, akşam ise bir telefon veya tablet kullanabiliriz. Windows 10 Derleme 1803 veya sonraki sürümlerden itibaren, bir Kullanıcı Etkinliği oluşturmak, bu etkinliğin Windows Zaman Çizelgesi'nde ve Cortana'nın Kaldığım Yerden Devam Et özelliğinde görünmesini sağlar. Zaman çizelgesi, üzerinde çalıştığınız şeyin kronolojik görünümünü göstermek için Kullanıcı Etkinlikleri'nin avantajlarından yararlanan zengin bir görev görünümüdür. Ayrıca, cihazlar arasında üzerinde çalıştığınız şeyleri de içerebilir.

Windows zaman çizelgesi görüntüsü

Benzer şekilde, telefonunuzu Windows bilgisayarınıza bağlamak, daha önce iOS veya Android cihazınızda yaptığınız işlemlere devam etmenizi sağlar.

UserActivity, kullanıcının uygulamanızda üzerinde çalıştığı belirli bir şey olarak düşünün. Örneğin, RSS okuyucu kullanıyorsanız, okuduğunız akış UserActivity olabilir. Bir oyun oynuyorsanız, UserActivity oynadığınız düzey olabilir. Eğer bir müzik uygulaması kullanıyorsanız, UserActivity dinlediğiniz çalma listesi olabilir. Bir belge üzerinde çalışıyorsanız, UserActivity üzerinde çalışmayı bıraktığınız yer olabilir ve bu şekilde devam edebilir. Kısacası UserActivity, uygulamanızın içindeki bir hedefi temsil eder ve böylece kullanıcının yaptıklarına devam etmesini sağlar.

UserActivity.CreateSessionçağırarak bir UserActivity ile etkileşime geçtiğiniz zaman, sistem bu UserActivityiçin başlangıç ve bitiş zamanını belirten bir geçmiş kaydı oluşturur. Zaman içinde bu UserActivity ile yeniden etkileşim kurarken, bunun için birden çok geçmiş kaydı kaydedilir.

Uygulamanıza Kullanıcı Etkinlikleri ekleme

UserActivity, Windows'taki kullanıcı etkileşimi birimidir. Üç bölümden oluşur: etkinliğin ait olduğu uygulamayı etkinleştirmek için kullanılan URI, görseller ve etkinliği açıklayan meta veriler.

  1. ActivationUri, uygulamayı belirli bir bağlamla sürdürmek için kullanılır. Bu bağlantı genellikle bir düzen (örneğin, "my-app://page2?action=edit") veya appUriHandler (örneğin, http://contoso.com/page2?action=edit) için protokol işleyicisi biçimini alır.
  2. VisualElements, kullanıcının başlık, açıklama veya Uyarlamalı Kart öğeleriyle bir etkinliği görsel olarak tanımlamasına olanak tanıyan bir sınıfı kullanıma sunar.
  3. Son olarak, İçerik, etkinlikleri belirli bir bağlam altında gruplandırmak ve almak için kullanılabilecek etkinliğin meta verilerini depolayabileceğiniz yerdir. Bu genellikle https://schema.org veri biçimini alır.

Uygulamanıza UserActivity eklemek için:

  1. Kullanıcınızın uygulama içindeki bağlamı değiştiğinde (sayfa gezintisi, yeni oyun düzeyi vb.), UserActivity nesneleri oluşturun.
  2. UserActivity nesnelerini gerekli en düşük alan kümesiyle doldurun: ActivityId, ActivationUrive UserActivity.VisualElements.DisplayText.
  3. Uygulamanıza, UserActivitykullanılarak yeniden etkinleştirilebilmesi için özel bir şema işleyicisi ekleyin.

UserActivity birkaç satırla bir uygulamaya entegre edilebilir. Örneğin, bu kodu MainPage sınıfının içindeki MainPage.xaml.cs düşünün (not: using Windows.ApplicationModel.UserActivities;varsayılır):

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

Yukarıdaki GenerateActivityAsync() yöntemindeki ilk satır, kullanıcının UserActivityChannel'ini alır. Bu uygulamanın etkinliklerinin yayımlanacağı akış budur. Sonraki satır, MainPageadlı etkinliğin kanalını sorgular.

  • Uygulamanızın etkinlikleri, kullanıcı uygulamada belirli bir konumda her bulunduğunda aynı kimlik oluşturulabilecek şekilde adlandırması gerekir. Örneğin, uygulamanız sayfa tabanlıysa, sayfa için bir tanımlayıcı kullanın; belge tabanlıysa, belgenin adını (veya adın karması) kullanın.
  • Akışta aynı kimliğe sahip mevcut bir etkinlik varsa, bu etkinlik UserActivity.StateYayımlananolarak ayarlanmış şekilde kanaldan döndürülür. Bu ada sahip bir etkinlik yoksa, yeni etkinlik UserActivity.State, yeniolarak ayarlanarak döndürülür.
  • Etkinlikler uygulamanızla sınırlıdır. Etkinlik kimliğinizin diğer uygulamalarda kimliklerle çakışması konusunda endişelenmeniz gerekmez.

KullanıcıEtkinliği'ı aldıktan veya oluşturduktan sonra, diğer iki gerekli alanı belirtin: ve .

Ardından, UserActivity meta verilerini SaveAsyncçağırarak kaydedin ve CreateSession, bir UserActivitySessiondöndürür. UserActivitySession, kullanıcı UserActivityile gerçekten etkileşime geçtiğinde yönetmek için kullanabileceğimiz nesnedir. Örneğin, kullanıcı sayfadan ayrıldığında Dispose() üzerinde çağırmalıyız. Yukarıdaki örnekte, Dispose()çağırmadan önce _currentActivity üzerinde CreateSession() de çağırırız. Bunun nedeni, _currentActivity'ı sayfamızın üye alanı yapmamız ve yenisini başlatmadan önce mevcut etkinliği durdurmak istememizdir (not: ?, üye erişimi gerçekleştirilmeden önce null kontrolü yapan null-koşullu işleç).

Bu durumda, ActivationUri özel bir şema olduğundan, protokolü uygulama bildirimine de kaydetmemiz gerekir. Bu işlem Package.appmanifest XML dosyasında veya tasarımcı kullanılarak yapılır.

Tasarımcıda değişiklik yapmak için projenizdeki Package.appmanifest dosyasına çift tıklayarak tasarımcıyı başlatın, Bildirimler sekmesini seçin ve Protokolü tanımı ekleyin. Şu anda doldurulması gereken tek özellik Name. Yukarıda belirttiğimiz URI ile eşleşmelidir, my-app.

Şimdi uygulamaya bir protokol tarafından etkinleştirildiğinde ne yapacağını söylemek için bazı kodlar yazmamız gerekiyor. URI'yi ana sayfaya geçirmek için App.xaml.cs'da OnActivated yöntemini geçersiz kılacağız, örneğin:

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

Bu kodun yaptığı, uygulamanın bir protokol aracılığıyla etkinleştirilip etkinleştirilmediğini algılamaktır. Eğer öyleyse, uygulama etkinleştirildiği görevi sürdürmek için ne yapması gerektiğini kontrol eder. Basit bir uygulama olarak, bu uygulamanın tekrar başladığında yaptığı tek şey sizi ikincil sayfaya yerleştirmektir.

Zaman çizelgesi deneyimini geliştirmek için Uyarlamalı Kartlar kullanma

Kullanıcı Etkinlikleri Cortana ve Zaman Çizelgesi'nde görünür. Etkinlikler Zaman Çizelgesi'nde görüntülendiğinde, bunları Uyarlamalı Kart çerçevesini kullanarak görüntüleriz. Her etkinlik için uyarlamalı bir kart sağlamazsanız Zaman Çizelgesi, uygulama adınız ve simgeniz, başlık alanı ve isteğe bağlı açıklama alanı temelinde otomatik olarak basit bir etkinlik kartı oluşturur. Aşağıda örnek bir Uyarlamalı Kart yükü ve ürettiği kart verilmiştir.

Uyarlamalı kart ]

Örnek uyarlamalı kart yükü JSON dizesi:

{ 
  "$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 
        } 
      ] 
    } 
  ]
}

Uyarlamalı Kartlar yükünü JSON dizesi olarak UserActivity'ye şöyle ekleyin:

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

Platformlar arası ve Hizmetler arası tümleştirme

Uygulamanız platformlar arası çalışıyorsa (örneğin Android ve iOS'ta) veya bulutta kullanıcı durumunu koruyorsa UserActivities'i Microsoft Grapharacılığıyla yayımlayabilirsiniz. Uygulamanızın veya hizmetinizin kimliği bir Microsoft Hesabı ile doğrulandıktan sonra, yukarıda açıklanan verileri kullanarak Etkinlik ve Geçmişi nesneleri oluşturmak için yalnızca iki basit REST çağrısı gerekir.

Özet

Uygulamanızın Zaman Çizelgesi'nde ve Cortana'da görünmesini sağlamak için UserActivity API'sini kullanabilirsiniz.

  • UserActivity API hakkında daha fazla bilgi edinin
  • örnek koduna göz atın.
  • Daha gelişmiş Uyarlamalı Kartlar için bkz. .
  • iOS, Android veya web hizmetinizden UserActivity'i Microsoft Grapharacılığıyla yayımlayın.
  • GitHubProject Rome hakkında daha fazla bilgi edinin.

Anahtar API'leri