تنفيذ IMS

يتضمّن نظام التشغيل Android 9 واجهة SystemApi تُسمى ImsService لمساعدتك في تنفيذ نظام IP Multimedia Subsystem (IMS). واجهة برمجة التطبيقات ImsService هي واجهة محددة جيدًا بين نظام التشغيل Android وتنفيذ IMS الذي يوفّره بائع أو مشغّل شبكة الجوّال.

نظرة عامة على ImsService

الشكل 1. نظرة عامة على ImsService

باستخدام واجهة ImsService، يمكن لمطوّر IMS توفير معلومات مهمة حول الإشارات إلى النظام الأساسي، مثل معلومات التسجيل في IMS، ودمج الرسائل القصيرة عبر IMS، ودمج ميزات MmTel لتوفير مكالمات صوتية ومكالمات فيديو. واجهة برمجة التطبيقات ImsService هي أيضًا إحدى واجهات برمجة تطبيقات نظام Android، ما يعني أنّه يمكن إنشاءها مباشرةً باستخدام حزمة تطوير البرامج (SDK) لنظام Android بدلاً من استخدام المصدر. يمكن أيضًا ضبط تطبيق IMS مثبَّت مسبقًا على الجهاز ليكون قابلاً للتحديث من خلال "متجر Play".

أمثلة ومصدر

يوفّر نظام التشغيل Android تطبيقًا على AOSP ينفّذ أجزاءً من واجهة ImsService API لأغراض الاختبار والتطوير. يمكنك العثور على التطبيق في /testapps/ImsTestService.

يمكنك العثور على مستندات ImsService API في ImsService وفي الفئات الأخرى في واجهة برمجة التطبيقات.

التنفيذ

واجهة برمجة التطبيقات ImsService هي واجهة برمجة تطبيقات عالية المستوى تتيح لك تنفيذ IMS بطرق عديدة، حسب الأجهزة المتاحة. على سبيل المثال، تختلف تغييرات التنفيذ حسب ما إذا كان تنفيذ نظام إدارة معلومات IP بالكامل يتم على معالج التطبيق أو إذا كان يتم نقله جزئيًا أو كليًا إلى المودم. لا يوفّر نظام التشغيل Android طبقة تجريد الأجهزة (HAL) عامة لتفريغ المهام إلى معالج النطاق الأساسي، لذا يجب أن يتم أي تفريغ للمهام باستخدام إضافة طبقة تجريد الأجهزة إلى المودم.

التوافق مع عمليات التنفيذ القديمة لنظام إدارة المعلومات

على الرغم من أنّ نظام التشغيل Android 9 يتضمّن واجهة برمجة التطبيقات ImsService، لا يمكن للأجهزة التي تستخدم إصدارًا قديمًا من IMS أن تتوافق مع واجهة برمجة التطبيقات. بالنسبة إلى هذه الأجهزة، تم نقل واجهات AIDL القديمة وفئات التغليف إلى مساحة الاسم android.telephony.ims.compat. عند الترقية إلى Android 9، يجب أن تنفّذ الأجهزة القديمة ما يلي لمواصلة توفير الدعم لواجهة برمجة التطبيقات القديمة.

  • غيِّر مساحة الاسم لتنفيذ ImsService من أجل التوسيع من واجهة برمجة التطبيقات الخاصة بمساحة الاسم android.telephony.ims.compat.
  • عدِّل تعريف خدمة ImsService في ملف AndroidManifest.xml لاستخدام إجراء android.telephony.ims.compat.ImsService intent-filter بدلاً من إجراء android.telephony.ims.ImsService.

سيربط إطار العمل بعد ذلك بـ ImsService باستخدام طبقة التوافق المضمّنة في Android 9 للعمل مع التنفيذ القديم ImsService.

تسجيل ImsService في إطار العمل

يتم تنفيذ واجهة برمجة التطبيقات ImsService كخدمة يربطها إطار عمل Android للتواصل مع تنفيذ IMS. يجب اتّباع ثلاث خطوات لتسجيل تطبيق ينفّذ ImsService باستخدام إطار العمل. أولاً، يجب أن يسجّل تنفيذ ImsService نفسه في النظام الأساسي باستخدام AndroidManifest.xml للتطبيق، وثانيًا، يجب أن يحدّد ميزات IMS التي يتيحها التنفيذ (MmTel أو RCS)، وثالثًا، يجب التحقّق من أنّه تنفيذ IMS موثوق به إما في إعدادات مشغّل شبكة الجوّال أو في تراكب الجهاز.

تعريف الخدمة

يسجّل تطبيق IMS خدمة ImsService في إطار العمل عن طريق إضافة إدخال service إلى البيان بالتنسيق التالي:

<service
    android:name="com.egcorp.ims.EgImsService"
    android:directBootAware="true"
    Android:persistent="true"
    ...
    android:permission="android.permission.BIND_IMS_SERVICE" >
    ...
    <intent-filter>
        <action android:name="android.telephony.ims.ImsService" />
    </intent-filter>
</service>

يحدد تعريف service في AndroidManifest.xml السمات التالية، وهي ضرورية للتشغيل الصحيح:

  • directBootAware="true": يسمح باكتشاف الخدمة وتشغيلها من خلال telephony قبل أن يفتح المستخدم قفل الجهاز. لا يمكن للخدمة الوصول إلى مساحة التخزين المشفّرة على الجهاز قبل أن يفتح المستخدم قفل الجهاز. لمزيد من المعلومات، يُرجى الاطّلاع على توافُق وضع "التشغيل المباشر" والتشفير المستند إلى الملفات.
  • persistent="true": يسمح بتشغيل هذه الخدمة بشكل مستمر وعدم إيقافها من قِبل النظام لاستعادة الذاكرة. لا تعمل هذه السمة إلا إذا تم إنشاء التطبيق كتطبيق نظام.
  • permission="android.permission.BIND_IMS_SERVICE": يضمن هذا الإذن ألا يتم ربط التطبيق إلا بعملية تم منحها الإذن BIND_IMS_SERVICE، ما يمنع أي تطبيق ضار من الربط بالخدمة، لأنّ تطبيقات النظام فقط هي التي يمكن أن يمنحها إطار العمل هذا الإذن.

يجب أن تحدّد الخدمة أيضًا العنصر intent-filter مع الإجراء android.telephony.ims.ImsService. يتيح ذلك للإطار البحث عن ImsService.

مواصفات ميزة IMS

بعد تعريف ImsService كخدمة Android في ملف AndroidManifest.xml، يجب أن تحدّد ImsService ميزات IMS التي تتيحها. يتيح نظام التشغيل Android حاليًا ميزتَي MmTel وRCS، ولكن لا يتم دمج سوى MmTel في إطار العمل. على الرغم من عدم توفّر واجهات برمجة تطبيقات لخدمات الاتصالات التفاعلية (RCS) مدمجة في إطار العمل، تظل هناك مزايا لتحديدها كميزة في ImsService.

في ما يلي الميزات الصالحة المحدّدة في android.telephony.ims.ImsFeature التي يمكن أن توفّرها فئة ImsService، بالإضافة إلى شرح ومثال على سبب رغبة تطبيق IMS في تنفيذ إحدى هذه الميزات أو جميعها. بعد تحديد كل ميزة، توضّح هذه الصفحة كيف يحدّد ImsService مجموعة الميزات التي يحدّدها لكل فتحة بطاقة SIM.

FEATURE_MMTEL

تنفّذ ImsService ميزة IMS MMTEL التي تتضمّن دعمًا لجميع وسائط IMS (مواصفات IR.92 وIR.94) باستثناء الاتصال بشبكة IMS PDN لإجراء مكالمات الطوارئ. يجب أن يوسّع أي تنفيذ لـ ImsService يريد توفير ميزات MMTEL الفئة الأساسية android.telephony.ims.MmTelFeature وأن يعرض تنفيذًا مخصّصًا لـ MmTelFeature في ImsService#createMmTelFeature.

FEATURE_EMERGENCY_MMTEL

لا يشير الإعلان عن هذه الميزة إلا إلى أنّ المنصة تتيح إمكانية الاتصال بخدمات الطوارئ من خلال شبكة IMS PDN. إذا لم يتم الإفصاح عن هذه الميزة في ImsService، سيتم تلقائيًا استخدام ميزة &quot;الرجوع إلى شبكة الجيل الثاني&quot; في خدمات الطوارئ. يجب تحديد ميزة FEATURE_MMTEL لكي يتم تحديد هذه الميزة.

FEATURE_RCS

لا تنفّذ واجهة برمجة التطبيقات ImsService أي ميزات RCS في IMS، ولكن يمكن أن تكون الفئة الأساسية android.telephony.ims.RcsFeature مفيدة. يرتبط إطار العمل تلقائيًا بـ ImsService ويطلب ImsService#createRcsFeature عند رصد أنّ الحزمة يجب أن توفّر خدمات الاتصالات التفاعلية (RCS). في حال إزالة شريحة SIM المرتبطة بخدمة RCS، سيطلب إطار العمل تلقائيًا تنفيذ RcsFeature#onFeatureRemoved ثم سيحذف ImsService المرتبط بميزة RCS. يمكن أن تزيل هذه الوظيفة بعض منطق الربط أو الاكتشاف المخصّص الذي كان من المفترض أن توفّره إحدى ميزات RCS.

تسجيل الميزات المتوافقة

يربط إطار عمل الاتصالات أولاً بـ ImsService للاستعلام عن الميزات التي يتيحها باستخدام واجهة برمجة التطبيقات ImsService#querySupportedImsFeatures. بعد أن يحدّد إطار العمل الميزات التي ستتيحها ImsService، سيتم استدعاء ImsService#create[...]Feature لكل ميزة ستكون ImsService مسؤولة عنها. إذا تغيّرت الميزات التي يتيحها تطبيق IMS، يمكنك استخدام ImsService#onUpdateSupportedImsFeatures لإرسال إشارة إلى إطار العمل لإعادة احتساب الميزات المتاحة. راجِع الرسم البياني التالي لمزيد من المعلومات حول عملية تهيئة ImsService وربطها.

تهيئة ImsService وربطها

الشكل 2. تهيئة ImsService وربطها

رصد إطار عمل وتنفيذ ImsService والتحقّق منه

بعد تحديد ImsService بشكل صحيح في ملف AndroidManifest.xml، يجب إعداد النظام الأساسي لربط ImsService (بشكل آمن) عند الحاجة. هناك نوعان من ImsServices يربط بهما إطار العمل:

  1. خدمات ImsService "التي تتجاوز" مشغّل شبكة الجوّال: يتم تحميل هذه الخدمات مسبقًا على الجهاز، ولكنها مرتبطة بمشغّل شبكة جوّال واحد أو أكثر، ولن يتم ربطها إلا عند إدخال شريحة SIM متوافقة. يتم ضبط هذا الإعداد باستخدام
  2. خدمة ImsService "الافتراضية" للجهاز: هي خدمة ImsService الافتراضية التي يحمّلها مصنّع المعدات الأصلية على الجهاز، ويجب أن تكون مصمَّمة لتقديم خدمات نظام إدارة معلومات الاتصالات (IMS) في جميع الحالات التي لا تتوفّر فيها خدمة ImsService لمشغّل شبكة الجوّال، وتكون مفيدة في الحالات التي لا يتم فيها إدخال شريحة SIM في الجهاز أو لا تتضمّن شريحة SIM المُدخَلة خدمة ImsService لمشغّل شبكة الجوّال. يتم تحديد ذلك في تراكب الجهاز باستخدام الإعدادات التالية:

لا يتيح نظام التشغيل Android استخدام تطبيقات تتضمّن عمليات تنفيذ ImsService قابلة للتنزيل من جهات خارجية، لذا يجب أن تكون أي عمليات تنفيذ ImsService محدّدة هنا تطبيقات نظام، ويجب أن تكون موجودة في المجلد /system/priv-app/ أو /product/priv-app/ لمنح الأذونات المناسبة (أي أذونات الهاتف والميكروفون والموقع الجغرافي والكاميرا وجهات الاتصال). من خلال التحقّق مما إذا كان اسم حزمة تنفيذ نظام إدارة معلومات الاتصال (IMS) يتطابق مع قيم CarrierConfig أو قيم التراكب على الجهاز المحدّدة أعلاه، يتم ربط التطبيقات الموثوق بها والمثبّتة مسبقًا فقط.

التخصيص

لا يتم ربط التطبيقات التي تنفّذ ImsService إلا على الأجهزة التي تم ضبطها على أنّها إعدادات ImsService "تجاوز" لمشغّل شبكة الجوّال أو إعدادات ImsService "تلقائية" للجهاز من أجل وظائف MMTEL أو RCS. تسمح خدمة ImsService أيضًا بتفعيل ميزات نظام إدارة معلومات الاتصالات (IMS) المتوافقة معها (MMTEL وRCS) أو إيقافها بشكل ديناميكي باستخدام التحديثات من خلال طريقة ImsService#onUpdateSupportedImsFeatures. يؤدي ذلك إلى تفعيل الإطار لإعادة احتساب الخدمات المرتبطة بـ ImsServices والميزات التي تتوافق معها. إذا حدّث تطبيق IMS إطار العمل بدون أي ميزات متوافقة، سيتم إلغاء ربط ImsService إلى أن تتم إعادة تشغيل الهاتف أو إدخال شريحة SIM جديدة تتوافق مع تطبيق IMS.

أولوية الربط لخدمات ImsService المتعددة

لا يمكن للإطار دعم الربط بجميع خدمات ImsService المحمَّلة مسبقًا على الجهاز، وسيتم الربط بما يصل إلى اثنتين من خدمات ImsService لكل فتحة شريحة SIM (خدمة ImsService واحدة لكل ميزة) بالترتيب التالي على أساس كل ميزة:

  1. اسم حزمة ImsService الذي تحدده قيمة CarrierConfig config_ims_[mmtel/rcs]_package_override_string عند إدخال بطاقة SIM.
  2. اسم حزمة ImsService المحدّد في قيمة التراكب على الجهاز config_ims_[mmtel/rcs]_packageبما في ذلك الحالة التي لا يتم فيها إدخال شريحة SIM. يجب أن تتيح خدمة ImsService هذه ميزة Emergency MmTel.

يجب أن يتوفّر لديك اسم حزمة ImsService محدّد في CarrierConfig لكل مشغّل شبكة سيستخدم هذه الحزمة أو في تراكب الجهاز إذا كانت ImsService هي الإعداد التلقائي، كما هو موضّح أعلاه.

دعنا نوضّح ذلك لكل ميزة. بالنسبة إلى جهاز (بشريحة SIM واحدة أو متعددة) مزوّد بشريحة SIM واحدة، تتوفّر ميزتان من ميزات نظام إدارة معلومات IP، وهما MMTel وRCS. سيحاول إطار العمل الربط بالترتيب المحدّد أعلاه لكل ميزة، وإذا لم تكن الميزة متاحة لـ ImsService المحدّدة في عملية إلغاء Carrier Configuration، سيعود إطار العمل إلى ImsService التلقائية. على سبيل المثال، يوضّح الجدول أدناه ميزة نظام إدارة معلومات الاتصالات (IMS) التي سيستخدمها إطار العمل عند توفّر ثلاثة تطبيقات لنظام إدارة معلومات الاتصالات (IMS) تنفّذ ImsServices ومثبّتة على نظام يتضمّن الميزات التالية:

  • يتيح مشغّل شبكة الجوّال (أ) استخدام خدمات الاتصالات التفاعلية (RCS) من خلال ImsService
  • تتيح خدمة ImsService الخاصة بمشغّل شبكة الجوّال B استخدام خدمات الاتصالات التفاعلية (RCS) وMMTel
  • تتيح خدمة ImsService من المصنّع الأصلي للجهاز خدمات الاتصالات التفاعلية (RCS) وMMTel
تم إدخال شريحة SIM ميزة RCS ميزة MMTel
مشغّل شبكة الجوّال (أ) مشغّل شبكة الجوّال (أ) OEM
مشغّل شبكة الجوّال (ب) مشغّل شبكة الجوّال (ب) مشغّل شبكة الجوّال (ب)
ليس هناك شريحة SIM OEM OEM

التحقُّق

لا تتضمّن هذه الصفحة أدوات للتحقّق من تنفيذ نظام إدارة المعلومات (IMS) نفسه، لأنّ مواصفات نظام إدارة المعلومات كبيرة جدًا وتتطلّب استخدام معدّات تحقّق خاصة. لا يمكن أن تتحقّق الاختبارات إلا من أنّ إطار عمل الاتصالات الهاتفية يستجيب بشكل صحيح لواجهة برمجة التطبيقات ImsService.

تطوير تطبيق IMS

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

للاستماع إلى حالة ImsService أو تعديلها لميزات MMTEL وRCS، استخدِم الفئة ImsManager للحصول على مثيل من الفئة ImsMmTelManager أو ImsRcsManager أو الفئة ProvisioningManager الخاصة بنظام إدارة معلومات الاتصالات (IMS). يمكن للتطبيق بعد ذلك الاستماع إلى حالات الخدمة والإعداد الخاصة بنظام إدارة معلومات IP، مثل:

  • ميزات MMTEL أو RCS المفعَّلة والمتاحة
  • تلقّي إشعارات عند تغيير حالة تسجيل IMS
  • حالة توفير ميزات IMS
  • ميزات IMS التي فعّلها المستخدم

استخدام ImsStateCallback

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

على الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو الإصدارات الأحدث، يمكن للتطبيق استخدام فئة ImsStateCallback لمراقبة ما إذا كانت مثيل ImsService للاشتراك المرتبط متاحًا أو غير متاح. عند الحصول على مثيل من ImsMmTelManager أو ImsRcsManager، ننصح التطبيق أولاً بالتسجيل في دالة رد نداء لحالة IMS باستخدام ImsMmTelManager#registerImsStateCallback أو ImsRcsManager#registerImsStateCallback. لمواصلة تلقّي إشعارات معاودة الاتصال بشأن اشتراكات معيّنة عندما تصبح خدمة ImsService متاحة مرة أخرى، يجب أن يلغي التطبيق تسجيل معاودة الاتصال الحالية المسجّلة من خلال ImsMmTelManager أو ImsRcsManager أو ProvisioningManager، أو أن يتجاهلها، ثم يسجّل معاودة اتصال جديدة.

إذا كان هناك اشتراك لا يتوافق مع IMS، سيطلب إطار العمل ImsStateCallback#onUnavailable مع ذكر السبب REASON_NO_IMS_SERVICE_CONFIGURED. وهذا يعني أنّ ImsService وواجهات برمجة التطبيقات ذات الصلة بنظام IMS غير متاحة للاشتراك.

في حال تعذُّر تنفيذ عملية الاتصال الهاتفي، يتلقّى التطبيق ImsStateCallback#onError ولن يتلقّى بعد ذلك أي تحديثات بشأن مثيل ImsStateCallback المسجّل. لحلّ هذه المشكلة، عليك إعادة تسجيل مثيل ImsStateCallback للاشتراك المرتبط به من خلال طلب ImsMmTelManager#registerImsStateCallback أو ImsRcsManager#registerImsStateCallback.