Doğrudan paylaşım hedefleri sağlama

Şekil 1: 1 tarafından gösterildiği gibi, Sharesheet'teki Doğrudan Paylaşım satırı

Diğer uygulamaların kullanıcıları için işlemleri kolaylaştırmak ve hızlandırmak için Doğrudan Paylaşım hedeflerini kullanın kullanarak URL'leri, resimleri veya diğer veri türlerini uygulamanızla paylaşın. Doğrudan Paylaşım çalışır Mesajlaşma ve sosyal uygulamalardaki kişileri doğrudan Android'de sunarak Sharesheet; kullanıcıların uygulamayı seçip kişiyi aramasına gerek kalmadan.

ShortcutManagerCompat paylaşım kısayolları sağlayan bir AndroidX API'sidir. kullanımdan kaldırılan ChooserTargetService API ile uyumludur. Hem Paylaşım Kısayollarını hem de ChooserTargets'ü yayınlamanın tercih edilen yolu budur. Talimatlar için Hem Paylaşım Kısayolları hem deChooserTarget hedefleri sağlamak için AndroidX'i kullanma adlı makaleyi inceleyin. bu sayfada yer alır.

Doğrudan Paylaşım hedeflerini yayınlama

Sharesheet Doğrudan Paylaşım satırı yalnızca Kısayollar API'si paylaşılıyor. Doğrudan Paylaşım hedeflerini yayınlamak için aşağıdaki adımları tamamlayın.

  1. Uygulamanızın XML kaynak dosyasında share-target öğelerini tanımlayın.

    <shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
    <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity">
        <data android:mimeType="text/plain" />
        <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" />
    </share-target>
    </shortcuts>
    
  2. Uygulamanız ilk kullanıma hazırlandığında setDynamicShortcuts kullanın. dinamik kısayolları önem derecesine göre sıralayabilirsiniz.

    Dizinin düşük olması önemin daha yüksek olduğunu gösterir. Herkesi aynı noktada buluşturuyorsanız kısa ve öz konuşmalara göre sıralanmış olarak en iyi şekilde yararlanabilirsiniz. Eski kısayolları yayınlamayın; bir görüşmede son 30 gün içindeki kullanıcı etkinliği eski olarak kabul edilir.

    Kotlin

    ShortcutManagerCompat.setDynamicShortcuts(myContext, listOf(shortcut1, shortcut2, ..))

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
  3. Bir iletişim uygulaması geliştiriyorsanız kısayol kullanımını Kullanıcı her seferinde pushDynamicShortcut hemen kişi bir ileti alır veya kişiye gönderir. Şunun için kısayol kullanımını bildirme konusuna bakın: iletişim uygulamalarına giderek daha fazla bilgi edinebilirsiniz. Örneğin, kullanıcı tarafından gönderilen iletilerin kullanımını raporlayın: özellik bağlamalarını belirterek ShortcutInfoCompat.Builder#addCapabilityBinding actions.intent.SEND_MESSAGE özelliği var.

    Kotlin

    val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
      ...
      .setShortLabel(firstName)
      .setLongLabel(fullName)
      .setCategories(matchedCategories)
      .setLongLived(true)
    .addCapabilityBinding("actions.intent.SEND_MESSAGE").build()
    ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

    Java

    ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
      ...
      .setShortLabel(firstName)
      .setLongLabel(fullName)
      .setCategories(matchedCategories)
      .setLongLived(true)
      .addCapabilityBinding("actions.intent.SEND_MESSAGE")
      .build();
    
    ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);
  4. Kullanıcı bir kişiyi silerse removeLongLivedShortcut. Bu, tercih edilen sistem tarafından önbelleğe alınmış olup olmamasına bakılmaksızın kısayolu kaldırmanın kullanıma sunuyoruz. Aşağıdaki kod snippet'inde bunun nasıl yapılacağına dair bir örnek gösterilmektedir.

    Kotlin

    val deleteShortcutId = "..."
    ShortcutManagerCompat.removeLongLivedShortcuts(myContext, listOf(deleteShortcutId))

    Java

    String deleteShortcutId = "...";
    ShortcutManagerCompat.removeLongLivedShortcuts(
        myContext, Arrays.asList(deleteShortcutId));

Doğrudan Paylaşım hedeflerinizin sıralamasını iyileştirin

Android Sharesheet'te sabit sayıda Doğrudan Paylaşım hedefi gösteriliyor. Bu öneriler sıralamaya göre sıralanır. Potansiyel olarak, sitenizin sıralamasını kısayollarını kullanabilirsiniz:

  • Tüm shortcutIds öğelerinin benzersiz olduğundan ve hiçbir zaman farklı hedefler için yeniden kullanılmadığından emin olun.
  • setLongLived(true) işlevini çağırarak kısayolun uzun ömürlü olmasını sağlayın.
  • İleti dizisiyle ilgili kısayollar için kısayol kullanımını raporla ilgili kısayolları yeniden yayınlayarak giden ve gelen iletiler için ShortcutManagerCompat.pushDynamicShortcut aracılığıyla. Bu konuyla ilgili olarak İletişim uygulamaları için kısayol kullanımını bildirme bölümüne bakın. sayfasına bakın.
  • Alakasız veya eski Doğrudan Paylaşım hedefleri sağlamaktan kaçının. Örneğin, Kullanıcının son 30 gün içinde mesaj göndermediği kişiler.
  • SMS uygulamalarında, kısa kodlara veya görüşmelere kısayol sunmaktan kaçının. potansiyel spam olarak tanımlanmıştır. Kullanıcıların kendileriyle paylaşımda bulunma olasılığı çok düşüktür yardımcı olan ekip çalışmasıdır.
  • Kısayolu ilişkilendirmek için setCategories() numaralı telefonu arayın uygun mimeType özellikleri hakkında daha fazla bilgi edinin. Örneğin, SMS uygulaması varsa ilgili kişi RCS veya MMS özellikli değilse karşılık gelen kısayolu image/* ve video/*.
  • Belirli bir görüşme için dinamik kısayol aktarıldıktan ve kullanım bildirilmediğinde kısayol kimliğini değiştirmeyin. Bu sayede, kullanım verileri saklanır bahsedeceğim.

Kullanıcı herhangi bir Doğrudan Paylaşım hedefine dokunursa uygulamanız onu kullanıcının etkileşimde bulunabileceği bir kullanıcı arayüzüne yönlendirmelidir. doğrudan hedefin konusuyla ilgili bir işlem yapabilirler. Gösterme kullanıcıya açıklama amaçlı bir kullanıcı arayüzü sunun ve bunları dokunulan hedef. Örneğin, bir mesajlaşma uygulamasında doğrudan paylaşıma dokunduğunuzda hedef, kullanıcıyı seçtiği kişiyle görüşme görünümüne yönlendirir. İlgili içeriği oluşturmak için kullanılan Klavye görünür durumda ve mesaj, paylaşılan verilerle önceden doldurulmuştur.

Paylaşım Kısayolları API'sı

Android 10 (API düzeyi 29) sürümünden itibaren ShortcutInfo.Builder yöntemler ve geliştirmeler ekledi paylaşma hedefi hakkında ek bilgi sağlar:

setCategories()
Android 10'dan itibaren kategoriler, şu kısayolları filtrelemek için de kullanılır: paylaşım amaçlarını ve işlemlerini işleyebilir. Bkz. Paylaşım bildirme hedef'i seçin. Bu alan kısayollar için gereklidir bu modellerin paylaşım hedefi olarak kullanılması amaçlanmıştır.
setLongLived()

Bir kısayolun yayından kaldırıldığında ya da uygulama tarafından görünmez hale getirilir (dinamik veya sabitlenmiş kısayol olarak). Kısayol uzun ömürlü olduğu için, taşıma sırasında dinamik kısayol olarak yayından kaldırıldı.

Bir kısayolu uzun ömürlü hale getirmek, sıralamasını iyileştirebilir. En iyi performansı elde edin sıralamasını inceleyin.

setShortLabel(), setLongLabel()

Tek bir kişi için kısayol yayınlarken lütfen kullanıcının tam sürümünü ekleyin setLongLabel() içindeki ad ve takma ad veya ad gibi herhangi bir kısa ad setShortLabel() dilinde.

GitHub'da Paylaşım Kısayolları Yayınlama örneğine bakın.

Kısayol görüntüleri sağlama

Paylaşım kısayolu oluşturmak için setIcon() üzerinden bir resim eklemeniz gerekir.

Paylaşım kısayolları sistem yüzeylerinde görünebilir ve yeniden şekillendirilebilir. Ayrıca, Android 7, 8 veya 9 (API düzeyleri 25, 26, 27 ve 28) yalnızca bit eşlem simgeleri arka plan olmadan görüntüleyebilir. Bu da kontrastı önemli ölçüde azaltır. Kısayolunuzun istediğiniz gibi göründüğünden emin olmak için IconCompat.createWithAdaptiveBitmap() kullanarak uyarlanabilir bit eşlem sağlayabilirsiniz.

Uyarlanabilir bit eşlemlerin, uyarlanabilir simgeler için ayarlanan kurallara ve boyutlara uyduğundan emin olun. Bunu yapmanın en yaygın yolu, amaçlanan kare bit eşlemi 72x72 dp boyutunda ve 108x108 dp şeffaf tuvalde ortalanır. Simgeniz şeffaf bölgeler içeriyorsa, bir arka plan rengi eklemeniz gerekir; aksi takdirde şeffaf bölgeler siyah görünür.

Belirli bir şekle maskelenmiş görüntüler sağlamayın. Örneğin, Android 10 (API düzeyi 29), Doğrudan Paylaşım için kullanıcı avatarları sağlamak yaygındı. Bir daireye maskelenmiş ChooserTarget öğeleri. Android Sharesheet ve diğer sistem yüzeyleri artık şekil ve tema kısayollarını kullanıyor. Paylaşım Kısayolları sağlamanın tercih edilen yöntemi ShortcutManagerCompat geriye dönük karşılaştırmayı, Doğrudan Paylaşım ChooserTarget nesnelerini şu şekilde otomatik olarak şekillendirerek: çevrelerine ekleyin.

Paylaşım hedefi tanımlama

Paylaşım hedefleri, statik kısayol tanımlarına benzer şekilde, uygulamanın kaynak dosyasında bildirilmelidir. Paylaşım ekle kaynak dosyasındaki <shortcuts> kök öğesinin içindeki hedef tanımları, kısaltılmış bir sürüm içerir. Her bir <share-targets> öğesi Paylaşılan veri türü, eşleşen kategoriler ve hedef sınıfını tanımlayın. XML kodu yalnızca aşağıdaki gibidir:

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <share-target android:targetClass="com.example.android.sharingshortcuts.SendMessageActivity">
    <data android:mimeType="text/plain" />
    <category android:name="com.example.android.sharingshortcuts.category.TEXT_SHARE_TARGET" />
  </share-target>
</shortcuts>

Paylaşım hedefindeki veri öğesi, amaç filtresindeki veri spesifikasyonuna benzer. Her paylaşım hedefinde yalnızca bir uygulamanın yayınlanan kısayollarıyla eşleştirmek için kullanılan birden fazla kategori kendi paylaşım hedefi tanımlarını göz önünde bulundurun. Kategorilerde rastgele uygulama tanımlanmış olabilir değerler.

Kullanıcının Android Sharesheet'te Paylaşım Kısayolu'nu seçmesi durumunda, yukarıdaki örnek hedef paylaşımla eşleşirse uygulama şunu alır: paylaşım amacı:

Action: Intent.ACTION_SEND
ComponentName: {com.example.android.sharingshortcuts /
                com.example.android.sharingshortcuts.SendMessageActivity}
Data: Uri to the shared content
EXTRA_SHORTCUT_ID: <ID of the selected shortcut>

Kullanıcı, paylaşım hedefini başlatıcı kısayollarından açarsa uygulama paylaşım kısayolunu Kısayol YöneticisiCompat Amaç farklı olduğu için Intent.EXTRA_SHORTCUT_ID kullanılamaz. Gerekirse kimliği manuel olarak iletmeniz gerekir.

İletişim uygulamaları için kısayol kullanımını bildirme

Bir iletişim uygulaması geliştiriyorsanız Google Haberler'deki Android Sharesheet, hem giden hem de gelen iletilerin kullanımını bildirerek. Bunu yapmak için, ilgili kişiyi temsil eden görüşme kısayolunu ShortcutManagerCompat.pushDynamicShortcut.

Kısayol kullanımı ve özellik bağlamaları, Android 5.0 ile geriye dönük uyumludur. (API 21).

Giden iletiler için kısayol kullanımını raporla

Kullanıcı tarafından gönderilen iletilerin raporlama kullanımı, işlevsel olarak "gönder" düğmesini tıklayarak düğmesini tıklayın.

Kullanım raporlamasını tetiklemek için kısayolda özellik bağlamalarını belirtin ShortcutInfoCompat.Builder#addCapabilityBinding tarihine kadar actions.intent.SEND_MESSAGE özelliği var.

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
.addCapabilityBinding("actions.intent.SEND_MESSAGE").build()
ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE")
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

Giden mesaj bir grup sohbeti içinse Audience öğesini de eklemeniz gerekir recipient gibi parametre değeri özellik ile ilişkilidir.

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", listOf("Audience")).build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.SEND_MESSAGE", "message.recipient.@type", Arrays.asList("Audience"))
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

Gelen iletiler için kısayol kullanımını raporla

Kullanıcı SMS gibi bir mesaj aldığında kullanım raporlamasını tetiklemek için sohbet mesajı, e-posta veya bildirimler gibi bağlama ve devre dışı bırakmaya ShortcutInfoCompat.Builder#addCapabilityBinding - actions.intent.RECEIVE_MESSAGE özelliği.

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE").build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(firstName)
  .setLongLabel(fullName)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE")
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

Gelen mesaj bir grup sohbetinden geliyorsa Audience özelliğini de eklemeniz gerekir sender türü için parametre değeri beceriyle ilişkilidir.

Kotlin

val shortcutInfo = ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", listOf("Audience")).build()

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo)

Java

ShortcutInfoCompat shortcutInfo = new ShortcutInfoCompat.Builder(myContext, staticConversationIdentifier)
  ...
  .setShortLabel(groupShortTitle)
  .setLongLabel(groupLongTitle)
  .setCategories(matchedCategories)
  .setLongLived(true)
  .addCapabilityBinding("actions.intent.RECEIVE_MESSAGE", "message.sender.@type", Arrays.asList("Audience"))
  .build();

ShortcutManagerCompat.pushDynamicShortcut(myContext, shortcutInfo);

Hem Paylaşım Kısayolları hem de Seçici Hedeflerini sağlamak için AndroidX'i kullanın

AndroidX uyumluluk kitaplığıyla çalışabilmek için uygulamanın manifest dosyası meta-veri seçici-hedef-hizmeti ve intent filtreleri setini içermelidir. Görüntüleyin mevcut ChooserTargetService Doğrudan Paylaşım API'si.

Bu hizmet, uyumluluk kitaplığında zaten bildirildiği için kullanıcı Uygulamanın manifest dosyasında hizmeti beyan etmesi gerekmez. Ancak, hizmetle ilgili paylaşım etkinliği bir seçici hedef olarak dikkate alınmalıdır için kullanılır.

Aşağıdaki örnekte, ChooserTargetService uygulanması androidx.core.content.pm.ChooserTargetServiceCompat, zaten tanımlanmış AndroidX'te:

<activity
    android:name=".SendMessageActivity"
    android:label="@string/app_name"
    android:theme="@style/SharingShortcutsDialogTheme">
    <!-- This activity can respond to Intents of type SEND -->
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
    <!-- Only needed if you import the sharetarget AndroidX library that
         provides backwards compatibility with the old DirectShare API.
         The activity that receives the Sharing Shortcut intent needs to be
         taken into account with this chooser target provider. -->
    <meta-data
        android:name="android.service.chooser.chooser_target_service"
        android:value="androidx.sharetarget.ChooserTargetServiceCompat" />
</activity>

Kısayolları paylaşmayla ilgili SSS

Kısayol kullanım verileri nasıl saklanıyor ve cihazdan çıkıyor mu?

Kısayollar tamamen cihaz üzerinde, sistem verileri dizininde bir şifrelenmiş disk bölümü Kısayollardaki bilgiler (ör. simge, amaç, kişiler ve kaynakların isimlerine ve isimlerine yalnızca sistem hizmetleri ve aynı uygulama tarafından da yürütülür.

Doğrudan Paylaşım'ın geçmişi nedir?

Android 6.0'da (API düzeyi 23) Doğrudan Paylaşım'ı kullanıma sunarak uygulamaların, ChooserTargetService aracılığıyla ChooserTarget nesne sağlayın. Sonuçlar (önceki değeri) Bu durum, hedeflerin daha uzun sürede yüklenebilmesine neden oluyor.

Android 10'da (API düzeyi 29), ChooserTargetService Direct'in yerini aldık. Yeni Paylaşım Kısayolları API'si ile API'leri paylaşın. Sonuçları almak yerine Share Kısayollar API'si isteğe bağlı olarak uygulamaların doğrudan paylaşım özelliğini kullanmasına olanak tanır. önceden takip etmeniz gerekir. Bu, Doğrudan Paylaşım alma sürecini hızlı bir şekilde hızlandırdı: göz önünde bulundurun. ChooserTargetService Doğrudan Paylaşım mekanizma çalışmaya devam eder, ancak sistem sağlanan hedefleri sıralar. çok daha düşük bir değere sahip.

Android 11 (API düzeyi 30), ChooserTargetService hizmetini kullanımdan kaldırdı ve Doğrudan Paylaşım hedefleri sağlamanın tek yolu Kısayollar API'sini paylaşmaktır.

Paylaşım hedefleri için yayınlanan kısayolların başlatıcıdan farkı nedir? kısayollar (Chrome'da uygulama simgelerine uzun süre basıldığında kullanılan tipik kısayolların kullanımı) başlatıcı)?

"Paylaşım hedefi" için yayınlanan tüm kısayollar aynı zamanda bir başlatıcı kısayoludur ve uygulamanızın simgesine uzun basıldığında menüde görüntülenir. İlgili içeriği oluşturmak için kullanılan etkinlik başına maksimum kısayol sayısı sınırı, toplam bir uygulamanın yayınladığı kısayollar (paylaşma hedefleri ve eski başlatıcı kısayolları birlikte) sunulur.

Yayınlanması gereken paylaşım kısayollarının sayısıyla ilgili yol gösterici bilgiler nelerdir?

Paylaşım kısayollarının sayısı aynı dinamik kısayollar şunun üzerinden kullanılabilir: getMaxShortcutCountPerActivity(android.content.Context). Bir kullanıcı herhangi bir videoyu yayınlayabilir. kullanabilirsiniz, ancak paylaşım kısayollarının görünür olabileceğini uygulama başlatıcıda ve paylaşım sayfasında uzun basın. Çoğu uygulama başlatıcıda uzun basıldığında dikey modda en fazla dört veya beş kısayol gösterilir ve yatay modda sekiz. Bunu göster SSS paylaşma hakkında daha fazla bilgi ve kılavuza bakın.