تنفيذ الرسائل الفورية

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

نظرة عامة حول ImsService

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

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

الأمثلة والمصدر

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

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

التنفيذ

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

التوافق مع عمليات تنفيذ IMS القديمة

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

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

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

تسجيل ImsService باستخدام إطار العمل

يتمّ تنفيذ ImsService API كخدمة ضِمن إطار عمل Android. من أجل التواصل مع تنفيذ IMS. ثلاث خطوات اللازمة لتسجيل تطبيق ينفِّذ خدمة ImsService مع إطار العمل. أولاً، يجب أن يتم تسجيل تنفيذ ImsService لنفسه لدى نظام أساسي يستخدم AndroidManifest.xml للتطبيق؛ ثانيًا، ينبغي أن تحديد ميزات الرسائل الفورية التي يدعمها التنفيذ (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.

ميزة_MMTEL

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

ميزة_EMERGENCY_MMTEL

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

ميزة RCS

لا تنفِّذ واجهة برمجة التطبيقات ImsService API أيًّا من ميزات خدمات الاتصالات التفاعلية (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: يتم تحميل هذه ImsServices مسبقًا على ولكن هذه الأجهزة متصلة بمشغل شبكة جوّال واحد أو أكثر ولن يتم نقلها إلا عند إدخال شريحة SIM مطابقة. يتم ضبط هذا باستخدام
  2. الجهاز "تلقائي" ImsService: هذا هو ImsService التلقائي الذي يتم تحميله على الجهاز من قِبل المصنّع الأصلي للجهاز ويجب تصميمه لتوفير خدمات الرسائل الفورية جميع الحالات التي لا يتوفر فيها مشغل شبكة الجوال 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 المتعددة

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

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

يجب أن يكون اسم حزمة ImsService محدّدًا في CarrierConfig لكل شركة من شركات النقل التي ستستخدم هذه الحزمة أو في ظهور الجهاز على سطح آخر في حال اختيار ImsService لتكون القيمة التلقائية على النحو المحدَّد أعلاه.

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

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

التحقُّق

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

تطوير تطبيق IMS

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

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

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

استخدام ImsStateCallback

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

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

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

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