Xamarin'de watchOS Proaktif Önerileri

Bu makalede, sistemin kullanıcıya otomatik olarak yararlı bilgileri proaktif olarak sunmasına izin vererek katılımı sağlamak için watchOS 3 uygulamasında Proaktif Önerilerin nasıl kullanılacağı gösterilmektedir.

watchOS 3'te yeni olan Proaktif Öneriler, kullanıcıların uygun zamanlarda kullanıcıya otomatik olarak yararlı bilgiler sunarak bir Xamarin.iOS uygulamasıyla etkileşim kurması için haber yolları sunar.

Proaktif Öneriler Hakkında

watchOS 3'teki yenilikler, NSUserActivity uygulamanın diğer bağlamlarda kullanılabilecek konum bilgilerini sağlamasına olanak tanıyan bir MapItem özellik içerir. Örneğin, uygulama otel incelemelerini görüntülediyse ve bir MapItem konum sağlıyorsa, kullanıcı Haritalar uygulamasına geçtiyse, yalnızca görüntüledikleri otelin konumu kullanılabilir olacaktır.

Uygulama, , MapKit, Medya Oynatıcı ve UIKit gibi NSUserActivitybir teknoloji koleksiyonu kullanarak bu işlevselliği sisteme sunar. Ek olarak, uygulama için Proaktif Öneri desteği sağlayarak ücretsiz olarak daha derin Siri tümleştirmesi elde eder.

Konum Tabanlı Öneriler

watchOS 3'te yeni olan NSUserActivity sınıfı, geliştiricinin diğer bağlamlarda kullanılabilecek konum bilgilerini sağlamasına olanak tanıyan bir MapItem özellik içerir. Örneğin, uygulama restoran incelemelerini görüntülerse, geliştirici özelliği kullanıcının uygulamada görüntülediği restoranın konumuna ayarlayabilir MapItem . Kullanıcı Haritalar uygulamasına geçerse restoranın konumu otomatik olarak kullanılabilir.

Uygulama Uygulama Arama'yı destekliyorsa, kullanıcının ziyaret etmek isteyebileceği konumları belirtmek için sınıfının yeni adres bileşenlerini CSSearchableItemAttributesSet kullanabilir. özelliği ayarlanarak MapItem diğer özellikler otomatik olarak doldurulur.

Adres bileşeni özelliklerinin ve ayarlarının Latitude yanı sıra, Siri'nin konuma yönelik bir çağrı başlatabilmesi için ve PhoneNumbers özelliklerini de uygulamanın sağlaması NamedLocationLongitude önerilir.

Bağlamsal Siri Anımsatıcıları

Kullanıcının Siri'yi kullanarak uygulamada görüntüledikleri içeriği daha sonraki bir tarihte görüntülemek için hızlı bir şekilde anımsatıcı oluşturmasına olanak tanır. Örneğin, uygulamada bir restoran incelemesini görüntülüyorlarsa Siri'yi çağırıp "Eve geldiğimde bana bunu anımsat" diyebilirler. Siri, uygulamadaki incelemenin bağlantısını içeren anımsatıcıyı oluşturur.

Proaktif Öneriler Uygulama

Xamarin.iOS uygulamasına Proaktif Öneri desteği eklemek genellikle birkaç API uygulamak veya uygulamanın zaten uygulamış olabileceği birkaç API'yi genişletmek kadar kolaydır.

Proaktif Öneriler, uygulamalarla üç ana yolla çalışır:

  • NSUserActivity - Sistemin kullanıcının ekranda şu anda hangi bilgilerle çalıştığını anlamasına yardımcı olur.
  • Konum Önerileri - Uygulama konum tabanlı bilgiler sunuyor veya tüketiyorsa, bu API uzantısı bu bilgileri uygulamalar arasında paylaşmanın yeni yollarını sunar.

Ve aşağıdakiler uygulanarak uygulamada desteklenir:

  • Bağlamsal Siri Anımsatıcıları - iOS 10'da, NSUserActivity Siri'nin uygulamada görüntüledikleri içeriği daha sonraki bir tarihte görüntülemek için hızlı bir şekilde anımsatıcı yapmasını sağlayacak şekilde genişletildi.
  • Konum Önerileri - iOS 10, uygulamanın içinde görüntülenen konumları NSUserActivity yakalamak ve bunları sistem genelinde birçok yerde tanıtmak için geliştirir.
  • Bağlamsal Siri İstekleri - NSUserActivity , kullanıcının uygulama içinden Siri'ye yol tarifleri alabilmesi veya Siri'yi çağıracak bir arama gerçekleştirebilmesi için uygulamanın içinde Siri'ye sunulan bilgilerle ilgili bağlam sağlar.

Tüm bu özelliklerin tek bir ortak özelliği vardır ve hepsi işlevlerini sağlamak için bir biçimde veya başka bir biçimde kullanır NSUserActivity .

NSUserActivity

Yukarıda belirtildiği gibi, NSUserActivity sistemin kullanıcının ekranda şu anda hangi bilgilerle çalıştığını anlamasına yardımcı olur. NSUserActivity , kullanıcının uygulamada gezinirken etkinliğini yakalamak için basit bir durum önbelleğe alma mekanizmasıdır. Örneğin, restoran uygulamasına baktığımızda:

Restoran uygulaması

Aşağıdaki etkileşimlerle:

  1. Kullanıcı uygulamayla birlikte çalıştığından, uygulamanın durumunu daha sonra yeniden oluşturmak için bir NSUserActivity oluşturulur.
  2. Kullanıcı bir restoran ararsa, aynı etkinlik oluşturma deseni izlenir.
  3. Ve kullanıcı bir sonucu görüntülediğinde. Bu son durumda, kullanıcı bir konumu görüntülüyor ve iOS 10'da sistem belirli kavramlardan (konum veya iletişim etkileşimleri gibi) daha fazla haberdar oluyor.

Son ekrana daha yakından bakın:

NSUserActivity yükü

Burada uygulama bir NSUserActivity oluşturuyor ve daha sonra durumu yeniden oluşturmak için bilgilerle dolduruldu. Uygulama ayrıca konumun adı ve adresi gibi bazı meta verileri de eklemiştir. Bu etkinlik oluşturulduktan sonra uygulama, iOS'un kullanıcının geçerli durumunu temsil ettiğini bilmesini sağlar.

Uygulama daha sonra etkinliğin İletim için havadan tanıtılacağına, konum önerileri için geçici bir değer olarak kaydedileceğine veya arama sonuçlarında görüntülenmesi için cihazdaki Spotlight dizinine eklenip ekleneceğine karar verir.

İletim ve Öne Çıkanlar araması hakkında daha fazla bilgi için lütfen İletim ve iOS 9 Yeni Arama API'lerine Giriş kılavuzlarımıza bakın.

Etkinlik Oluşturma

Etkinlik oluşturmadan önce, etkinliği tanımlamak için bir Etkinlik Türü Tanımlayıcısı oluşturulması gerekir. Etkinlik Türü Tanımlayıcısı, belirli bir Kullanıcı Etkinlik Türünü benzersiz olarak tanımlamak için kullanılan uygulama Info.plist dosyasının dizisine eklenen NSUserActivityTypes kısa bir dizedir. Uygulamanın desteklediği ve Uygulama Arama'ya açık olduğu her etkinlik için dizide bir giriş olacaktır. Daha fazla ayrıntı için Etkinlik Türü Tanımlayıcıları Oluşturma Başvurumuza bakın.

Etkinlik örneğine bakın:

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Inform system of Activity
activity.BecomeCurrent();

Etkinlik Türü Tanımlayıcısı kullanılarak yeni bir etkinlik oluşturulur. Ardından, etkinliği tanımlayan bazı meta veriler oluşturulur, böylece bu durum daha sonraki bir tarihte geri yüklenebilir. Ardından, etkinliğe anlamlı bir başlık verilir ve kullanıcı bilgilerine eklenir. Son olarak, bazı özellikler etkinleştirilir ve etkinlik sisteme gönderilir.

Yukarıdaki kod, aşağıdaki değişiklikler yapılarak etkinliğin bağlamını sağlayan meta verileri içerecek şekilde geliştirilebilir:

...

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Inform system of Activity
activity.BecomeCurrent();

Geliştiricinin uygulamayla aynı bilgileri görüntüleyebilen bir web sitesi varsa, uygulama URL'yi içerebilir ve içerik uygulamanın yüklü olmadığı diğer cihazlarda görüntülenebilir (İletim yoluyla):

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

Etkinliği Geri Yükleme

Kullanıcının uygulamanın arama sonucuna (NSUserActivity) dokunmasına yanıt vermek için AppDelegate.cs dosyasını düzenleyin ve yöntemini geçersiz kılınContinueUserActivity. Örneğin:

public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
{

    // Take action based on the activity type
    switch (userActivity.ActivityType) {
    case "com.xamarin.platform":
        // Restore the state of the app here...
        break;
    }

    return true;
}

Bunun yukarıda oluşturulan etkinlikle aynı Etkinlik Türü Tanımlayıcısı (com.xamarin.platform) olduğundan emin olun. Uygulama, durumu kullanıcının kaldığı yere geri yüklemek için içinde NSUserActivity depolanan bilgileri kullanır.

Etkinlik Oluşturmanın Avantajları

Yukarıda sunulan minimum kod miktarıyla uygulama artık üç yeni iOS 10 özelliğinden yararlanabilir:

  • İletim
  • Spotlight Araması
  • Bağlamsal Siri Anımsatıcıları

Aşağıdaki bölümde diğer iki yeni iOS 10 özelliğini etkinleştirmeye göz atacağız:

  • Konum Önerileri
  • Bağlamsal Siri İstekleri

Konum Tabanlı Öneriler

Yukarıdaki restoran arama uygulamasının örneğini inceleyin. Tüm meta verileri ve öznitelikleri uyguladıysa NSUserActivity ve doğru şekilde doldurduysa, kullanıcı aşağıdakileri yapabilir:

  1. Uygulamada bir arkadaşıyla tanışmak istedikleri bir restoran bulun.
  2. Kullanıcı Haritalar uygulamasına geçerse, restoranın adresi otomatik olarak hedef olarak önerilir.
  3. Bu, 3. Taraf uygulamaları (destekleyen NSUserActivity) için bile çalışır, böylece kullanıcı bir araç paylaşım uygulamasına geçebilir ve restoranın adresi de otomatik olarak orada bir hedef olarak önerilir.
  4. Ayrıca Siri'ye bağlam sağlar, böylece kullanıcı restoran uygulamasında Siri'yi çağırabilir ve "Yol tarifi al..." sorusunu sorabilir ve Siri kullanıcının görüntüleyebileceği restorana yol tarifleri sağlar.

Yukarıdaki işlevlerin tümünün tek bir ortak özelliği vardır ve hepsi önerinin başlangıçta nereden geldiğini gösterir. Yukarıdaki örnekte kurgusal restoran inceleme uygulaması söz konusudur.

watchOS 3, çeşitli küçük değişiklikler ve mevcut çerçevelere yapılan eklemelerle bir uygulama için bu işlevselliği sağlayacak şekilde geliştirilmiştir:

  • NSUserActivity , uygulamanın içinde görüntülenen konum bilgilerini yakalamak için ek alanlara sahiptir.
  • Konumu yakalamak için MapKit ve CoreSpotlight'a çeşitli eklemeler yapıldı.
  • Siri, Haritalar, Çoklu görev ve sistemdeki diğer uygulamalara konum algılama işlevselliği eklendi.

Konum tabanlı öneriler uygulamak için yukarıda sunulan etkinlik koduyla başlayın:

// Create App Activity
var activity = new NSUserActivity ("com.xamarin.platform");

// Define details
var info = new NSMutableDictionary ();
info.Add(new NSString("link"),new NSString("http://xamarin.com/platform"));

// Populate Activity
activity.Title = "The Xamarin Platform";
activity.UserInfo = info;

// Enable capabilities
activity.EligibleForSearch = true;
activity.EligibleForHandoff = true;
activity.EligibleForPublicIndexing = true;

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
attributes.ThumbnailUrl = myThumbnailURL;
attributes.Keywords = new string [] { "software", "mobile", "language" };
activity.ContentAttributeSet = attributes;

// Restore on the web
activity.WebPageUrl = new NSUrl("http://xamarin.com/platform");

// Inform system of Activity
activity.BecomeCurrent();

Uygulama MapKit kullanıyorsa, geçerli haritayı MKMapItem etkinliğe eklemek kadar basittir:

// Save MKMapItem location
activity.MapItem = myMapItem;

Uygulama MapKit kullanmıyorsa Uygulama Arama'yı benimseyerek konum için aşağıdaki yeni öznitelikleri belirtebilir:

// Provide context
var attributes = new CSSearchableItemAttributeSet ("com.xamarin.location");
...

attributes.NamedLocation = "Apple Inc.";
attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";
attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;
attributes.PhoneNumbers = new string[]{"(800) 275-2273"};
attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Yukarıdaki koda ayrıntılı olarak göz atın. İlk olarak, konumun adı her örnekte gereklidir:

attributes.NamedLocation = "Apple Inc.";

Ardından, metin tabanlı örnekler (QuickType klavyesi gibi) için gereken metin tabanlı açıklama:

attributes.SubThoroughfare = "1";
attributes.Thoroughfare = "Infinite Loop";
attributes.City = "Cupertino";
attributes.StateOrProvince = "CA";
attributes.Country = "United States";

Enlem ve boylam isteğe bağlıdır, ancak kullanıcının uygulamanın göndermek istediği tam konuma yönlendirildiğinden emin olun:

attributes.Latitude = 37.33072;
attributes.Longitude = 122.029674;

Uygulama, telefon numaralarını ayarlayarak Siri'ye erişebilir, böylece kullanıcı "Burayı ara" gibi bir şey söyleyerek Siri'yi uygulamadan çağırabilir:

attributes.PhoneNumbers = new string[]{"(800) 275-2273"};

Son olarak, uygulama örneğin gezinti ve telefon aramaları için uygun olup olmadığını gösterebilir:

attributes.SupportsPhoneCalls = true;
attributes.SupportsNavigation = true;

Etkinlikler için En İyi Yöntemler

Apple, etkinliklerle çalışırken aşağıdaki en iyi yöntemleri önerir:

  • Yavaş yük güncelleştirmeleri için kullanın NeedsSave .
  • Geçerli etkinliğe güçlü bir başvuru sağladığından emin olun.
  • Yalnızca durumu geri yüklemek için yeterli bilgi içeren küçük yükleri aktarın.
  • Etkinlik Türü Tanımlayıcılarının benzersiz ve açıklayıcı olduğundan emin olmak için ters DNS gösterimini kullanarak bunları belirtin.

Konum Önerilerini Kullanma

Bu sonraki bölümde, sistemin diğer bölümlerinden (Haritalar uygulaması gibi) veya diğer üçüncü taraf uygulamalardan gelen Konum Önerisi'ni kullanma ele alınacaktır.

Uygulamaları ve Konumları Yönlendirme Önerileri

Bu bölüm, doğrudan bir yönlendirme uygulamasının içinden Konum Önerileri'nin tüketilmesine göz atacaktır. Yönlendirme uygulamasının bu işlevi eklemesi için geliştirici aşağıdaki gibi mevcut MKDirectionsRequest çerçeveden yararlanacaktır:

  • Uygulamayı Çoklu Görev'de yükseltmek için.
  • Uygulamayı yönlendirme uygulaması olarak kaydetmek için.
  • Uygulamayı mapkit MKDirectionsRequest nesnesiyle başlatmayı işlemek için.
  • watchOS'a kullanıcı etkileşimi temelinde uygulamayı önermeyi öğrenme olanağı verin.

Uygulama bir MapKit MKDirectionsRequest nesnesiyle başlatıldığında, kullanıcı yönergelerini istenen konuma otomatik olarak vermeye başlamalı veya kullanıcının yol tariflerini almayı kolaylaştıran bir kullanıcı arabirimi sunmalıdır. Örneğin:

using System;
using Foundation;
using UIKit;
using MapKit;
using CoreLocation;

namespace MonkeyChat
{
    [Register ("AppDelegate")]
    public class AppDelegate : UIApplicationDelegate, IUISplitViewControllerDelegate
    {
        ...

        public override bool OpenUrl (UIApplication app, NSUrl url, NSDictionary options)
        {
            if (MKDirectionsRequest.IsDirectionsRequestUrl (url)) {
                var request = new MKDirectionsRequest (url);
                var coordinate = request.Destination?.Placemark.Location?.Coordinate;
                var address = request.Destination.Placemark.AddressDictionary;
                if (coordinate.IsValid()) {
                    var geocoder = new CLGeocoder ();
                    geocoder.GeocodeAddress (address, (place, err) => {
                        // Handle the display of the address

                    });
                }
            }

            return true;
        }
    }
}

Bu koda ayrıntılı olarak göz atın. Geçerli bir hedef isteği olup olmadığını test eder:

if (MKDirectionsRequest.IsDirectionsRequestUrl(url)) {

Bu durumda URL'den bir MKDirectionsRequest oluşturur:

var request = new MKDirectionsRequest(url);

watchOS 3'teki yeni uygulama, coğrafi koordinatları olmayan bir adres gönderilebilir ve bu nedenle geliştiricinin adresi kodlaması gerekir:

var geocoder = new CLGeocoder();
geocoder.GeocodeAddress(address, (place, err)=> {
    // Handle the display of the address

});

Özet

Bu makalede Proaktif Öneriler ele alınmıştır ve geliştiricinin watchOS için bir Xamarin.iOS uygulamasına trafiği yönlendirmek için bunları nasıl kullanabileceği gösterilmiştir. Proaktif Öneriler ve sunulan kullanım yönergelerini uygulama adımı ele alınmıştır.