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 NSUserActivity
bir 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ı NamedLocation
Longitude
ö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:
Aşağıdaki etkileşimlerle:
- Kullanıcı uygulamayla birlikte çalıştığından, uygulamanın durumunu daha sonra yeniden oluşturmak için bir
NSUserActivity
oluşturulur. - Kullanıcı bir restoran ararsa, aynı etkinlik oluşturma deseni izlenir.
- 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:
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:
- Uygulamada bir arkadaşıyla tanışmak istedikleri bir restoran bulun.
- Kullanıcı Haritalar uygulamasına geçerse, restoranın adresi otomatik olarak hedef olarak önerilir.
- 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. - 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.