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

الشكل 1: نظرة عامة على ImsService
باستخدام واجهة ImsService، يمكن لمطوّر IMS توفير معلومات مهمة بشأن الإشارات إلى النظام الأساسي، مثل معلومات التسجيل في IMS، ودمج خدمة الرسائل القصيرة عبر IMS، ودمج ميزة MmTel لتوفير مكالمات صوتية ومكالمات فيديو. واجهة برمجة التطبيقات ImsService هي أيضًا إحدى واجهات برمجة تطبيقات نظام Android، ما يعني أنّه يمكن إنشاءها مباشرةً باستخدام حزمة تطوير البرامج (SDK) لنظام Android بدلاً من استخدام المصدر. يمكن أيضًا ضبط تطبيق IMS مثبَّت مسبقًا على الجهاز ليكون قابلاً للتحديث من خلال "متجر Play".
الأمثلة والمصدر
يوفّر نظام التشغيل Android تطبيقًا في "مشروع Android المفتوح المصدر" (AOSP) ينفّذ أجزاءً من واجهة برمجة التطبيقات ImsService API لأغراض الاختبار والتطوير. يمكنك العثور على التطبيق في /testapps/ImsTestService.
يمكنك العثور على مستندات ImsService API في ImsService وفي الفئات الأخرى في واجهة برمجة التطبيقات.
التنفيذ
واجهة برمجة التطبيقات ImsService هي واجهة برمجة تطبيقات عالية المستوى تتيح لك تنفيذ IMS بطرق عديدة، حسب الأجهزة المتاحة. على سبيل المثال، تختلف تغييرات التنفيذ حسب ما إذا كان تنفيذ نظام إدارة معلومات IP (IMS) يتم بالكامل على معالج التطبيق أو إذا كان يتم نقله جزئيًا أو كليًا إلى المودم. لا يوفّر نظام التشغيل Android طبقة تجريد الأجهزة (HAL) عامة لتفريغ المهام إلى معالج النطاق الأساسي، لذا يجب أن يتم أي تفريغ للمهام باستخدام إضافة HAL إلى المودم.
التوافق مع عمليات التنفيذ القديمة لنظام إدارة المعلومات
على الرغم من أنّ نظام التشغيل Android 9 يتضمّن واجهة برمجة التطبيقات ImsService، لا يمكن للأجهزة التي تستخدم إصدارًا قديمًا من IMS أن تتوافق مع واجهة برمجة التطبيقات.
بالنسبة إلى هذه الأجهزة، تم نقل واجهات AIDL القديمة وفئات التغليف إلى مساحة الاسم android.telephony.ims.compat. عند الترقية إلى Android 9، يجب أن تنفّذ الأجهزة القديمة ما يلي لمواصلة توفير الدعم لواجهة برمجة التطبيقات القديمة.
- غيِّر مساحة الاسم لتنفيذ ImsService من أجل التوسيع من واجهة برمجة التطبيقات لمساحة الاسم
android.telephony.ims.compat. - عدِّل تعريف خدمة ImsService في ملف AndroidManifest.xml لاستخدام إجراء
android.telephony.ims.compat.ImsServiceintent-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، ستلجأ المنصة دائمًا إلى ميزة "الرجوع إلى شبكة الجيل الثاني" عند الاتصال بخدمات الطوارئ. يجب تحديد الميزة 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 وربطها.
الشكل 2: بدء خدمة ImsService وربطها
رصد إطار عمل وتنفيذ ImsService والتحقّق منهما
بعد تحديد ImsService بشكل صحيح في ملف AndroidManifest.xml، يجب إعداد النظام الأساسي للربط (بشكل آمن) بـ ImsService عند الحاجة. هناك نوعان من ImsServices يربط بهما إطار العمل:
- خدمات ImsService "تتجاوز" مشغّل شبكة الجوّال: يتم تحميل هذه الخدمات مسبقًا على الجهاز، ولكنها مرتبطة بمشغّل واحد أو أكثر لشبكة الجوّال، ولن يتم ربطها إلا عند إدخال شريحة SIM متوافقة. يتم ضبط هذا الإعداد باستخدام
config_ims_mmtel_package_override_stringمفتاح CarrierConfig لخدمات IMS التي تنفّذ ميزات MMTEL.config_ims_rcs_package_override_stringبالنسبة إلى ImsServices التي تنفّذ ميزات RCS.
- خدمة ImsService "الافتراضية" للجهاز: هي خدمة ImsService الافتراضية التي يحمّلها مصنّع المعدات الأصلية على الجهاز، ويجب أن تكون مصمَّمة لتقديم خدمات نظام إدارة معلومات الاتصالات (IMS) في جميع الحالات التي لا تتوفّر فيها خدمة ImsService لمشغّل شبكة الجوّال، وتكون مفيدة في الحالات التي لا يتم فيها إدخال شريحة SIM في الجهاز أو لا تتضمّن شريحة SIM المُدخَلة خدمة ImsService لمشغّل شبكة الجوّال. يتم تحديد ذلك في طبقة الجهاز باستخدام الإعدادات التالية:
config_ims_mmtel_package: تطبيق ميزات MMTELconfig_ims_rcs_package: تنفيذ ميزات خدمات الاتصالات التفاعلية (RCS)
لا يتيح نظام التشغيل 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 واحدة لكل ميزة) بالترتيب التالي على أساس كل ميزة:
- اسم حزمة ImsService الذي تحدّده قيمة CarrierConfig
config_ims_[mmtel/rcs]_package_override_stringعند إدخال شريحة SIM. - اسم حزمة ImsService المحدّد في قيمة تراكب الجهاز
config_ims_[mmtel/rcs]_package، بما في ذلك الحالة التي لا يتم فيها إدخال شريحة SIM. يجب أن يتيح ImsService استخدام ميزة Emergency MmTel.
يجب أن يتوفّر لديك اسم حزمة ImsService محدّد في CarrierConfig لكل شركة اتصالات ستستخدم هذه الحزمة أو في تراكب الجهاز إذا كانت ImsService هي الإعداد التلقائي، كما هو موضّح أعلاه.
دعنا نوضّح ذلك لكل ميزة. بالنسبة إلى جهاز (بشريحة SIM واحدة أو متعددة) مزوّد بشريحة SIM واحدة، تتوفّر ميزتان من ميزات IMS، وهما MMTel وRCS. سيحاول إطار العمل الربط بالترتيب المحدّد أعلاه لكل ميزة، وإذا لم تكن الميزة متاحة لـ ImsService المحدّدة في عملية إلغاء Carrier Configuration، سيعود إطار العمل إلى ImsService التلقائية. على سبيل المثال، يوضّح الجدول أدناه ميزة IMS التي سيستخدمها إطار العمل عند توفّر ثلاثة تطبيقات IMS تنفّذ ImsServices مثبّتة على نظام يتضمّن الميزات التالية:
- تتيح خدمة ImsService الخاصة بمشغّل شبكة الجوّال (أ) استخدام خدمات الاتصالات التفاعلية (RCS)
- تتيح خدمة ImsService الخاصة بمشغّل شبكة الجوّال B خدمات الاتصالات التفاعلية (RCS) وMMTel
- تتيح خدمة ImsService من المصنّع الأصلي للجهاز خدمات RCS وMMTel
| تم إدخال شريحة SIM | ميزة "خدمات الاتصالات التفاعلية" | ميزة MMTel |
|---|---|---|
| مشغّل شبكة الجوّال (أ) | مشغّل شبكة الجوّال (أ) | المصنّع الأصلي للجهاز |
| مشغّل شبكة الجوّال (ب) | مشغّل شبكة الجوّال (ب) | مشغّل شبكة الجوّال (ب) |
| ليس هناك شريحة SIM | المصنّع الأصلي للجهاز | المصنّع الأصلي للجهاز |
التحقق من صحة البيانات
لا تتضمّن هذه الصفحة أدوات للتحقّق من عملية تنفيذ IMS نفسها، لأنّ مواصفات 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.