Aracılığıyla paylaş


iOS 11'de SiriKit Güncelleştirmeler

SiriKit, iOS 10'da bir dizi hizmet etki alanıyla (egzersizler, sürüş rezervasyonu ve arama yapma dahil) tanıtıldı. SiriKit kavramları ve uygulamanızda SiriKit'i uygulama hakkında bilgi için SiriKit bölümüne bakın.

Siri görev listesi tanıtımı

iOS 11'de SiriKit şu yeni ve güncelleştirilmiş amaç etki alanlarını ekler:

  • Listeler ve Notlar – Yeni! Uygulamaların görevleri ve notları işlemesi için bir API sağlar.
  • Görsel Kodlar – Yeni! Siri, kişi bilgilerini paylaşmak veya ödeme işlemlerine katılmak için QR kodlarını görüntüleyebilir.
  • Ödemeler – Ödeme etkileşimleri için arama ve aktarım amaçları eklendi.
  • Yolculuk rezervasyonu – Yolculuğu iptal etme ve geri bildirim amaçları eklendi.

Diğer yeni özellikler şunlardır:

  • Alternatif uygulama adları – Müşterilerin Alternatif adlar/telaffuzlar sunarak Siri'ye uygulamanızı hedeflemesini söylemesine yardımcı olan diğer adlar sağlar.
  • Antrenmanları Başlatma – Arka planda bir antrenman başlatma olanağı sağlar.

Bu özelliklerden bazıları aşağıda açıklanmıştır. Diğer ayrıntılar için Apple'ın SiriKit belgelerine bakın.

Listeler ve Notlar

Yeni listeler ve notlar etki alanı, uygulamaların Siri sesli istekleri aracılığıyla görevleri ve notları işlemesi için bir API sağlar.

Görevler

  • Başlığı ve tamamlanma durumunu belirtin.
  • İsteğe bağlı olarak bir son tarih ve konum ekleyin.

Notlar

  • Başlığınız ve içerik alanınız var.

Hem görevler hem de notlar gruplar halinde düzenlenebilir.

SiriKit İsteğini İşleme

Şu adımları izleyerek sirikit isteğini işleyin:

  1. Çözümle – Parametreleri doğrulayın ve kullanıcıdan daha fazla bilgi isteyin (gerekirse).
  2. Onayla – İsteğin işlenebildiğini son doğrulama ve doğrulama.
  3. Handle : İşlemi gerçekleştirin (verileri güncelleştirme veya ağ işlemleri gerçekleştirme).

İlk iki adım isteğe bağlıdır (ancak önerilir) ve son adım gereklidir. SiriKit bölümünde daha ayrıntılı yönergeler vardır.

Yöntemleri Çözme ve Onaylama

Bu isteğe bağlı yöntemler kodunuzun doğrulama gerçekleştirmesine, varsayılanları seçmesine veya kullanıcıdan ek bilgi istemesine olanak tanır.

Örneğin, arabirimi için IINCreateTaskListIntent gerekli yöntem şeklindedir HandleCreateTaskList. Siri etkileşimi üzerinde daha fazla denetim sağlayan dört isteğe bağlı yöntem vardır:

  • ResolveTitle – Başlığı doğrular, varsayılan bir başlık ayarlar (uygunsa) veya verilerin gerekli olmadığını bildirir.
  • ResolveTaskTitles – Kullanıcı tarafından konuşulan görevlerin listesini doğrular.
  • ResolveGroupName – Grup adını doğrular, varsayılan bir grup seçer veya verilerin gerekli olmadığını bildirir.
  • ConfirmCreateTaskList – Kodunuzun istenen işlemi gerçekleştirebildiğini doğrular, ancak gerçekleştirmez (yalnızca Handle* yöntemler verileri değiştirmelidir).

Amacı İşleme

Listeler ve notlar etki alanında üç görev ve notlar için üç amaç vardır. Bu amaçları işlemek için uygulamanız gereken yöntemler şunlardır:

  • Görevler için:
    • HandleAddTasks
    • HandleCreateTaskList
    • HandleSetTaskAttribute
  • Notlar için:
    • HandleCreateNote
    • HandleAppendToNote
    • HandleSearchForNotebookItems

Her yöntemin, Siri'nin kullanıcının isteğinden ayrıştırdığı tüm bilgileri (ve yöntemlerinde Resolve*Confirm* güncelleştirilmiş olabilir) içeren belirli bir amaç türü geçirilir. Uygulamanız sağlanan verileri ayrıştırmalı, ardından verileri depolamak veya başka bir şekilde işlemek için bazı eylemler gerçekleştirmeli ve Siri'nin konuştuğu ve kullanıcıya gösterdiği bir sonuç döndürmelidir.

Yanıt Kodları

Gerekli Handle* ve isteğe bağlı Confirm* yöntemler, tamamlanma işleyicisine geçirdikleri nesnede bir değer ayarlayarak bir yanıt kodu gösterir. Yanıtlar numaralandırmadan INCreateTaskListIntentResponseCode gelir:

  • Ready – Onay aşaması sırasında (yani bir yöntemden, ancak bir Confirm* yöntemden Handle* değil) döndürür.
  • InProgress – Uzun süre çalışan görevler (ağ/sunucu işlemi gibi) için kullanılır.
  • Success – Başarılı işlemin ayrıntılarıyla yanıt verir (yalnızca bir Handle* yöntemden).
  • Failure – Bir hata oluştuğu ve işlemin tamamlanamadıdığı anlamına gelir.
  • RequiringAppLaunch – Amaç tarafından işlenemez, ancak işlem uygulamada mümkündür.
  • Unspecified – Kullanmayın: kullanıcıya hata iletisi görüntülenir.

Apple'ın SiriKit listeleri ve notları belgelerinde bu yöntemler ve yanıtlar hakkında daha fazla bilgi edinin.

Listeleri ve Notları Uygulama

İlk olarak, SiriKit desteği eklemek için iOS uygulamanız için şu adımları izleyin:

  1. Entitlements.plist dosyasında SiriKit'i işaretleyin.
  2. Info.plist'e Gizlilik – Siri Kullanım Açıklaması anahtarını ve müşterileriniz için bir ileti ekleyin.
  3. Kullanıcıdan INPreferences.RequestSiriAuthorization Siri etkileşimlerine izin vermesini istemesi için uygulamadaki yöntemini çağırın.
  4. Geliştirici Portalı'nda Uygulama Kimliğinize SiriKit ekleyin ve yeni yetkilendirmeyi eklemek için sağlama profillerinizi yeniden oluşturun.

Ardından Siri isteklerini işlemek için uygulamanıza yeni bir uzantı projesi ekleyin:

  1. Çözümünüzde sağ tıklayın ve Yeni Proje Ekle>... öğesini seçin.
  2. iOS > Uzantı Amaçları Uzantısı > şablonunu seçin.
  3. İki yeni proje eklenecek: Intent ve IntentUI. Kullanıcı arabirimini özelleştirme isteğe bağlıdır, bu nedenle örnek yalnızca Intent projesindeki kodu içerir.

Uzantı projesi, tüm SiriKit isteklerinin işlendiği yerdir. Ayrı bir uzantı olarak, ana uygulamanızla iletişim kurmak için otomatik olarak herhangi bir yolu yoktur; bu genellikle uygulama gruplarını kullanarak paylaşılan dosya depolaması uygulanarak çözülür.

IntentHandler'ı yapılandırma

IntentHandler sınıfı Siri isteklerinin giriş noktasıdır; her amaç, isteği işleyebilen bir nesne döndüren yöntemine geçirilirGetHandler.

Aşağıdaki kodda basit bir uygulama gösterilmektedir:

[Register("IntentHandler")]
public partial class IntentHandler : INExtension, IINNotebookDomainHandling
{
  protected IntentHandler(IntPtr handle) : base(handle)
  {}
  public override NSObject GetHandler(INIntent intent)
  {
    // This is the default implementation.  If you want different objects to handle different intents,
    // you can override this and return the handler you want for that particular intent.
    return this;
  }
  // add intent handlers here!
}

sınıfının öğesinden INExtensiondevralması gerekir ve örnek listeleri ve not amaçlarını işleyecek olduğundan, de uygular IINNotebookDomainHandling.

Not

  • IOS SDK'sından protokolleri bağlarken Xamarin'in bağlı olduğu bir büyük Iile ön ek olarak eklenecek arabirimler için .NET'te bir kural vardır.
  • Xamarin ayrıca iOS'taki tür adlarını korur ve Apple, bir türün ait olduğu çerçeveyi yansıtmak için tür adlarındaki ilk iki karakteri kullanır.
  • Çerçeve için Intents türler ön ekinde IN* (örn. INExtension) bulunur, ancak bunlar arabirim değildir.
  • Ayrıca protokollerin (C# dilinde arabirim haline gelen) gibi iki Isn IINAddTasksIntentHandlingile sonuçlandığını da izler.

Amaçları İşleme

Her amaç (Görev Ekle, Görev Özniteliği Ayarla vb.) aşağıda gösterilene benzer tek bir yöntemde uygulanır. yöntemi üç ana işlev gerçekleştirmelidir:

  1. Amacı işleme – Siri tarafından ayrıştırılan veriler amaç türüne özgü bir intent nesnede kullanılabilir hale getirilir. Uygulamanız isteğe bağlı Resolve* yöntemleri kullanarak bu verileri doğrulamış olabilir.
  2. Veri depoyu doğrulama ve güncelleştirme – Verileri dosya sistemine (ana iOS uygulamasının da erişebilmesi için Uygulama Gruplarını kullanarak) veya bir ağ isteği aracılığıyla kaydedin.
  3. Yanıt sağlama – Kullanıcıya okuması/görüntülemesi completion için Siri'ye yanıt göndermek için işleyiciyi kullanın:
public void HandleCreateTaskList(INCreateTaskListIntent intent, Action<INCreateTaskListIntentResponse> completion)
{
  var list = TaskList.FromIntent(intent);
  // TODO: have to create the list and tasks... in your app data store
  var response = new INCreateTaskListIntentResponse(INCreateTaskListIntentResponseCode.Success, null)
  {
    CreatedTaskList = list
  };
  completion(response);
}

null Yanıta ikinci parametre olarak geçirildiğini göreceksiniz; bu kullanıcı etkinliği parametresidir ve sağlanmadığında varsayılan bir değer kullanılır. iOS uygulamanız desteklediği sürece Info.plist dosyasındaki NSUserActivityTypesanahtar aracılığıyla özel bir etkinlik türü ayarlayabilirsiniz. Ardından, uygulamanız açıldığında bu durumu işleyebilir ve belirli işlemler gerçekleştirebilirsiniz (örneğin, ilgili bir görünüm denetleyicisine açma ve Siri işleminden verileri yükleme).

Örnek ayrıca sonucu sabit kodlar Success , ancak gerçek senaryolarda düzgün hata raporlama eklenmelidir.

Test İfadeleri

Aşağıdaki test tümcecikleri örnek uygulamada çalışmalıdır:

  • "TasksNotes'ta elmalar, muzlar ve armutlarla bir bakkal listesi yapın"
  • "TaskNotes'ta görev WWDC ekle"
  • "Görev WWDC'sini TasksNotes'taki eğitim listesine ekle"
  • "TasksNotes'ta WWDC'ye tamamlandı olarak işaretle"
  • "Görevler'deNotlar, eve geldiğimde iphone satın almamı anımsatıyor"
  • "Satın alma i Telefon TasksNotes'ta tamamlandı olarak işaretle"
  • "TasksNotes'ta saat 08:00'de evden ayrılmamı anımsat"

Yeni liste örneği oluşturmaGörevi tam örnek olarak ayarlama

Not

iOS 11 Simülatörü Siri ile test etme özelliğini destekler (önceki sürümlerden farklı olarak).

Gerçek cihazlarda test ediyorsanız, SiriKit desteği için Uygulama Kimliğinizi ve sağlama profillerinizi yapılandırmayı unutmayın.

Alternatif Adlar

Bu yeni iOS 11 özelliği, kullanıcıların Siri ile uygulamayı doğru şekilde tetiklemelerine yardımcı olmak için uygulamanız için alternatif adlar yapılandırabileceğiniz anlamına gelir. iOS uygulama projesinin Info.plist dosyasına aşağıdaki anahtarları ekleyin:

Alternatif uygulama adı anahtarlarını ve değerlerini gösteren Info.plist

Alternatif uygulama adları ayarlandığında, örnek uygulama (aslında TasksNotes olarak adlandırılır ) için aşağıdaki tümcecikler de çalışır:

  • "MonkeyNotes'ta elmalar, muzlar ve armutlarla bir bakkal listesi yapın"
  • "MonkeyTodo'da görev WWDC ekle"

Sorun giderme

Örneği çalıştırırken veya SiriKit'i kendi uygulamalarınıza eklerken karşılaşabileceğiniz bazı hatalar:

NSInternalInconsistencyException

Objective-C özel durum oluştu. Ad: NSInternalInconsistencyException Nedeni: INPreferences: 0x60400082ff00> sınıfının <kullanılması için com.apple.developer.siri yetkilendirmesi gerekir. Xcode projenizde Siri özelliğini etkinleştirdiniz mi?

  • SiriKit, Entitlements.plist dosyasında işaretlenmiştir.

  • Entitlements.plist, Proje Seçenekleri > Derlemesi > iOS Paket İmzalama bölümünde yapılandırılır.

    Yetkilendirmelerin doğru ayarlandığını gösteren proje seçenekleri

  • (cihaz dağıtımı için) Uygulama kimliği SiriKit'i etkinleştirdi ve sağlama profilini indirdi.