تقديم أهداف المشاركة المباشرة

الشكل 1: صف "المشاركة المباشرة" في "قائمة المشاركة"، كما هو موضّح في 1

استخدام أهداف "المشاركة المباشرة" لتسهيل وسرعة مستخدمي التطبيقات الأخرى مشاركة عناوين URL أو الصور أو غيرها من أنواع البيانات مع تطبيقك. أعمال "المشاركة المباشرة" من خلال مشاركة جهات الاتصال من تطبيقات المراسلة والتواصل الاجتماعي مباشرةً على Android "قائمة مشاركة البيانات"، بدون أن يضطر المستخدمون إلى اختيار التطبيق ثم البحث عن جهة الاتصال

ShortcutManagerCompat هي واجهة برمجة تطبيقات AndroidX توفر اختصارات للمشاركة، بعكس متوافق مع واجهة برمجة تطبيقات ChooserTargetService المتوقّفة نهائيًا. هذا هو المفضل لنشر كل من اختصارات المشاركة وChooserTargets. للاطّلاع على التعليمات راجِع استخدام AndroidX لتوفير كل من اختصارات المشاركة وChooserTargets. في هذه الصفحة.

نشر أهداف "المشاركة المباشرة"

لا يعرض صف "المشاركة المباشرة" في "صفحة المشاركة" سوى الاختصارات الديناميكية التي يوفّرها واجهة برمجة تطبيقات اختصارات المشاركة أكمِل الخطوات التالية لنشر "المشاركة المباشرة". الأهداف.

  1. في ملف موارد XML الخاص بتطبيقك، أدخِل عناصر 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. عند بدء تشغيل تطبيقك، يمكنك استخدام setDynamicShortcuts لترتيب الاختصارات الديناميكية حسب الأهمية.

    يشير انخفاض المؤشر إلى أهمية أكبر. إذا كنت تجري اتصالاً من التطبيقات، يمكن أن تكون من أهم المحادثات مرتّبة حسب مدى الحداثة كما تظهر في تطبيقك. لا تنشر اختصارات قديمة، محادثة بدون يُعدّ نشاط المستخدم خلال آخر 30 يومًا قديمًا.

    Kotlin

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

    Java

    List<ShortcutInfoCompat> shortcuts = new ArrayList<>();
    shortcuts.add(shortcut1);
    shortcuts.add(shortcut2);
    ...
    ShortcutManagerCompat.setDynamicShortcuts(myContext, shortcuts);
    
    
  3. إذا كنت تُطور تطبيق اتصال، فأبلغ عن استخدام الاختصارات من خلال pushDynamicShortcut على الفور في كل مرة رسالة إلى جهة اتصال أو إرسالها. راجِع الإبلاغ عن استخدام الاختصارات لـ تطبيقات التواصل في هذه الصفحة لمزيد من المعلومات. على سبيل المثال، الإبلاغ عن استخدام الرسائل التي أرسلها المستخدم من خلال تحديد ارتباطات الإمكانيات في الاختصار من خلال ShortcutInfoCompat.Builder#addCapabilityBinding مع إمكانية 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. إذا حذف المستخدم جهة اتصال، فاستخدم removeLongLivedShortcut هذا هو المفضل لإزالة الاختصار بغض النظر عما إذا كان قد تم تخزينها مؤقتًا بواسطة النظام أم لا يعرض مقتطف الرمز التالي مثالاً على كيفية إجراء ذلك.

    Kotlin

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

    Java

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

تحسين ترتيب أهداف "المشاركة المباشرة"

تعرِض "قائمة مشاركة البيانات على Android" عددًا ثابتًا من أهداف "المشاركة المباشرة". هذه يتم تصنيف الاقتراحات حسب الترتيب. ويمكنك تحسين ترتيب الاختصارات عن طريق القيام بما يلي:

  • تأكَّد من أنّ كل shortcutIds فريدة ولا يمكن إعادة استخدامها لأهداف مختلفة.
  • ضمان استمرار ظهور الاختصار من خلال استدعاء setLongLived(true)
  • الإبلاغ عن استخدام الاختصارات المتعلقة بالمحادثات للرسائل الصادرة والواردة من خلال إعادة نشر الاختصارات المقابلة من خلال ShortcutManagerCompat.pushDynamicShortcut. اطّلِع على الإبلاغ عن استخدام الاختصارات في تطبيقات المراسلة على هذه الصفحة لمعرفة التفاصيل.
  • تجنَّب تقديم استهدافات "المشاركة المباشرة" القديمة أو غير الملائمة، على سبيل المثال: جهات الاتصال التي لم يرسلها المستخدم خلال آخر 30 يومًا
  • بالنسبة إلى تطبيقات الرسائل القصيرة SMS، تجنَّب توفير اختصارات للرموز القصيرة أو المحادثات. كمحتوى غير مرغوب فيه محتمل. من غير المرجح جدًا أن يشارك المستخدمون مع تلك المحادثات.
  • يمكنك طلب setCategories() لربط الاختصار بالرمز مناسب mimeType . على سبيل المثال: بالنسبة إلى تطبيقات الرسائل القصيرة SMS، إذا لم تكن جهة الاتصال متوافقة مع خدمات الاتصالات التفاعلية (RCS) أو رسائل الوسائط المتعددة، فلن يتم ربط الاختصار المقابل بأنواع MIME غير نصية، مثل "image/*" وvideo/*"
  • بالنسبة إلى محادثة معيَّنة، بعد إرسال اختصار ديناميكي وبدء استخدام الإبلاغ، لا تغيّر معرّف الاختصار. يضمن ذلك الاحتفاظ ببيانات الاستخدام للترتيب.

إذا نقر المستخدم على أيّ هدف من أهداف "المشاركة المباشرة"، يجب أن ينقله التطبيق إلى واجهة المستخدم حيث يمكنها تنفيذ إجراء مباشر على الموضوع المستهدف. لا تعرِض على المستخدم واجهة مستخدم لإزالة الالتباس، ولا تضعه في واجهة مستخدم غير مرتبطة بالهدف الذي تم النقر عليه. على سبيل المثال، في تطبيق مراسلة، يؤدي النقر على هدف مشاركة مباشرة إلى نقل المستخدم إلى عرض محادثة مع المستخدم الذي اختاره. تشير رسالة الأشكال البيانية لوحة المفاتيح مرئية ويتم ملء الرسالة مسبقًا بالبيانات المُشارَكة.

Sharing Shortcuts API

اعتبارًا من Android 10 (المستوى 29 من واجهة برمجة التطبيقات)،أضافت ShortcutInfo.Builder طُرقًا وتحسينات توفّر معلومات إضافية عن استهداف الحصة:

setCategories()
بدءًا من Android 10، يتم استخدام الفئات أيضًا لفلترة الاختصارات التي نتمكن من التعامل مع نوايا أو إجراءات المشاركة. الاطّلاع على إعلان مشاركة المستهدفة للاطّلاع على التفاصيل. هذا الحقل مطلوب للاختصارات لاستخدامها كأهداف للمشاركة
setLongLived()

تحدِّد هذه السياسة ما إذا كان الاختصار صالحًا عند إلغاء نشره أو جعل التطبيق غير مرئي (كاختصار ديناميكي أو اختصار مثبَّت) إذا كان هناك اختصار طويلة الأجل، فيمكن تخزينها مؤقتًا بواسطة خدمات نظام مختلفة حتى تم إلغاء نشر الاختصار كاختصار ديناميكي.

ويمكن أن يؤدي إنشاء اختصار طويل الأمد إلى تحسين ترتيبه. الاطّلاع على الحصول على أفضل النتائج الترتيب لمعرفة التفاصيل.

setShortLabel()، setLongLabel()

عند نشر اختصار لشخص، يُرجى تضمين كامل اسم باللغة setLongLabel() وأي اسم مختصر، مثل اللقب أو الاسم الأول في اللغة setShortLabel().

اطّلِع على مثال على نشر اختصارات المشاركة على GitHub.

تقديم صور مختصرة

لإنشاء اختصار مشاركة، يجب إضافة صورة من خلال setIcon().

يمكن أن تظهر اختصارات المشاركة على مساحات عرض النظام وقد يتم تغيير شكلها. بالإضافة إلى ذلك، بعض الأجهزة التي تعمل بالإصدار 7 أو 8 أو 9 من نظام التشغيل Android (مستويات واجهة برمجة التطبيقات 25، 26 و27 و28) قد تعرض رموزًا نقطية فقط بدون خلفية، مما يقلل التباين بشكل كبير. وللتأكّد من ظهور الاختصار بالشكل المطلوب، توفير صورة نقطية تكيُّفية باستخدام IconCompat.createWithAdaptiveBitmap().

تأكّد من أنّ الصور النقطية التكيُّفية تتّبع نفس الإرشادات والسمات التي تم ضبطها للرموز التكيُّفية. وأكثر الطرق شيوعًا لإجراء ذلك هي تكبير الصورة المركّبة المربّعة المقصودة إلى 72x72 dp ووضعها في منتصف لوحة شفافة بحجم 108x108 dp. إذا كان رمزك يحتوي على مناطق شفافة، يجب تضمين لون خلفية، وإلا ستظهر مناطقه الشفافة باللون الأسود.

لا تقدِّم صورًا مقنَّعة في شكل معيّن. على سبيل المثال، قبل Android 10 (المستوى 29 من واجهة برمجة التطبيقات)، كان من الشائع تقديم صور رمزية للمستخدمين لميزة "المشاركة المباشرة" ChooserTarget تم إخفاؤها في دائرة. ستساعدك "قائمة مشاركة البيانات" من Android منصات النظام في Android 10 الآن تعرض صورًا لاختصارات الأشكال والمظاهر. إنّها الطريقة المفضّلة لتوفير اختصارات المشاركة من خلال ShortcutManagerCompat، تشكيل كائنات المشاركة المباشرة العكسية تلقائيًا ChooserTarget ودوائر من أجلك.

تضمين هدف للحصة

يجب الإفصاح عن أهداف المشاركة في ملف موارد التطبيق، على غرار تعريفات الاختصارات الثابتة. إضافة حصة المستهدفة داخل العنصر الجذر <shortcuts> في ملف الموارد، إلى جانب تعريفات الاختصارات الثابتة الأخرى. كل عنصر <share-targets> يحتوي على معلومات حول نوع البيانات المشتركة والفئات المطابقة الفئة المستهدفة التي ستتعامل مع نية المشاركة. يبدو رمز XML شيئًا النحو التالي:

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

يشبه عنصر البيانات في هدف المشاركة مواصفات البيانات في فلتر أهداف. يمكن أن يكون لكل هدف مشاركة فئات متعددة، والتي لا تُستخدم إلا لمطابقة الاختصارات المنشورة لتطبيق معيّن مع تعريفات أهداف المشاركة. يمكن أن تتضمّن الفئات أيّ تطبيق عشوائي محدّد من خلال التطبيق. القيم.

في حال اختار المستخدم اختصار المشاركة في "قائمة مشاركة البيانات" في Android تتطابق مع مثال حصة الهدف أعلاه، سيحصل التطبيق على ما يلي الرغبة في المشاركة:

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>

إذا فتح المستخدم هدف المشاركة من اختصارات مشغّل التطبيقات، سيحصل التطبيق على الغرض الذي تم إنشاؤه عند إضافة اختصار المشاركة إلى ShortcutManagerCompat. بما أنّ الغرض مختلف، لن يكون الحقل "Intent.EXTRA_SHORTCUT_ID" متاحًا. وسيتعين عليك تمرير المعرّف يدويًا إذا احتجت إليه.

الإبلاغ عن استخدام الاختصارات في تطبيقات التواصل

إذا كنت تطوّر تطبيقًا للتواصل، يمكنك تحسين ترتيبك في "قائمة مشاركة البيانات" في Android من خلال إعداد تقارير عن استخدام كل من الرسائل الصادرة والواردة. ولإجراء ذلك، أعِد نشر اختصار المحادثة الذي يمثّل جهة الاتصال من خلال. ShortcutManagerCompat.pushDynamicShortcut

إنّ استخدام الاختصارات وعمليات ربط الإمكانات متوافقة مع الإصدارات القديمة من Android 5.0 (واجهة برمجة التطبيقات 21).

الإبلاغ عن استخدام الاختصارات للرسائل الصادرة

يشبه إعداد التقارير عن استخدام الرسائل التي أرسلها المستخدم من الناحية الوظيفية والنقر على "إرسال" بعد إنشاء رسالة.

لبدء إعداد تقارير الاستخدام، حدِّد عمليات ربط الإمكانات في الاختصار من خلال ShortcutInfoCompat.Builder#addCapabilityBinding باستخدام إمكانات 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);

إذا كانت الرسالة الصادرة لمحادثة جماعية، يجب أيضًا إضافة Audience قيمة المعلمة على أنها recipient نوع معين مرتبطًا بالقدرة.

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

الإبلاغ عن استخدام الاختصار للرسائل الواردة

لتشغيل تقارير الاستخدام عندما يتلقّى المستخدم رسالة مثل SMS، رسالة محادثة أو بريد إلكتروني أو إشعارات، يجب تحديد إمكانية الروابط في الاختصار من خلال ShortcutInfoCompat.Builder#addCapabilityBinding مع إمكانية 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);

إذا كانت الرسالة الواردة من محادثة جماعية، عليك أيضًا إضافة Audience. على أنّها من النوع sender. لهذه القدرة.

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

استخدام AndroidX لتوفير كل من اختصارات المشاركة وSelectrTargets

لكي تتمكّن من استخدام مكتبة التوافق AndroidX، يجب أن يحتوي بيان التطبيق على مجموعة فلاتر الأهداف والخدمات واختيار البيانات الوصفية. عرض واجهة برمجة تطبيقات ChooserTargetService Direct Share الحالية.

تم تعريف هذه الخدمة من قبل في مكتبة التوافق، لذلك يجري المستخدم عدم الحاجة إلى الإفصاح عن الخدمة في بيان التطبيق. ومع ذلك، فإن الرابط من يجب أن يتم أخذ نشاط المشاركة للخدمة في الاعتبار كهدف محدد المستخدم.

في المثال التالي، تتم معالجة آلية تنفيذ ChooserTargetService. androidx.core.content.pm.ChooserTargetServiceCompat، والذي تم تحديده بالفعل في 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>

الأسئلة الشائعة حول اختصارات المشاركة

كيف يتم تخزين بيانات استخدام الاختصار وهل يتم مغادرتها الجهاز؟

يتم تخزين الاختصارات بالكامل على الجهاز في دليل بيانات النظام في تقسيم القرص المشفر. المعلومات التي تظهر في اختصارات مثل الرمز والهدف أو أسماء الأشخاص والموارد فقط بواسطة خدمات النظام التطبيق نفسه الذي ينشر الاختصارات.

ما هو سجلّ "المشاركة المباشرة"؟

قدّمنا ميزة "المشاركة المباشرة" في الإصدار Android 6.0 (المستوى 23 من واجهة برمجة التطبيقات) للسماح للتطبيقات توفير كائنات ChooserTarget من خلال ChooserTargetService. كانت النتائج يتم استردادها بشكل تفاعلي عند الطلب، ما يؤدي إلى بطء وقت تحميل الأهداف.

في Android 10 (المستوى 29 من واجهة برمجة التطبيقات)، تم استبدال واجهة برمجة التطبيقات ChooserTargetService Direct مشاركة واجهات برمجة التطبيقات مع واجهة برمجة التطبيقات Share Shortcuts API الجديدة بدلاً من استرداد النتائج بشكل تفاعلي عند الطلب، تتيح واجهة برمجة التطبيقات لاختصارات لوحة المفاتيح للتطبيقات إمكانية نشر "المشاركة المباشرة". الأهداف مقدمًا. أدى ذلك بشكل سريع إلى تسريع عملية استرداد "المشاركة المباشرة". المستهدفة عند إعداد قائمة مشاركة البيانات. المشاركة المباشرة في ChooserTargetService الآلية، إلا أنّ النظام يصنّف الأهداف المقدَّمة بهذه الطريقة أقل من أي هدف يستخدم واجهة برمجة تطبيقات اختصارات المشاركة.

تم إيقاف خدمة ChooserTargetService نهائيًا في نظام Android 11 (المستوى 30 من واجهة برمجة التطبيقات) ويُرجى العِلم بأنّ واجهة برمجة التطبيقات لاختصارات المشاركة هي الطريقة الوحيدة لتوفير أهداف "المشاركة المباشرة".

كيف تختلف الاختصارات المنشورة لأهداف المشاركة عن مشغّل التطبيقات؟ (الاستخدام المعتاد للاختصارات عند الضغط مع الاستمرار على أيقونات التطبيقات في Google Cloud Platform)؟

أي اختصارات منشورة لـ "هدف المشاركة" الغرض منه أيضًا تشغيل وسيتم عرضه في القائمة عند الضغط مع الاستمرار على رمز التطبيق. تشير رسالة الأشكال البيانية الحد الأقصى لعدد الاختصارات لكل نشاط ينطبق أيضًا على إجمالي عدد الاختصارات التي ينشرها تطبيق (مشاركة الأهداف واختصارات مشغّل التطبيقات القديمة مجتمعة).

ما هي الإرشادات المتعلقة بعدد اختصارات المشاركة التي يجب أن ينشرها المستخدم؟

يقتصر عدد اختصارات المشاركة على الحد الأقصى نفسه للاختصارات الديناميكية المتوفّرة من خلال getMaxShortcutCountPerActivity(android.content.Context). يمكن للمرء نشر أي إلى هذا الحد، ولكن يجب أن تضع في اعتبارك أن اختصارات المشاركة يمكن أن تكون مرئية اضغط مع الاستمرار في مشغّل التطبيقات وفي ورقة المشاركة. معظم مشغّلات التطبيقات مفعَّلة الضغط مع الاستمرار لعرض أربعة أو خمسة اختصارات كحد أقصى في الوضع الرأسي وثمانية في الوضع الأفقي. عرض هذا المحتوى الأسئلة الشائعة لمزيد من التفاصيل والإرشادات حول مشاركة الاختصارات.