Memberikan target Berbagi Langsung

Gambar 1: Baris Direct Share di Sharesheet, seperti yang ditunjukkan oleh 1

Menggunakan target Berbagi Langsung agar lebih mudah dan lebih cepat bagi pengguna aplikasi lain untuk membagikan URL, gambar, atau jenis data lainnya ke aplikasi Anda. Berbagi Langsung berfungsi dengan menampilkan kontak dari aplikasi pesan dan sosial langsung di Android Sharesheet, tanpa mengharuskan pengguna memilih aplikasi lalu menelusuri kontak.

ShortcutManagerCompat adalah AndroidX API yang menyediakan Sharing Shortcut, dan versi sebelumnya kompatibel dengan ChooserTargetService API yang tidak digunakan lagi. Ini adalah opsi untuk memublikasikan Sharing Shortcut dan ChooserTargets. Untuk petunjuk, lihat Menggunakan AndroidX untuk menyediakan Sharing Shortcut danChooserTargets pada halaman ini.

Memublikasikan target Direct Share

Baris Sharesheet Direct Share hanya menampilkan pintasan dinamis yang disediakan oleh Sharing Shortcuts API. Selesaikan langkah-langkah berikut untuk memublikasikan Direct Share target.

  1. Dalam file resource XML aplikasi Anda, deklarasikan elemen share-target.

    <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. Saat aplikasi Anda melakukan inisialisasi, gunakan setDynamicShortcuts untuk mengurutkan pintasan dinamis berdasarkan tingkat kepentingan.

    Indeks yang lebih rendah menunjukkan tingkat kepentingan yang lebih tinggi. Jika Anda melakukan komunikasi bisa menjadi percakapan teratas yang diurutkan berdasarkan keterkinian seperti yang muncul aplikasi Anda. Jangan memublikasikan pintasan yang sudah usang; percakapan tanpa aktivitas pengguna dalam 30 hari terakhir dianggap tidak berlaku.

    Kotlin

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

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
    
  3. Jika Anda mengembangkan aplikasi komunikasi, laporkan penggunaan pintasan melalui pushDynamicShortcut secara langsung setiap kali pengguna menerima atau mengirim pesan ke kontak. Lihat Melaporkan penggunaan pintasan untuk aplikasi komunikasi di halaman ini untuk informasi selengkapnya. Misalnya, laporkan penggunaan untuk pesan yang dikirim oleh pengguna melalui menentukan binding kemampuan dalam pintasan melalui ShortcutInfoCompat.Builder#addCapabilityBinding dengan kemampuan actions.intent.SEND_MESSAGE.

    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. Jika pengguna menghapus kontak, gunakan removeLongLivedShortcut Ini adalah opsi menghapus pintasan, terlepas dari apakah pintasan itu di-cache oleh sistem layanan IT perusahaan mereka. Cuplikan kode berikut menunjukkan contoh cara melakukannya.

    Kotlin

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

    Java

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

Meningkatkan peringkat target Berbagi Langsung

Android ShareSheet menunjukkan jumlah pasti target Direct Share. Ini saran diurutkan berdasarkan peringkat. Anda dapat meningkatkan peringkat pintasan dengan melakukan hal berikut:

  • Pastikan semua shortcutIds unik dan tidak pernah digunakan kembali untuk target yang berbeda.
  • Memastikan pintasan bertahan lama dengan memanggil setLongLived(true)
  • Untuk pintasan terkait percakapan, laporkan penggunaan pintasan untuk pesan keluar dan masuk dengan memublikasikan ulang pintasan yang terkait melalui ShortcutManagerCompat.pushDynamicShortcut. Lihat Melaporkan penggunaan pintasan untuk aplikasi komunikasi di dokumen ini untuk detailnya.
  • Hindari memberikan target Direct Share yang tidak relevan atau sudah tidak berlaku, misalnya, kontak yang belum dikirimi pesan oleh pengguna dalam 30 hari terakhir.
  • Untuk aplikasi SMS, hindari menyediakan pintasan untuk kode atau percakapan pendek yang diidentifikasi berpotensi spam. Pengguna sangat tidak mungkin berbagi ke percakapan-percakapan tersebut.
  • Panggil setCategories() untuk mengaitkan pintasan dengan sesuai mimeType . Misalnya, untuk aplikasi SMS, jika kontak tidak mendukung RCS atau MMS, Anda tidak akan mengaitkan pintasan terkait dengan jenis MIME non-teks seperti image/* dan video/*.
  • Untuk percakapan tertentu, setelah pintasan dinamis didorong dan penggunaannya dilaporkan, jangan ubah ID pintasan. Tindakan ini memastikan retensi data penggunaan untuk pemberian peringkat.

Jika pengguna mengetuk target Direct Share, aplikasi Anda harus membawa mereka ke UI tempat mereka dapat melakukan tindakan langsung pada subjek sebagai target. Jangan presentasikan UI disambiguasi pengguna, dan jangan tempatkan mereka di UI yang tidak terkait dengan target yang diketuk. Misalnya, di aplikasi pesan, mengetuk Direct Share target mengarahkan pengguna ke tampilan percakapan dengan orang yang mereka pilih. Tujuan keyboard terlihat dan pesan diisi sebelumnya dengan data yang dibagikan.

Sharing Shortcuts API

Mulai Android 10 (level API 29), ShortcutInfo.Builder metode dan peningkatan yang ditambahkan yang memberikan info tambahan tentang target berbagi:

setCategories()
Mulai Android 10, kategori juga digunakan untuk memfilter pintasan yang dapat menangani tindakan atau intent berbagi. Lihat Mendeklarasikan berbagi target untuk mengetahui detailnya. Kolom ini wajib diisi untuk pintasan yang dimaksudkan untuk digunakan sebagai target berbagi.
setLongLived()

Menetapkan apakah pintasan valid atau tidak setelah pintasan tidak dipublikasikan atau dibuat tidak terlihat oleh aplikasi (sebagai pintasan dinamis atau disematkan). Jika pintasan berumur panjang, ia dapat di-cache oleh berbagai layanan sistem bahkan setelah dibatalkan publikasinya sebagai pintasan dinamis.

Membuat pintasan bertahan lama dapat meningkatkan peringkatnya. Lihat Mendapatkan yang terbaik peringkat untuk detailnya.

setShortLabel(), setLongLabel()

Saat memublikasikan pintasan ke setiap orang, sertakan info lengkapnya nama di setLongLabel() dan nama pendek apa pun, seperti nama panggilan atau nama depan dalam setShortLabel().

Lihat contoh memublikasikan Sharing Shortcut di GitHub.

Menyediakan gambar pintasan

Untuk membuat Pintasan Berbagi, Anda harus menambahkan gambar melalui setIcon().

Sharing Shortcut dapat muncul di berbagai platform sistem dan dapat dibentuk ulang. Selain itu, beberapa perangkat yang menjalankan Android versi 7, 8, atau 9 (API level 25, 26, 27, dan 28) mungkin menampilkan ikon khusus bitmap tanpa latar belakang, yang akan mengurangi kontras secara dramatis. Untuk memastikan pintasan Anda terlihat seperti yang diinginkan, menyediakan bitmap adaptif dengan menggunakan IconCompat.createWithAdaptiveBitmap().

Pastikan bitmap adaptif mengikuti panduan dan dimensi yang ditetapkan untuk ikon adaptif yang sama. Cara paling umum untuk mencapai hal ini adalah dengan menskalakan bitmap persegi yang dimaksudkan untuk 72x72 dp dan berada di tengah kanvas transparan 108x108 dp. Jika ikon Anda mencakup wilayah transparan, Anda perlu menyertakan warna latar belakang; sebaliknya, area transparan tampak hitam.

Jangan berikan gambar yang diberi mask sesuai dengan bentuk tertentu. Misalnya, sebelum Di Android 10 (level API 29), biasanya avatar pengguna disediakan untuk Berbagi Langsung ChooserTarget yang disamarkan ke lingkaran. Android Sharesheet dan di Android 10 sekarang memiliki gambar pintasan bentuk dan tema. Metode yang dipilih untuk menyediakan Sharing Shortcut, melalui ShortcutManagerCompat, secara otomatis membentuk objek ChooserTarget Direct Share backcompat untuk lingkaran untuk Anda.

Mendeklarasikan target berbagi

Target berbagi harus dideklarasikan dalam file resource aplikasi, sama seperti definisi pintasan statis. Tambahkan bagian definisi target di dalam elemen root <shortcuts> dalam file resource, bersama dengan definisi pintasan statis lainnya. Setiap elemen <share-targets> berisi informasi tentang tipe data yang dibagikan, kategori yang sesuai, dan target yang akan menangani intent berbagi. Kode XML terlihat seperti seperti ini:

<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>

Elemen data dalam target berbagi mirip dengan spesifikasi data dalam filter intent. Setiap target berbagi dapat memiliki beberapa kategori, yang hanya digunakan untuk mencocokkan pintasan aplikasi yang dipublikasikan dengan definisi target berbaginya. Kategori dapat memiliki sembarang aplikasi yang ditentukan oleh aplikasi masing-masing.

Jika pengguna memilih Sharing Shortcut di Android ShareSheet yang cocok dengan contoh target berbagi di atas, aplikasi akan mendapatkan intent berbagi berikut:

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>

Jika pengguna membuka target berbagi dari pintasan peluncur, aplikasi akan mendapatkan intent yang telah dibuat saat menambahkan pintasan berbagi ke ShortcutManagerCompat. Karena intent berbeda, Intent.EXTRA_SHORTCUT_ID tidak akan tersedia, dan Anda harus meneruskan ID secara manual jika Anda membutuhkannya.

Melaporkan penggunaan pintasan untuk aplikasi komunikasi

Jika mengembangkan aplikasi komunikasi, Anda dapat meningkatkan peringkat di Android Sharesheet dengan melaporkan penggunaan pesan keluar dan pesan masuk. Untuk melakukannya, publikasikan ulang pintasan percakapan yang mewakili kontak melalui ShortcutManagerCompat.pushDynamicShortcut

Penggunaan pintasan dan binding kemampuan kompatibel dengan Android 5.0 (API 21).

Laporkan penggunaan pintasan untuk pesan keluar

Penggunaan pelaporan untuk pesan yang dikirim oleh pengguna mirip dengan mengklik "kirim" setelah membuat pesan.

Untuk memicu pelaporan penggunaan, tentukan binding kemampuan di pintasan sampai ShortcutInfoCompat.Builder#addCapabilityBinding dengan kemampuan actions.intent.SEND_MESSAGE.

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);

Jika pesan keluar ditujukan untuk chat grup, Anda juga harus menambahkan Audience nilai parameter sebagai recipient terkait dengan kemampuannya.

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);

Laporkan penggunaan pintasan untuk pesan masuk

Untuk memicu pelaporan penggunaan saat pengguna menerima pesan seperti SMS, pesan obrolan, email, atau notifikasi, Anda harus menentukan kemampuan binding di pintasan melalui ShortcutInfoCompat.Builder#addCapabilityBinding dengan kemampuan actions.intent.RECEIVE_MESSAGE.

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);

Jika pesan masuk berasal dari chat grup, Anda juga harus menambahkan Audience nilai parameter sebagai jenis sender yang dikaitkan dengan kemampuan.

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);

Menggunakan AndroidX untuk menyediakan Sharing Shortcut dan ChooserTargets

Agar dapat bekerja dengan library kompatibilitas AndroidX, manifes aplikasi harus berisi layanan target pemilih metadata dan filter intent yang ditetapkan. Lihat ChooserTargetService Direct Share API saat ini.

Layanan ini sudah dideklarasikan dalam library kompatibilitas, sehingga pengguna melakukannya tidak perlu mendeklarasikan layanan dalam manifes aplikasi. Namun, tautan dari aktivitas berbagi ke layanan harus diperhitungkan sebagai target pemilih penyedia layanan.

Pada contoh berikut, implementasi ChooserTargetService adalah androidx.core.content.pm.ChooserTargetServiceCompat, yang telah didefinisikan di AndroidX:

<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>

FAQ Sharing Shortcut

Bagaimana data penggunaan pintasan disimpan dan apakah data tersebut dikirim ke luar perangkat?

Pintasan disimpan sepenuhnya di perangkat dalam direktori data sistem dengan partisi {i>disk<i} yang terenkripsi. Informasi dalam pintasan seperti ikon, intent, dan nama orang serta sumber daya hanya dapat diakses oleh layanan sistem dan aplikasi yang sama yang memublikasikan pintasan.

Bagaimana sejarah Berbagi Langsung?

Kami memperkenalkan Berbagi Langsung di Android 6.0 (API level 23) untuk memungkinkan aplikasi menyediakan objek ChooserTarget melalui ChooserTargetService. Hasilnya adalah diambil secara reaktif sesuai permintaan, sehingga mengakibatkan waktu pemuatan target menjadi lambat.

Di Android 10 (level API 29), kami mengganti ChooserTargetService Direct Berbagi API dengan Sharing Shortcuts API yang baru. Daripada mengambil hasil Secara reaktif sesuai permintaan, Sharing Shortcuts API memungkinkan aplikasi memublikasikan Direct Share target sebelumnya. Hal ini dengan cepat mempercepat proses pengambilan Direct Share target saat menyiapkan ShareSheet. Berbagi Langsung ChooserTargetService akan terus bekerja, namun sistem menentukan peringkat target yang disediakan dengan cara ini lebih rendah dari target mana pun yang menggunakan Sharing Shortcuts API.

Android 11 (level API 30) menghentikan layanan ChooserTargetService, dan Sharing Shortcuts API adalah satu-satunya cara untuk menyediakan target Direct Share.

Perbedaan antara pintasan yang dipublikasikan untuk target berbagi dengan peluncur pintasan (penggunaan umum pintasan saat menekan lama ikon aplikasi di peluncur)?

Semua pintasan yang dipublikasikan untuk keperluan "target berbagi" juga merupakan pintasan peluncur, dan akan ditampilkan pada menu ketika ikon aplikasi ditekan lama. Batas jumlah pintasan maksimum per aktivitas juga berlaku untuk jumlah total pintasan yang dipublikasikan aplikasi (gabungan pintasan peluncur lama dan target berbagi).

Apa panduan mengenai jumlah pintasan berbagi yang harus dipublikasikan.

Jumlah pintasan berbagi dibatasi pada batas dinamis yang sama pintasan yang tersedia melalui getMaxShortcutCountPerActivity(android.content.Context) Seseorang dapat memublikasikan hingga batas tersebut, tetapi perlu diingat bahwa pintasan berbagi dapat terlihat di peluncur aplikasi, tekan lama dan di sheet berbagi. Sebagian besar peluncur aplikasi aktif tekan lama menampilkan maksimum empat atau lima pintasan dalam mode potret, dan delapan dalam mode lanskap. Lihat ini Pertanyaan Umum (FAQ) untuk mengetahui detail dan panduan selengkapnya tentang pintasan berbagi.