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

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

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

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

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

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

  1. يُرجى التعريف بعناصر share-target في ملف موارد 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>
    
  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/*"
  • بالنسبة إلى محادثة معيَّنة، بعد إرسال اختصار ديناميكي وبدء استخدام الإبلاغ، لا تغيّر معرّف الاختصار. يضمن ذلك الاحتفاظ ببيانات الاستخدام للترتيب.

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

واجهة برمجة تطبيقات اختصارات المشاركة

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

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

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

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

setShortLabel()، setLongLabel()

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

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

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

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

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

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

لا تقدِّم صورًا مقنَّعة في شكل معيّن. على سبيل المثال، قبل 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 لتوفير كل من اختصارات المشاركة وChooserTargets

ولكي تتمكّن من العمل مع مكتبة التوافق مع AndroidX، يجب أن يتضمن بيان أن يحتوي على مجموعة البيانات الوصفية selectr-target-service و intent-filters. عرض واجهة برمجة تطبيقات 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) يمكن للمرء نشر أي إلى هذا الحد، ولكن يجب أن تضع في اعتبارك أن اختصارات المشاركة يمكن أن تكون مرئية اضغط مع الاستمرار في مشغّل التطبيقات وفي ورقة المشاركة. معظم مشغّلات التطبيقات مفعَّلة الضغط مع الاستمرار على أربعة أو خمسة اختصارات كحد أقصى في الوضع الرأسي وثمانية في الوضع الأفقي. عرض هذا المحتوى الأسئلة الشائعة لمزيد من التفاصيل والإرشادات حول مشاركة الاختصارات.