Bağlama Özel İçeriği Asistan için Optimize Etme

Android 6.0 Marshmallow, kullanıcıların Google Asistan gibi asistan uygulamaları aracılığıyla uygulamalarla etkileşimde bulunmaları için yeni bir yol sunar. Asistan, kullanıcıların geçerli etkinlik için bağlamla alakalı işlemleri edinmek için görüntüleyebileceği üst düzey bir penceredir. Bu işlemler, cihazdaki diğer uygulamalara derin bağlantılar içerebilir.

Kullanıcılar, Asistan'ı Ana Sayfa düğmesine uzun basarak veya bir anahtar kelime söyleyerek etkinleştirir. Buna karşılık, sistem bağlamsal olarak alakalı işlemleri gösteren üst düzey bir pencere açar.

Google Asistan gibi bir asistan uygulaması, Asistan yer paylaşımlı penceresini Android platform düzeyindeki işlevlerle çalışan Now on Tap adlı bir özellik aracılığıyla uyguluyor. Sistem, kullanıcının bir asistan uygulaması seçmesine izin verir. Bu uygulama, Android'in Assist API'sini kullanarak uygulamanızdan bağlamsal bilgiler alır.

Bu kılavuzda, Android uygulamalarının asistan kullanıcı deneyimini iyileştirmek için Android Assist API'sini nasıl kullandığı açıklanmaktadır. Asistan'ın başlatıp kontrol edebilmesi için medya uygulaması oluşturmayı öğrenmek için Google Asistan ve medya uygulamaları başlıklı makaleyi inceleyin.

Asistanları kullanma

Şekil 1'de asistanla tipik bir kullanıcı etkileşimi gösterilmektedir. Kullanıcı Ana Sayfa düğmesine uzun bastığında, Assist API geri çağırmaları kaynak uygulamada çağrılır (1. adım). Asistan, yer paylaşımlı pencereyi oluşturur (2. ve 3. adımlar) ve ardından kullanıcı gerçekleştirecek işlemi seçer. Asistan, seçilen işlemi yürütür. Örneğin, (hedef) restoran uygulamasına (4. adım) derin bağlantı içeren bir niyet etkinleşir.

Şekil 1. Google uygulamasının Now on Tap özelliğiyle Asistan etkileşimi örneği

Kullanıcılar, Ayarlar > Uygulamalar > Varsayılan Uygulamalar > Destek ve ses girişi'ni seçerek asistanı yapılandırabilir. Kullanıcılar, ekran içeriklerine metin olarak erişme ve ekran görüntüsüne erişme gibi sistem seçeneklerini Şekil 2'de gösterildiği gibi değiştirebilirler.

Şekil 2. Asistan ve ses girişi ayarları

Kaynak uygulama

Uygulamanızın, kullanıcıya bilgi kaynağı olarak Asistan'la birlikte çalıştığından emin olmak için yalnızca erişilebilirlikle ilgili en iyi uygulamalara uymanız gerekir. Bu bölümde, Asistan kullanıcı deneyimini iyileştirmeye yardımcı olacak ek bilgilerin nasıl sağlanacağı ve özel Görünümler gibi özel işlem gerektiren senaryolar açıklanmaktadır.

Ek bilgileri asistanla paylaşın

Uygulamanız, metin ve ekran görüntüsüne ek olarak asistanla başka bilgiler paylaşabilir. Örneğin, müzik uygulamanız mevcut albüm bilgilerini iletmeyi seçebilir. Böylece asistan, mevcut etkinliğe göre daha akıllı işlemler önerebilir. Assist API'lerinin medya denetimleri sağlamadığını unutmayın. Medya kontrolleri eklemek için Google Asistan ve medya uygulamaları konusuna bakın.

Uygulamanız, asistana ek bilgi sağlamak için bir uygulama dinleyiciyi kaydederek genel uygulama bağlamı sağlar ve Şekil 3'te gösterildiği gibi etkinlik geri çağırmalarıyla etkinliğe özgü bilgiler sağlar:

Şekil 3. Assist API yaşam döngüsü sırası şeması

Uygulama, genel uygulama bağlamı sağlamak için Application.OnProvideAssistDataListener uygulamasını oluşturur ve registerOnProvideAssistDataListener() kullanarak kaydeder. Etkinliğe özel bağlamsal bilgiler sağlamak için etkinlik, onProvideAssistData() ve onProvideAssistContent() öğelerini geçersiz kılar. Bu iki etkinlik yöntemi, isteğe bağlı global geri çağırmanın çağrılmasından sonra çağrılır. Geri çağırmalar ana iş parçacığında yürütüldüğü için istemde tamamlanmalıdır. Geri çağırmalar yalnızca etkinlik çalışıyorken çağrılır.

Bağlam sağlama

Kullanıcı asistanı etkinleştirdiğinde, mevcut uygulamanın tüm bağlamını AssistStructure örneği olarak gösteren tam bir ACTION_ASSIST Intent'i derlemek için onProvideAssistData() çağrılır. Destek amacının EXTRA_ASSIST_CONTEXT bölümünde görünecek şekilde pakete istediğiniz her şeyi eklemek için bu yöntemi geçersiz kılabilirsiniz.

İçerik açıklama

Uygulamanız, mevcut etkinlikle alakalı, içerikle ilgili referanslar sağlayarak asistan kullanıcı deneyimini iyileştirmek için onProvideAssistContent() özelliğini kullanabilir. Uygulama içeriğini, Schema.org tarafından tanımlanan ortak sözlüğü kullanarak bir JSON-LD nesnesi kullanarak tanımlayabilirsiniz. Aşağıdaki örnekte bir müzik uygulaması, kullanıcının şu anda görüntülemekte olduğu müzik albümünü açıklamak için yapılandırılmış veriler sağlar:

Kotlin

override fun onProvideAssistContent(assistContent: AssistContent) {
    super.onProvideAssistContent(assistContent)

    val structuredJson: String = JSONObject()
            .put("@type", "MusicRecording")
            .put("@id", "https://example.com/music/recording")
            .put("name", "Album Title")
            .toString()

    assistContent.structuredData = structuredJson
}

Java

@Override
public void onProvideAssistContent(AssistContent assistContent) {
  super.onProvideAssistContent(assistContent);

  String structuredJson = new JSONObject()
       .put("@type", "MusicRecording")
       .put("@id", "https://example.com/music/recording")
       .put("name", "Album Title")
       .toString();

  assistContent.setStructuredData(structuredJson);
}

Ayrıca, aşağıdaki avantajları sağlayabilecek özel onProvideAssistContent() uygulamalarıyla kullanıcı deneyimini de iyileştirebilirsiniz:

Not: Özel metin seçimi uygulaması kullanan uygulamaların muhtemelen onProvideAssistContent() yöntemini uygulaması ve setClipData() yöntemini çağırması gerekir.

Varsayılan uygulama

onProvideAssistData() veya onProvideAssistContent() geri çağırması uygulanmazsa sistem, geçerli pencere güvenli olarak işaretlenmediği sürece devam eder ve otomatik olarak toplanan bilgileri asistana iletir. Şekil 3'te gösterildiği gibi sistem, metin toplamak ve hiyerarşi bilgilerini görüntülemek için varsayılan onProvideStructure() ve onProvideVirtualStructure() uygulamalarını kullanır. Görünümünüzde özel metin çizimi kullanılıyorsa asistana setText(CharSequence) yöntemini çağırarak kullanıcıya gösterilen metni sağlamak için onProvideStructure() değerini geçersiz kılın.

Çoğu durumda erişilebilirlik desteğini uygulamak, asistanın ihtiyaç duyduğu bilgileri edinmesini sağlar. Erişilebilirlik desteğini uygulamak için Uygulamaları Erişilebilir Hale Getirme bölümünde açıklanan, aşağıdakiler de dahil olmak üzere en iyi uygulamaları dikkate alın:

Asistanların görüntüleme sayıları hariç

Uygulamanız, hassas bilgileri işlemek için WindowManager öğesinin FLAG_SECURE düzen parametresini ayarlayarak geçerli görünümü asistandan hariç tutabilir. İletişim kutuları da dahil olmak üzere, etkinlik tarafından oluşturulan her pencere için FLAG_SECURE değerini açık bir şekilde ayarlamanız gerekir. Uygulamanız, bir yüzeyi asistandan hariç tutmak için setSecure() özelliğini de kullanabilir. Asistan'dan gelen tüm görüntülemeleri hariç tutmak için global (uygulama düzeyinde) bir mekanizma yoktur. FLAG_SECURE değerinin, Assist API geri çağırmalarının etkinleşmesini durdurmasına neden olmadığını unutmayın. FLAG_SECURE kullanan etkinlik, bu kılavuzun önceki bölümlerinde açıklanan geri çağırmaları kullanarak Asistan uygulamasına açık bir şekilde bilgi sağlamaya devam edebilir.

Not: Kurumsal hesaplarda (Android for Work) yönetici, DevicePolicyManager API'sinin setScreenCaptureDisabled() yöntemini kullanarak iş profili için asistan verilerinin toplanmasını devre dışı bırakabilir.

Sesli etkileşimler

Assist API geri çağırmaları da anahtar kelime öbeği algılamaya bağlı olarak çağrılır. Daha fazla bilgi için Sesli İşlemler dokümanlarına bakın.

Z sırası dikkat edilmesi gereken noktalar

Bir asistan, geçerli etkinliğin üstünde gösterilen hafif bir yer paylaşımlı pencere kullanır. Kullanıcı istediği zaman asistanı etkinleştirebileceği için Şekil 4'te gösterildiği gibi yer paylaşımlı pencereye müdahale eden kalıcı sistem uyarısı pencereleri oluşturmayın.

Şekil 4. Destek katmanı Z sırası

Uygulamanız, sistem uyarısı pencereleri kullanıyorsa bunları hemen kaldırın. Zira bu pencereleri ekranda bırakmak kullanıcı deneyimini olumsuz etkiler.

Hedef uygulama

Asistan uygulamaları, genellikle hedef uygulamaları bulmak için derin bağlantıdan yararlanır. Uygulamanızı potansiyel bir hedef uygulama haline getirmek için derin bağlantı desteği eklemeyi düşünebilirsiniz. Mevcut kullanıcı bağlamı ile derin bağlantılar veya yer paylaşımlı pencerede gösterilen (Şekil 1'deki 3. adımda gösterilmektedir) diğer potansiyel işlemler arasındaki eşleşme, Google Asistan'ın uygulamasına özeldir. Örneğin Google Asistan Uygulaması, trafiği hedef uygulamalara yönlendirmek için derin bağlantıyı ve Uygulama Bağlantıları'nı kullanır.

Kendi Asistanınızı Kullanma

Kendi asistanınızı kullanmak isteyebilirsiniz. Şekil 2'de gösterildiği gibi kullanıcı, etkin asistan uygulamasını seçebilir. Asistan uygulaması, bu VoiceInteraction örneğinde gösterildiği gibi VoiceInteractionSessionService ve VoiceInteractionSession özelliklerini sağlamalıdır. BIND_VOICE_INTERACTION izni de gerektirir. Böylece asistan, onHandleAssist() içindeki AssistStructure örneği olarak temsil edilen metni ve görünüm hiyerarşisini alabilir. Ekran görüntüsünü onHandleScreenshot() üzerinden alır.