إضافة ميزات ذات صلة بالمحادثة إلى تطبيق Android باستخدام واجهتَي برمجة تطبيقات المراسلة والأشخاص

1. قبل البدء

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

في هذا الدرس التطبيقي حول الترميز، ستتعلّم كيفية استخدام واجهات برمجة التطبيقات هذه لإنشاء منظومة متكاملة وجذابة لتطبيقات المحادثات على Android. يمكنك توسيع نطاق تطبيق JetChat، وهو تطبيق دردشة بسيط وغير يعمل يستخدم ميزة إنشاء Jetpack.

المتطلبات الأساسية

  • معرفة أساسية بتطوير تطبيقات Android
  • معرفة أساسية بالإشعارات

ما الذي ستنشئه

تطبيق JetChat الموسَّع الذي ينفّذ ما يلي:

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

المعلومات التي ستطّلع عليها

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

المتطلبات

  • Git
  • استوديو Android
  • حساب GitHub

2. الإعداد

تستند نقطة البداية إلى تطبيق JetChat. يعمل رمز إجراء التفعيل على توسيع نطاق تطبيق JetChat لعرض واجهتَي برمجة تطبيقات المراسلة وPeople بشكل أفضل.

الحصول على رمز إجراء التفعيل

للحصول على رمز التفعيل الخاص بهذا الدرس التطبيقي حول الترميز، اتّبِع الخطوات التالية:

  1. من سطر الأوامر، استنساخ مستودع جيت هب التالي:
git clone –branch starter-code \
https://github.com/android/people-messaging-codelab.git
  1. افتح المشروع في "استوديو Android" ثم انقر على a1bbb9d97659a043.png تشغيل التطبيق. تظهر لوحة المحاكي وتعرض التطبيق.

استكشِف تطبيق JetChat الموسّع

  1. في مربّع النص Message #composers على التطبيق، أدخِل رسالة ثم انقر على إرسال.
  2. الانتقال بعيدًا عن التطبيق بعد بضع ثوانٍ، ستتلقّى إشعارًا فوريًا يحتوي على ردّ من شخص في المحادثة.

3- إنشاء إشعارات المحادثات

تم تقديم واجهات برمجة تطبيقات في نظام التشغيل Android تسمح بظهور الإشعارات المتعلّقة بالمحادثات في قسم معيّن ضمن درج الإشعارات، والتي تقتصر على المحادثات.

درج الإشعارات الذي يظهر عند التمرير سريعًا للأسفل من شريط الحالة

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

لإرسال إشعارات من الصف NotificationCompat.MessagingStyle، يُرجى اتّباع الخطوات التالية:

  1. في علامة التبويب المشروع ضمن "استوديو Android"، انقر على app >. java > com.example.compose.jetchat > conversation ثم انقر مرّتين على ConversationFragment.
  2. في الملف ConversationFragment.kt، ابحث عن الفئة ConversationFragment، ثم ابحث عن مجموعة الرموز Notification الخاصة بدالة createNotification والتي تم إنشاء الإشعار فيها.
  3. استبدِل طريقة setContentText بطريقة setStyle التي تضبط نمط الإشعار على الفئة NotificationCompat.MessagingStyle. تضيف فئة المساعدة هذه الرسالة التي تم ضبطها باستخدام طريقة setContextText مع سياق إضافي ذي صلة بالرسالة، مثل وقت إرسالها والشخص الذي أرسلها.

ConversationFragment.kt

private fun createNotification(
   notificationId: Int,
   message: Message,
   person: Person,
   shortcut: ShortcutInfoCompat,
   time: Long
): Notification? {
    ...
    .setStyle(NotificationCompat.MessagingStyle(person).addMessage(
                      NotificationCompat.MessagingStyle.Message(
                          message.content,
                          time,
                          person
                      )
    )
    )
    ...
    .build()
}

تشغيل التطبيق

  1. شغِّل التطبيق.
  2. في مربّع النص Message #composers على التطبيق، أدخِل رسالة ثم انقر على إرسال.
  3. الانتقال بعيدًا عن التطبيق ستتلقّى إشعارًا فوريًا مرة أخرى، ولكن بتصميم مختلف. وتتضمن صورة رمزية ونمطًا مميزًا للرسالة. ومع ذلك، هناك المزيد من الإجراءات التي عليك اتّخاذها قبل ظهور الإشعارات في المكان الذي من المفترض أن تظهر فيه.

4. إنشاء أهداف المشاركة للمحادثات

يجب الإشارة إلى اختصار مشاركة أو مشاركة هدف في الإشعار. يتم تحديد أهداف المشاركة في ملف shortcuts.xml وهي نقاط الدخول إلى الاختصارات التي يتم تحديدها آليًا. تمثّل الاختصارات التي تنشئها المحادثات في التطبيق، وتسمح لك بمشاركة المحتوى في محادثاتك.

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

  1. في علامة التبويب المشروع، انقر بزر الماوس الأيمن على الدليل res ثم اختَر جديد > الدليل.
  2. في مربّع النص، أدخِل xml، ثم اضغط على Enter (أو return على نظام التشغيل macOS).
  3. انقر بزر الماوس الأيمن على الدليل xml، ثم اختَر ملف.
  4. في مربّع النص، أدخِل shortcuts.xml، ثم اضغط على Enter (أو return على نظام التشغيل macOS).
  5. في الملف shortcuts.xml، اذكر هدف المشاركة الذي يعالج مشاركة البيانات من النوع text/plain:

shortcuts.xml

<shortcuts xmlns:android="http://schemas.android.com/apk/res/android">
  <share-target android:targetClass="com.example.compose.jetchat.NavActivity">
   <data android:mimeType="text/plain" />
   <category android:name="com.example.compose.jetchat.share.TEXT_SHARE_TARGET" />
 </share-target>
</shortcuts>
  1. في علامة التبويب المشروع، انقر على manifests ثم انقر مرّتين على الرمز AndroidManifest.xml.
  2. في ملف AndroidManifest.xml، حدِّد الملف shortcuts.xml:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.compose.jetchat">

   <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.Jetchat.NoActionBar">
...
 <meta-data android:name="android.app.shortcuts"
            android:resource="@xml/shortcuts" />

    </application>
</manifest>
  1. في المكوِّن activity لملف AndroidManifest.xml، حدِّد فلتر الأهداف الذي يحتوي على منطق المشاركة:

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.compose.jetchat">

   ...
       <activity
           ...
           <intent-filter>
               <action android:name="android.intent.action.SEND" />
               <category android:name="android.intent.category.DEFAULT" />
               <data android:mimeType="text/plain" />
           </intent-filter>
...

تحديد الاختصارات

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

لإنشاء اختصار، اتبع الخطوات التالية:

  1. في علامة التبويب المشروع، انقر على app >. java > com.example.compose.jetchat > conversation > util ثم انقر مرّتين على الرمز ConversationUtil.
  2. في ملف ConversationUtil.kt، أضِف الدالة generateShortcut:

ConversationUtil.kt

import android.content.Intent
import androidx.core.content.pm.ShortcutInfoCompat
import com.example.compose.jetchat.NavActivity

class ConversationUtil {

   companion object {
...
fun generateShortcut(context: Context, shortcutId: String): ShortcutInfoCompat {
   return ShortcutInfoCompat.Builder(context, shortcutId)
   .setCategories(setOf(CATEGORY_SHARE))
   .setLongLived(true)
   .setShortLabel(shortcutId)
   .setLongLabel(shortcutId)
   .setIntent(
       Intent(context, NavActivity::class.java)
           .setAction(Intent.ACTION_VIEW)
   )
   .build()
}

تحتوي هذه الدالة على الطريقتين setPerson وsetLongLived المطلوبتين للمحادثة. المستخدم هو جهة الاتصال المرتبطة بالاختصار، ويؤدي ضبط فترة طويلة على قيمة true إلى ضمان أن يتم تخزين هذا الاختصار مؤقتًا في النظام وعرضه على مساحات عرض مختلفة في واجهة المستخدم.

يُرجى الرجوع إلى الاختصار في الإشعار.

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

ولإجراء ذلك، اتبع الخطوات التالية:

  1. في ملف ConversationFragment.kt، ابحث عن الصف ConversationFragment.
  2. قبل استدعاء المتغيّر notification، أنشِئ متغيّر shortcut يشير إلى الاختصار الذي تم إنشاؤه من ConversationUtil.generateShortcut.
  3. في طريقة createNotification للمتغيّر notification، استبدِل null بالمتغيّر shortcut كمَعلمة.

ConversationFragment.kt

private fun simulateResponseAsANotification() {
   ...
   if (message.author != "me") {
       ...
       val shortcut = ConversationUtil.generateShortcut(context!!, message.author)
       val notification = createNotification(notificationId, message, person, shortcut, time)
       ...
   }
}
  1. في الطريقة createNotification، أضِف الطريقة NotificationCompat.Builder#setShortcutInfo، ثم أدخِل المتغيّر shortcut كمَعلمة.

ConversationFragment.kt

private fun createNotification(
  notificatoinIf: Int,
  messagin: Message,
  person: Person,
  shortcut: ShortcutInfoCompat?,
  time: Long
): Notification {
...
return NotificationCompat.Builder(context!!,  ConversationUtil.CHANNEL_MESSAGES)
   ...
   .setShortcutInfo(shortcut)
   .build()
}

نشر الاختصار

  • لنشر الاختصار، في الدالة simulateResponseAsANotification قبل طريقة notificationManager.notify، يمكنك استدعاء طريقة pushDynamicShortcut:

ConversationFragment.kt

import androidx.core.content.pm.ShortcutManagerCompat

...private fun simulateResponseAsANotification() {
   ...
   if (message.author != "me") {
       ...
       ShortcutManagerCompat.pushDynamicShortcut(context!!, shortcut)
       ...
   }
}

تشغيل التطبيق

  1. شغِّل التطبيق.
  2. في مربّع النص Message #composers على التطبيق، أدخِل رسالة ثم انقر على إرسال.
  3. الانتقال بعيدًا عن التطبيق تتلقى إشعارًا فوريًا مرة أخرى، ولكن نمطه أكثر وضوحًا كإشعار متعلق بالمحادثة. يكون رمز الأفاتار أكثر وضوحًا ويدمج رمز التطبيق. ويكون المرسل والوقت والنص أيضًا أكثر سلاسة.

5- اختياري: تفعيل الفقاعات التفسيرية

تم طرح فقاعات المحادثات في الإصدار 9 من نظام Android، وتم تحسينها وإعادة استخدامها في سياق المحادثات في الإصدار 11 من نظام Android. الفقاعات التفسيرية عبارة عن طبقات دائرية على شكل صور رمزية لمحادثاتك. وهي تظهر في مشغّل التطبيقات، وتتيح لك الرد بسهولة على المحادثات من خلال فقاعة تفسيرية موسّعة. وحتى عند تنفيذ الفقاعات التفسيرية، تكون اختيارية بناءً على ما يفضّله المستخدم.

لتفعيل الفقاعات التفسيرية، يُرجى اتّباع الخطوات التالية:

  1. في ملف AndroidManifest.xml، أضِف السمتَين allowEmbedded وresizeableActivity، ثم اضبط كلّ منهما على قيمة true:

AndroidManifest.xml

<activity
  ...
  android:allowEmbedded="true"
  android:resizeableActivity="true"
  ...
</activity>
  1. في الصف ConversationUtil الخاص بملف ConversationUtil.kt، أضِف البيانات الوصفية للفقاعات التفسيرية:

ConversationUtil.kt

import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat


fun createBubbleMetadata(context: Context, icon: IconCompat): NotificationCompat.BubbleMetadata {
        // Create bubble intent
        val target = Intent(context, NavActivity::class.java)
        val bubbleIntent = PendingIntent.getActivity(context, REQUEST_BUBBLE, target, flagUpdateCurrent(mutable = true))

        // Create bubble metadata
        return NotificationCompat.BubbleMetadata.Builder(bubbleIntent, icon)
            .setDesiredHeight(400)
            .setSuppressNotification(true)
            .build()
    }
  1. في ملف ConversationFragment.kt، أنشئ البيانات الوصفية للفقاعة التفسيرية وأشِر إليها في الإشعار:

ConversationFragment.kt

private fun createNotification(
  notificatoinIf: Int,
  messagin: Message,
  person: Person,
  shortcut: ShortcutInfoCompat?,
  time: Long
): Notification {
...
// Reference the bubble metadata in the notification.
  return NotificationCompat.Builder(context!!,     ConversationUtil.CHANNEL_MESSAGES)
    ...
     .setBubbleMetadata(ConversationUtil.createBubbleMetadata(context!!, person.icon!!))
...
    .build()
}

تشغيل التطبيق

  1. شغِّل التطبيق.
  2. في مربّع النص Message #composers على التطبيق، أدخِل رسالة ثم انقر على إرسال.
  3. الانتقال بعيدًا عن التطبيق بعد بضع ثوانٍ، ستتلقّى إشعارًا من المحادثة على شكل فقاعة.
  4. انقر على الفقاعة. تفتح المحادثة من الفقاعة التفسيرية.

فقاعة محادثة

6- اختياري: مشاركة رابط

لقد أعلنت عن أهداف المشاركة وأشرت إليها في الإشعارات، ما أتاح أيضًا عرض جهة الاتصال في "قائمة مشاركة البيانات"، وهو مكوّن من أسفل إلى أعلى يظهر عند إرسال هدف ACTION. تظهر أهداف المشاركة أعلى "قائمة المشاركة"، وتسمح لك بمشاركة محتوى وافٍ في محادثاتك.

لاستدعاء ورقة المشاركة، اتبع الخطوات التالية:

  1. على جهازك، افتح Google Chrome، ثم انتقِل إلى صفحة ويب من اختيارك، مثل developer.android.com.
  2. إذا لزم الأمر، انقر على 2fdbaccda71bc5f0.png مزيد من الصفحة.
  3. انقر على رمز مشاركة 771b0be21764f6b6.png. تظهر ورقة المشاركة أسفل الشاشة.

قائمة المشاركة

  1. انقر على 468248e6b8a84bb3.png JetChat إن أمكن. تتم مشاركة عنوان URL في المحادثة.
  2. إذا لم يظهر لك 468248e6b8a84bb3.png JetChat، انقر على 145399af71577431.png المزيد لاستدعاء "قائمة مشاركة النظام"، ثم مرِّر سريعًا للأعلى على ShareSheet وانقر على 468248e6b8a84bb3.png JetChat. وتتم مشاركة عنوان URL في المحادثة.

يعد ذلك مثالاً بسيطًا. هناك أنواع أكثر ثراءً من المحتوى يمكن مشاركتها. لمزيد من المعلومات، يُرجى الاطّلاع على استرداد البيانات البسيطة من التطبيقات الأخرى.

7. تهانينا

تهانينا! لقد تعرفت الآن على كيفية إضافة الميزات المتعلقة بالمحادثة إلى تطبيق Android باستخدام واجهتَي برمجة تطبيقات المراسلة والأشخاص. مراسلة سعيدة!

مزيد من المعلومات