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şim kurmaları için yeni bir yöntem sunar. Asistan, kullanıcıların mevcut etkinlikle ilgili bağlamsal olarak alakalı işlemler yapmak için görüntüleyebileceği üst düzey bir penceredir. Bu işlemler, cihazdaki diğer uygulamalara ait derin bağlantılar içerebilir.

Kullanıcılar, ana sayfa düğmesine uzun basarak veya bir anahtar kelime söyleyerek asistanı etkinleştirir. Sistem buna karşılık, bağlama uygun işlemleri gösteren üst düzey bir pencere açar.

Google Asistan gibi bir asistan uygulaması, Android platform düzeyinde işlevlerle çalışan Now on Tap adlı bir özellik aracılığıyla asistan yer paylaşımı penceresini uygular. Sistem, kullanıcının Android'in Assist API'sini kullanarak uygulamanızdan bağlamsal bilgiler edinen bir asistan uygulaması seçmesine olanak tanı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şlatabileceği ve kontrol edebileceği bir medya uygulaması oluşturmayı öğrenmek için Google Asistan ve medya uygulamaları bölümüne bakın.

Asistanları kullanma

Şekil 1'de, kullanıcının asistanla tipik bir etkileşimi gösterilmektedir. Kullanıcı ana sayfa düğmesine uzun bastığında kaynak uygulamasında Assist API geri çağırma işlevleri çağrılır (1. adım). Asistan, yer paylaşımı penceresini oluşturur (2. ve 3. adımlar) ve ardından kullanıcı, yapılacak işlemi seçer. Asistan, seçilen işlemi gerçekleştirir. Örneğin, (hedef) restoran uygulamasına derin bağlantıyla intent etkinleşir (4. adım).

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

Kullanıcılar, Ayarlar > Uygulamalar > Varsayılan Uygulamalar > Asistan 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ü alma gibi sistem seçeneklerini Şekil 2'de gösterildiği gibi değiştirebilir.

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

Kaynak uygulama

Uygulamanızın kullanıcı için bir bilgi kaynağı olarak Asistan'la birlikte çalıştığından emin olmak istiyorsanız yalnızca erişilebilirlik en iyi uygulamalarını izlemeniz yeterlidir. Bu bölümde, özel görünümler gibi özel işlem gerektiren senaryoların yanı sıra asistan kullanıcı deneyimini iyileştirmeye yardımcı olacak ek bilgilerin nasıl sağlanacağı açıklanmaktadır.

Asistan ile ek bilgi paylaşma

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

Uygulamanız, asistana ek bilgi sağlamak için bir uygulama dinleyicisi kaydederek küresel 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ü dizisi şeması

Uygulama, genel uygulama bağlamı sağlamak için Application.OnProvideAssistDataListener uygulamasını oluşturur ve registerOnProvideAssistDataListener() kullanarak kaydeder. Etkinlik, etkinliğe özgü bağlamsal bilgiler sağlamak için onProvideAssistData() ve onProvideAssistContent()'u geçersiz kılar. İki etkinlik yöntemi, isteğe bağlı genel geri çağırma işlevi sonrasında çağrılır. Geri çağırmalar ana iş parçacığında yürütüldüğü için istemde tamamlanmalıdır. Geri çağırma işlevleri yalnızca etkinlik çalışırken çağrılır.

Bağlam sağlama

Kullanıcı asistanı etkinleştirdiğinde onProvideAssistData(), geçerli uygulamanın tüm bağlamı AssistStructure örneği olarak temsil edilen tam bir ACTION_ASSIST Intent derlemesi için çağrılır. Destek amacının EXTRA_ASSIST_CONTEXT bölümünde görünmesini istediğiniz her şeyi pakete yerleştirmek için bu yöntemi geçersiz kılabilirsiniz.

İçeriği açıklama

Uygulamanız, mevcut etkinlikle ilgili içerik referansları sağlayarak Asistan kullanıcı deneyimini iyileştirmek için onProvideAssistContent() özelliğini uygulayabilir. Uygulama içeriğini, bir JSON-LD nesnesi aracılığıyla Schema.org tarafından tanımlanan ortak sözlüğü kullanarak açıklayabilirsiniz. Aşağıdaki örnekte bir müzik uygulaması, kullanıcının 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);
}

onProvideAssistContent()'ün özel uygulamalarını kullanarak da kullanıcı deneyimini iyileştirebilirsiniz. Bu, aşağıdaki avantajları sağlayabilir:

Not: Özel metin seçimi uygulaması kullanan uygulamaların onProvideAssistContent() uygulamak ve setClipData() çağırmak gerekebilir.

Varsayılan uygulama

onProvideAssistData() ve 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 onProvideStructure() ve onProvideVirtualStructure()'nin varsayılan uygulamalarını kullanır. Görünümünüzde özel metin çizimi uygulanıyorsa setText(CharSequence)'ü çağırarak asistana kullanıcıya gösterilen metni sağlamak için onProvideStructure()'ü geçersiz kılın.

Çoğu durumda, erişilebilirlik desteğinin uygulanması asistanın ihtiyaç duyduğu bilgileri almasını sağlar. Erişilebilirlik desteğini uygulamak için Uygulamaları Erişilebilir Hale Getirme başlıklı makalede açıklanan en iyi uygulamaları uygulayın. Örneğin:

Asistanlardan gelen görüntülemeler hariç tutulur.

Hassas bilgileri işlemek için uygulamanız, WindowManager öğesinin FLAG_SECURE düzen parametresini ayarlayarak mevcut görünümü asistandan hariç tutabilir. İletişim kutuları dahil olmak üzere etkinlik tarafından oluşturulan her pencere için FLAG_SECURE öğesini açıkça ayarlamanız gerekir. Uygulamanız, bir yüzeyi asistandan hariç tutmak için setSecure() öğesini de kullanabilir. Tüm görüntülemeleri asistandan hariç tutacak genel (uygulama düzeyinde) bir mekanizma yoktur. FLAG_SECURE işlevinin, Assist API geri çağırmalarının etkinleşmesine neden olmadığını unutmayın. FLAG_SECURE kullanan etkinlik, bu kılavuzun önceki bölümlerinde açıklanan geri çağırmaları kullanarak bir asistan uygulamasına açık bir şekilde bilgi sağlamaya devam edebilir.

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

Sesli etkileşimler

Assist API geri çağırmaları, anahtar kelime öbeği algılama ile de çağrılır. Daha fazla bilgi için Sesli İşlemler belgelerine bakın.

Z düzeni ile ilgili dikkat edilmesi gereken noktalar

Asistan, mevcut etkinliğin üzerinde görüntülenen hafif bir yer paylaşımlı penceresi kullanır. Kullanıcı asistanı istediği zaman 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. Katman Z düzenini değiştirme

Uygulamanızda sistem uyarı pencereleri kullanılıyorsa bunları derhal kaldırın. Bu pencerelerin ekranda bırakılması kullanıcı deneyimini olumsuz etkiler.

Hedef uygulama

Asistan uygulamaları, hedef uygulamaları bulmak için genellikle derin bağlantılardan yararlanır. Uygulamanızı potansiyel bir hedef uygulama yapmak için derin bağlantı desteği ekleyin. Geçerli kullanıcı bağlamı ile yer paylaşımı penceresinde (Şekil 1'deki 3. adımda gösterilmiştir) gösterilen derin bağlantılar veya diğer olası işlemler arasındaki eşleşme, Google Asistan'ın uygulanmasına özeldir. Örneğin, Google Asistan uygulaması hedef uygulamalara trafik çekmek için derin bağlantılar ve uygulama bağlantıları kullanır.

Kendi Asistanınızı Uygulama

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 uygulamasını sağlamalıdır. Bunun için BIND_VOICE_INTERACTION izni de gereklidir. Böylece asistan, onHandleAssist() içindeki AssistStructure öğesinin bir örneği olarak temsil edilen metni ve görünüm hiyerarşisini alabilir. Ekran görüntüsünü onHandleScreenshot() üzerinden alır.