Aracılığıyla paylaş


Xamarin.iOS'ta Proaktif Önerilere Giriş

Bu makalede, sistemin kullanıcıya otomatik olarak yararlı bilgileri proaktif bir şekilde sunmasına izin vererek etkileşimi yönlendirmek için Xamarin.iOS uygulamasında Proaktif Önerilerin nasıl kullanılacağı gösterilmektedir.

iOS 10'da 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.

iOS 10, sistemin uygun zamanlarda kullanıcıya otomatik olarak yararlı bilgiler sunmasına olanak tanıyarak uygulamaya katılım sağlamanın yeni yollarını sunar. Tıpkı iOS 9'un Spotlight, Handoff ve Siri Önerileri(bkz . Yeni Arama API'leri) kullanarak uygulamaya ayrıntılı arama ekleme olanağı sağladığı gibi, iOS 10 ile bir uygulama aşağıdaki konumlardan sistem tarafından kullanıcıya sunulabilen işlevselliği kullanıma sunabilir:

  • Uygulama Değiştirici
  • Kilit Ekranı
  • CarPlay
  • Haritalar
  • Siri Etkileşimleri
  • QuickType Önerileri

Uygulama, web işaretlemesi, Core Spotlight, 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

iOS 10'da 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.

Web İşaretlemeyi Temel Alan Öneriler

iOS 9, kullanıcıların Spotlight ve Safari arama sonuçlarında gördüğü içeriği zenginleştiren yapılandırılmış veri işaretlemesini web sitesine ekleme özelliği eklendi (bkz . Web İşaretlemeyi kullanarak arama). iOS 10, kullanıcının deneyimini daha da geliştirmek için konum tabanlı işaretleme (Schema.org tarafından tanımlanan Posta Adresi gibi) ekleme özelliği ekler. Örneğin, kullanıcılar web sitesinde işaretli bir sayfayı görüntülerse, sistem Haritalar açtıklarında aynı konumu önerebilir.

Metin Tabanlı Öneriler

iOS 10'da UIKit, bir metin alanındaki içeriğin anlamsal anlamını belirtmek için UITextInputTraits sınıfının TextContentType özelliğini içerecek şekilde genişletildi. Bu bilgiler mevcutken sistem genellikle uygun klavye türünü otomatik olarak seçebilir, otomatik düzeltme önerilerini geliştirebilir ve diğer uygulama ve web sitelerindeki bilgileri proaktif olarak tümleştirebilir.

Örneğin, kullanıcı işaretli UITextContentType.FullStreetAddressbir metin alanına metin giriyorsa, sistem alanı kullanıcının son görüntülendiği konumla otomatik olarak doldurmayı önerebilir.

Medya Tabanlı Öneriler

Uygulama MPPlayableContentManager API'sini kullanarak medya yürütürse, iOS 10 kullanıcıların albüm çizimini görüntülemesine ve kilit ekranında uygulama üzerinden medya yürütmesine olanak tanır.

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.

Kişi Tabanlı Öneriler

Uygulamanın kişilerinin (ve ilgili kişi bilgilerinin) iOS cihazındaki Kişi uygulamasında ve sistemde depolanan tüm kullanıcı kişileriyle birlikte görünmesine izin verir.

Ride Sharing Tabanlı Öneriler

Bir sürüş paylaşımı uygulaması MKDirectionsRequest API'sini kullanıyorsa, iOS 10 bunu kullanıcının bir yolculuk isteme olasılığı yüksek olduğu zamanlarda uygulama değiştiricide bir seçenek olarak sunar. Uygulama, dosyasındaki MKDirectionsApplicationSupportedModes anahtarı için belirtilerek MKDirectionsModeRideShare bir sürüş paylaşım uygulaması olarak da Info.plist kaydedilmelidir.

Uygulama yalnızca sürüş paylaşımını destekliyorsa, sistem önerisi "...' ile başlar, diğer yönlendirme yönü türleri (Yürüyüş veya Bisiklet gibi) destekleniyorsa, sistem "Yol tarifi al"ı kullanır.

Önemli

Uygulamanın aldığı MKMapItem nesnesi boylam ve enlem bilgilerini içermeyebilir ve coğrafi kodlama gerektirir.

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 ve Schema.org - NSUserActivity , sistemin kullanıcının ekranda şu anda hangi bilgilerle çalıştığını anlamasına yardımcı olur. Schema.org, web sayfalarına benzer özellikler ekler.
  • 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.
  • Medya Uygulaması Önerileri - Sistem, kullanıcının iOS cihazıyla etkileşiminin bağlamını temel alarak uygulamayı ve medya içeriğini yükseltebilir.

Ve aşağıdakiler uygulanarak uygulamada desteklenir:

  • NSUserActivity - İOS 8'de, geliştiricinin bir cihazda etkinlik başlatmasına ve ardından başka bir cihazda devam etmesine olanak tanıyan İletim desteği için iOS 8'e eklendi (bkz. İletimlere Giriş).
  • Spotlight Search - iOS 9, kullanarak NSUserActivity Spotlight Arama sonuçlarının içinden uygulama içeriğini yükseltme özelliğini ekledi (bkz . Çekirdek Spot ile Arama).
  • Bağlamsal Siri Anımsatıcıları - iOS 10'da, NSUserActivity Siri'nin kullanıcının uygulamada görüntülemekte olduğu 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.
  • Kişi Etkileşimleri - iOS 10'daki yeni sürümler, NSUserActivity iletişim uygulamalarının alternatif bir iletişim yöntemi olarak kişi kartından (Kişiler uygulamasında) yükseltilmesine olanak tanır.

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, bir restoran uygulamasına göz atabilirsiniz:

NSUserActivity hafif durum önbelleğe alma mekanizması

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 ayrıntıları

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

Geliştiricinin bunun yukarıda oluşturulan etkinlikle aynı Etkinlik Türü Tanımlayıcısı (com.xamarin.platform) olduğundan emin olması gerekir. 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ı çok görevli uygulama değiştiriciyi kullanarak uygulamadan uzaklaştıkça sistem, sık kullandığı gezinti uygulamasını kullanarak restorana yol tarifleri almak için otomatik olarak bir öneri (ekranın alt kısmında) görüntüler.
  3. Kullanıcı İletiler uygulamasına geçer ve "Buluşalım" yazmaya başlarsa, QuickType klavyesi otomatik olarak restoranın adresine yapıştırmayı önerir.
  4. Kullanıcı Haritalar uygulamasına geçerse, restoranın adresi otomatik olarak hedef olarak önerilir.
  5. 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.
  6. 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.

iOS 10, ç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, Klavyeler, Çoklu görev ve sistem içindeki 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 konumun metin tabanlı açıklaması gerekir:

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, bu nedenle dahil edilmelidir:

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;

Kişi Etkileşimlerini Uygulama

iOS 10'da yeni eklenen iletişim uygulamaları, kişi kartından Kişiler uygulamasıyla derin bir şekilde tümleştirilir. Kişi Etkileşimlerini uygulayan uygulamalar için kullanıcı, belirli bir uygulamanın bilgilerini kişilerindeki belirli kişilere ekleyebilir. Örneğin, ileti göndermek için kartın üst kısmındaki hızlı işlem düğmesine basarlarsa, ekli uygulama iletiyi gönderme seçeneği olarak listelenir.

3. Taraf bir uygulama seçilirse, kullanıcı bir sonraki iletişimde ilgili kişiye ileti göndermenin varsayılan yolu olarak hatırlanabilir ve sunulabilir.

Kişi Etkileşimleri, iOS 10'da kullanıma sunulan yeni Intents çerçevesi kullanılarak NSUserActivity uygulamada uygulanır. Amaçlarla çalışma hakkında daha fazla ayrıntı için lütfen SiriKit Kavramlarını Anlama ve SiriKit Uygulama kılavuzlarımıza bakın.

Etkileşimleri Bağışlar

Uygulamanın etkileşimleri nasıl bağışlayabileceğinize göz atın:

Etkileşimleri Bağışlayarak Genel Bakış

Uygulama, Amaç (INIntent), Katılımcılar ve Meta Veriler içeren bir nesne oluştururINInteraction. Intent, görüntülü arama yapma veya kısa mesaj gönderme gibi bir kullanıcı eylemini temsil eder. Katılımcılar, iletişimi alan kişileri içerir. Meta Veriler, iletiyi başarıyla gönderme gibi ek bilgileri tanımlar.

Geliştirici hiçbir zaman doğrudan veya INIntentResponseörneğini INIntent oluşturmaz ve bu üst sınıflardan devralan belirli alt sınıflardan birini (uygulamanın kullanıcı adına gerçekleştirdiği göreve göre) kullanır. Örneğin, INSendMessageIntent kısa INSendMessageIntentResponse mesaj göndermek için.

Etkileşim tam olarak dolduruldıktan sonra, sisteme etkileşimin DonateInteraction kullanılabilir olduğunu bildirmek için yöntemini çağırın.

Kullanıcı Kişi kartından uygulamayla etkileşim kurduğunda, etkileşim bir NSUserActivityile birlikte gelir ve bu da uygulamayı başlatmak için kullanılır:

Etkileşim, uygulamayı başlatmak için kullanılan bir NSUserActivity ile birlikte gelir

İleti Gönderme Amacının aşağıdaki örneğine göz atın:

using System;
using Foundation;
using UIKit;
using Intents;

namespace MonkeyNotification
{
  public class DonateInteraction
  {
    #region Constructors
    public DonateInteraction ()
    {
    }
    #endregion

    #region Public Methods
    public void SendMessageIntent (string text, INPerson from, INPerson[] to)
    {

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

      // Define details
      var info = new NSMutableDictionary ();
      info.Add (new NSString ("message"), new NSString (text));

      // Populate Activity
      activity.Title = "Sent MonkeyChat Message";
      activity.UserInfo = info;

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

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

      // Create message Intent
      var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

      // Create Intent Reaction
      var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

      // Create interaction
      var interaction = new INInteraction (intent, response);

      // Donate interaction to the system
      interaction.DonateInteraction ((err) => {
        // Handle donation error
        ...
      });
    }
    #endregion
  }
}

Bu koda ayrıntılı olarak baktığımızda bir örneğini NSUserActivity oluşturur ve doldurur (yukarıdaki Etkinlik Oluşturma bölümünde gösterildiği gibi). Ardından, bir örneğini INSendMessageIntent oluşturur (öğesinden INIntentdevralır) ve gönderilen iletinin ayrıntılarıyla doldurur:

var intent = new INSendMessageIntent (to, text, "", "MonkeyChat", from);

bir INSendMessageIntentResponse oluşturulur ve yukarıda oluşturulandan NSUserActivity geçirilir:

var response = new INSendMessageIntentResponse (INSendMessageIntentResponseCode.Success, activity);

, INInteraction yeni oluşturulan İleti Gönderme Amacından (INSendMessageIntent) ve Yanıttan (INSendMessageIntentResponse) oluşturulur:

var interaction = new INInteraction (intent, response);

Son olarak, sistem Etkileşim bildirimidir:

// Donate interaction to the system
interaction.DonateInteraction ((err) => {
  // Handle donation error
  ...
});

Uygulamanın bağışı başarılı veya başarısız olarak yanıtladığı bir tamamlama işleyicisi geçirilir.

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.

Schema.org

Yukarıda gösterildiği gibi, NSUserActivity sistemin kullanıcının şu anda ekranda hangi bilgilerle çalıştığını anlamasına yardımcı olur. Schema.org, web sayfalarına benzer özellikler ekler.

Schema.org, web sitesine aynı tür konum tabanlı etkileşimler sağlayabilir. Apple, yeni konum önerilerini Yerel bir uygulamada olduğu gibi Safari'de görüntülendiğinde de çalışacak şekilde tasarladı.

Bazı Schema.org arka plan:

  • Açık bir web işaretleme sözlüğü standardı sağlar.
  • Web sayfalarına yapılandırılmış meta veriler ekleyerek çalışır.
  • Çeşitli kavramları temsil eden 500'den fazla şema vardır.
  • Geliştirici bunu web sitesinde uygulayarak yerel bir uygulamada kullanmanın NSUserActivity bazı avantajlarını elde edebilir.

Şemalar, Restaurant gibi belirli türlerin Yerel İşletme gibi daha genel türlerden devraldığı yapı gibi bir ağaçta düzenlenir. Daha fazla bilgi için bkz . Schema.org.

Örneğin, web sayfasında aşağıdaki veriler varsa:

<script type="application/ld+json">
{
  "@context":"http://schema.org",
  "@type":"Restaurant",
  "telephone":"(415) 781-1111",
  "url":"https://www.yanksing.com",
  "address":{
    "@type":"PostalAddress",
    "streetAddress":"101 Spear St",
    "addressLocality":"San Francisco",
    "postalCode":"94105",
    "addressRegion":"CA"
  },
  "aggregateRating":{
    "@type":"AggregateRating",
    "ratingValue":"3.5",
    "reviewCount":"2022"
  }
}
</script>

Kullanıcı bu sayfayı Safari'de ziyaret ettiyse ve sonra başka bir uygulamaya geçtiyse, sayfadaki konum bilgileri yakalanır ve sistemin diğer bölümlerinde Konum Önerisi olarak sunulur (yukarıdaki Etkinliklerde görüldüğü gibi).

Safari, web sayfasında aşağıdaki şema özelliklerinden herhangi birine bağlı olan her şeyi ayıklar:

  • Posta Adresi
  • Coğrafi Koordinatlar
  • Telefon özelliği.

Daha fazla bilgi için web işaretlemesi ile arama kılavuzumuza bakın.

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.

Uygulamanın Konum Önerilerini kullanmasının iki ana yolu vardır:

  • QuickType klavyesi aracılığıyla.
  • Doğrudan yönlendirme uygulamalarında konum bilgilerini kullanarak.

Konum Önerileri ve QuickType Klavyesi

Uygulama metin tabanlı biçimlerdeki adreslerle ilgileniyorsa, uygulama QuickType kullanıcı arabirimi aracılığıyla Konum Önerileri'nin avantajlarından yararlanabilir. iOS 10, QuickType kullanıcı arabirimini aşağıdaki özelliklerle genişletir:

  • Uygulama, kullanıcı arabirimindeki metin alanları için anlamsal amaç hakkında ipuçları ekleyebilir.
  • Uygulama, uygulamada proaktif öneriler alabilir.
  • Uygulama gelişmiş otomatik düzeltmeden yararlanabilir.

iOS 10'daki metin alanı denetimlerinin yeni TextContentType özelliği, geliştiricinin kullanıcının belirli bir alana gireceği değerin anlam amacını tanımlamasına olanak tanır. Örneğin:

var textField = new UITextField();
textField.TextContentType = UITextContentType.FullStreetAddress;

Sisteme, uygulamanın kullanıcının verilen alana tam bir sokak adresi girmesini beklediğini bildirir. Bu, kullanıcı bu alana bir değer girerken QuickType klavyesinin klavyede Otomatik Olarak Konum Önerileri sağlamasına olanak tanır.

Statik sınıfta geliştiricinin kullanabileceği yaygın türlerden birkaçı UITextContentType aşağıdadır:

  • Name
  • GivenName
  • FamilyName
  • Location
  • FullStreetAddress
  • AddressCityAndState
  • TelephoneNumber
  • EmailAddress

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.
  • iOS'a, kullanıcı etkileşimi temelinde uygun zamanlarda uygulamayı kullanıcıya önermeyi öğrenme olanağı sağlamak için.

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

iOS 10'da yeni eklenen 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

});

Medya Uygulaması Önerileri

Uygulama, iOS 10 ile pod yayını uygulaması veya ses veya video gibi akış medyası içeriği gibi herhangi bir medya türünü işlerse sistemdeki Medya Önerileri'nin avantajlarından yararlanabilir.

Medyayı işleyen uygulamalar için iOS aşağıdaki davranışları destekler:

  • iOS, kullanıcının önceki davranışlarına göre kullanma olasılığı olan uygulamaları yükseltmektedir.
  • Uygulamayla ilgili öneriler Spotlight ve Today View'da sunulacaktır.
  • Uygulama aşağıdaki tetikleyicilerden birini karşılıyorsa kilit ekranı önerisine yükseltilebilir:
    • Kulaklık veya Bluetooth cihazı takıldıktan sonra bir bağlantı kurar.
    • Arabaya bindikten sonra.
    • Eve veya işe geldikten sonra.

Geliştirici, iOS 10'a basit bir API çağrısı ekleyerek medya uygulamasının kullanıcıları için daha ilgi çekici bir kilit ekranı deneyimi oluşturabilir. Medya kayıttan yürütmeyi MPPlayableContentManager yönetmek için sınıfını kullanarak, uygulamanın kilit ekranında tam medya denetimleri (Müzik uygulaması tarafından sunulanlar gibi) sunulur.

using System;
using MediaPlayer;
using UIKit;

namespace MonkeyPlayer
{
  public class PlayableContentDelegate : MPPlayableContentDelegate
  {
    #region Constructors
    public PlayableContentDelegate ()
    {
    }
    #endregion

    #region Override methods
    public override void InitiatePlaybackOfContentItem (MPPlayableContentManager contentManager, Foundation.NSIndexPath indexPath, Action<Foundation.NSError> completionHandler)
    {
      // Access the media item to play
      var item = LoadMediaItem (indexPath);

      // Populate the lock screen
      PopulateNowPlayingItem (item);

      // Prep item to be played
      var status = PreparePlayback (item);

      // Call completion handler
      completionHandler (null);
    }
    #endregion

    #region Public Methods
    public MPMediaItem LoadMediaItem (Foundation.NSIndexPath indexPath)
    {
      var item = new MPMediaItem ();

      // Load item from media store
      ...

      return item;
    }

    public void PopulateNowPlayingItem (MPMediaItem item)
    {
      // Get Info Center and album art
      var infoCenter = MPNowPlayingInfoCenter.DefaultCenter;
      var albumArt = (item.Artwork == null) ? new MPMediaItemArtwork (UIImage.FromFile ("MissingAlbumArt.png")) : item.Artwork;

      // Populate Info Center
      infoCenter.NowPlaying.Title = item.Title;
      infoCenter.NowPlaying.Artist = item.Artist;
      infoCenter.NowPlaying.AlbumTitle = item.AlbumTitle;
      infoCenter.NowPlaying.PlaybackDuration = item.PlaybackDuration;
      infoCenter.NowPlaying.Artwork = albumArt;
    }

    public bool PreparePlayback (MPMediaItem item)
    {
      // Prepare media item for playback
      ...

      // Return results
      return true;
    }
    #endregion
  }
}

Özet

Bu makalede Proaktif Öneriler ele alınmıştır ve geliştiricinin 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.