Doğrudan paylaşım hedefleri sağlama

Şekil 1: Paylaşım sayfasında 1
ile gösterilen doğrudan paylaşım satırı

Diğer uygulama kullanıcılarının URL'leri, resimleri veya diğer veri türlerini uygulamanızla paylaşmasını kolaylaştırmak ve hızlandırmak için Doğrudan Paylaşım hedeflerini kullanın. Doğrudan Paylaşım, kullanıcıların uygulamayı seçip kişiyi aramak zorunda kalmadan mesajlaşma ve sosyal medya uygulamalarındaki kişileri doğrudan Android Paylaşım Sayfası'nda sunarak çalışır.

ShortcutManagerCompat paylaşım kısayolları sağlayan bir AndroidX API'sidir. kullanımdan kaldırılan ChooserTargetService API ile uyumludur. Bu, tercih edilen hem de ChooserTargets öğesini yayınlamanın bir yoludur. 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'ı yayınlamak için aşağıdaki adımları tamamlayın belirler.

  1. Uygulamanızın XML kaynak dosyasında share-target öğeleri 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.

    Düşük bir endeks, daha yüksek önemi gösterir. Etkili bir ekiple 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, actions.intent.SEND_MESSAGE özelliğiyle ShortcutInfoCompat.Builder#addCapabilityBinding aracılığıyla kısayolda özellik bağlamalarını belirterek kullanıcı tarafından gönderilen mesajların kullanımını raporlayın.

    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 paylaşım sayfasında sabit sayıda doğrudan paylaşım hedefi gösterilir. Bu öneriler sıralamaya göre sıralanır. Aşağıdakileri yaparak kısayollarınızın sıralamasını iyileştirebilirsiniz:

  • Tüm shortcutIds değerlerinin benzersiz olduğundan ve farklı hedefler için asla yeniden kullanılmadığından emin olun.
  • Şu numarayı arayarak kısayolun uzun ömürlü olduğundan emin olun: setLongLived(true).
  • İleti dizisiyle ilgili kısayollar için ShortcutManagerCompat.pushDynamicShortcut aracılığıyla ilgili kısayolları yeniden yayınlayarak giden ve gelen iletilerde kısayol kullanımını bildirin. Ayrıntılar için bu sayfadaki İletişim uygulamaları için kısayol kullanımını bildirme bölümüne bakın.
  • Alakasız veya eski doğrudan paylaşım hedefleri (ör. kullanıcının son 30 gün içinde mesajlaşmadığı kişiler) sağlamamaya çalışın.
  • 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 uygun mimeType özelliklerine ilişkilendirmek için setCategories() işlevini çağırın. Örneğin, bir SMS uygulamasında kişi RCS veya MMS'yi etkinleştirmemişse ilgili kısayolu image/* ve video/* gibi metin dışı MIME türleriyle ilişkilendirmezsiniz.
  • Belirli bir görüşmede dinamik bir kısayol gönderildikten ve kullanım raporlandıktan sonra kısayol kimliğini değiştirmeyin. Bu sayede, sıralama için kullanım verilerinin saklanması sağlanır.

Kullanıcı herhangi bir Doğrudan Paylaşım hedefine dokunursa uygulamanız kullanıcıyı doğrudan hedefin konusuyla ilgili işlem yapabileceği bir kullanıcı arayüzüne yönlendirmelidir. Kullanıcıya anlam ayrımı yapan bir kullanıcı arayüzü göstermeyin ve kullanıcıyı, dokunulan hedefle alakalı olmayan bir kullanıcı arayüzüne yerleştirmeyin. Ö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ğlayan:

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ınlanmamış veya uygulama tarafından görünmez hale getirilmiş (dinamik ya da sabitlenmiş kısayol olarak) durumda geçerli olup olmadığını belirtir. Uzun ömürlü bir kısayol, dinamik kısayol olarak yayınlandıktan sonra bile çeşitli sistem hizmetleri tarafından önbelleğe alınabilir.

Bir kısayolun uzun ömürlü olması, sıralamasını iyileştirebilir. Ayrıntılar için En iyi sıralamayı elde etme başlıklı makaleyi inceleyin.

setShortLabel(), setLongLabel()

Bir kişinin kısayolunu yayınlarken lütfen setLongLabel() alanına tam adını, setShortLabel() alanına ise takma ad veya ad gibi kısa bir adı ekleyin.

Paylaşım kısayollarını GitHub'da yayınlama örneğine göz atın.

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

Paylaşım kısayolu oluşturmak için setIcon() aracılığıyla 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 bitmap'lerin uyarlanabilir simgeler için belirlenen yönergelere ve boyutlara uyduğundan emin olun. Bunu yapmanın en yaygın yolu, istenen kare bitmap'i 72x72 dp'ye ölçeklendirmek ve 108x108 dp şeffaf bir kanvasta ortalanmasıdır. Simgeniz şeffaf bölgeler içeriyorsa arka plan rengi eklemeniz gerekir. Aksi takdirde şeffaf bölgeler siyah görünür.

Belirli bir şekle maskelenmiş görüntüler göndermeyin. Örneğin, Android 10 (API düzeyi 29) öncesinde, Doğrudan Paylaşım ChooserTarget'ları için daire şeklinde maskelenmiş kullanıcı avatarları sağlamak yaygındı. Android Sharesheet ve diğer sistem yüzeyleri artık şekil ve tema kısayollarını kullanıyor. Paylaşım kısayolları sağlamak için tercih edilen yöntem, ShortcutManagerCompat aracılığıyla, geriye dönük uyumlu Doğrudan Paylaş ChooserTarget nesnelerini sizin için otomatik olarak daireler şeklinde biçimlendirmektir.

Paylaşım hedefi belirtme

Paylaşım hedefleri, statik kısayol tanımlarına benzer şekilde uygulamanın kaynak dosyasında tanımlanmalıdır. Diğer statik kısayol tanımlarıyla birlikte, kaynak dosyasındaki <shortcuts> kök öğesine paylaşım hedefi tanımları ekleyin. 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. Kategoriler, uygulama tarafından tanımlanan herhangi bir değere sahip olabilir.

Kullanıcı, Android paylaşım sayfasında yukarıdaki hedef paylaşım örneğiyle eşleşen paylaşım kısayolunu seçerse uygulamaya aşağıdaki paylaşım amacı gönderilir:

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ı, başlatıcı kısayollarından paylaşım hedefini açarsa uygulama, paylaşım kısayolu ShortcutManagerCompat'e eklenirken oluşturulan intent'i alır. Farklı bir intent olduğu için Intent.EXTRA_SHORTCUT_ID kullanılamaz ve ihtiyacınız varsa kimliği manuel olarak iletmeniz gerekir.

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

İletişim uygulaması geliştiriyorsanız hem giden hem de gelen mesajların kullanımını bildirerek Android Paylaş Sayfası'ndaki sıralamanızı yükseltebilirsiniz. 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ı bildirme

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 sohbet içinse recipient türü özellikle ilişkili olduğundan Audience parametre değerini de eklemeniz gerekir.

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, sohbet mesajı, e-posta veya bildirim gibi bir mesaj aldığında kullanım raporlamasını tetiklemek için actions.intent.RECEIVE_MESSAGE özelliğiyle ShortcutInfoCompat.Builder#addCapabilityBinding aracılığıyla kısayolda ek olarak özellik bağlamaları belirtmeniz gerekir.

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 ChooserTargets sağlamak için AndroidX'i kullanma

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

Bu hizmet, uyumluluk kitaplığında zaten beyan edildiği için kullanıcının hizmeti uygulamanın manifest dosyasında beyan etmesi gerekmez. Ancak, paylaşım etkinliğinden hizmete giden bağlantı, seçici hedef sağlayıcı olarak dikkate alınmalıdır.

Aşağıdaki örnekte, ChooserTargetService için AndroidX'te tanımlanmış androidx.core.content.pm.ChooserTargetServiceCompat uygulaması kullanılmıştır:

<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 ayrılıyor?

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 Doğrudan Paylaşım API'lerini yeni Paylaşım Kısayolları API'siyle değiştirdik. Paylaşım Kısayolları API'si, sonuçları istek üzerine reaktif olarak almak yerine uygulamaların Doğrudan Paylaşım hedeflerini önceden yayınlamasına olanak tanır. Bu sayede, Paylaşım E-Tablosu hazırlanırken Doğrudan Paylaşım hedeflerinin alınması işlemi hızlandı. ChooserTargetService Doğrudan Paylaşım mekanizması çalışmaya devam edecek ancak sistem, bu şekilde sağlanan hedefleri Paylaşım Kısayolları API'sini kullanan hedeflerden daha düşük bir sıralamaya yerleştirir.

Android 11 (API düzeyi 30) ile ChooserTargetService hizmetinin desteği sonlandırıldı ve Doğrudan Paylaşım hedeflerini sağlamanın tek yolu Paylaşım Kısayolları API'sidir.

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ı)?

"Hedefi paylaş" amacıyla yayınlanan tüm kısayollar, başlatıcı kısayoludur ve uygulamanızın simgesine uzun bastığınızda menüde gösterilir. İ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 kurallar nelerdir?

Paylaşım kısayollarının sayısı, getMaxShortcutCountPerActivity(android.content.Context) üzerinden kullanılabilen dinamik kısayolların sayısıyla sınırlıdır. Bu sınıra kadar dilediğiniz sayıda kısayol yayınlayabilirsiniz ancak paylaşım kısayollarının, uygulama başlatıcıda uzun basıldığında ve paylaşım sayfasında görünebileceğini unutmayın. Uzun basıldığında çoğu uygulama başlatıcıda dikey modda en fazla dört veya beş, yatay modda ise sekiz kısayol gösterilir. Kısayol paylaşma hakkında daha fazla bilgi ve yol gösterici bilgiler için bu SSS sayfasına bakın.