आईएमएस लागू करें

Android 9 में, ImsService नाम का एक नया SystemApi इंटरफ़ेस जोड़ा गया है. इससे आपको आईपी मल्टीमीडिया सबसिस्टम (आईएमएस) लागू करने में मदद मिलेगी. ImsService API, Android प्लैटफ़ॉर्म और वेंडर या कैरियर की ओर से उपलब्ध कराए गए IMS के बीच का एक बेहतर इंटरफ़ेस है.

ImsService के बारे में खास जानकारी

पहली इमेज. ImsService के बारे में खास जानकारी

ImsService इंटरफ़ेस का इस्तेमाल करके, IMS लागू करने वाला व्यक्ति या कंपनी, प्लैटफ़ॉर्म को सिग्नल भेजने से जुड़ी अहम जानकारी दे सकती है. जैसे, IMS रजिस्ट्रेशन की जानकारी, IMS इंटिग्रेशन के ज़रिए एसएमएस भेजने की सुविधा, और वॉइस और वीडियो कॉल की सुविधा देने के लिए MmTel सुविधा का इंटिग्रेशन. ImsService API, Android सिस्टम एपीआई भी है. इसका मतलब है कि इसे सोर्स के बजाय, सीधे Android SDK के लिए बनाया जा सकता है. डिवाइस पर पहले से इंस्टॉल किए गए IMS ऐप्लिकेशन को भी, Play Store से अपडेट किए जाने के लिए कॉन्फ़िगर किया जा सकता है.

उदाहरण और सोर्स

Android, AOSP पर एक ऐप्लिकेशन उपलब्ध कराता है. यह ऐप्लिकेशन, टेस्टिंग और डेवलपमेंट के मकसद से, ImsService API के कुछ हिस्सों को लागू करता है. आपको यह ऐप्लिकेशन, /testapps/ImsTestService पर मिलेगा.

आपको ImsService में और एपीआई की अन्य क्लास में ImsService API के दस्तावेज़ मिल सकते हैं.

लागू करना

ImsService API एक हाई लेवल एपीआई है. इसकी मदद से, उपलब्ध हार्डवेयर के आधार पर IMS को कई तरीकों से लागू किया जा सकता है. उदाहरण के लिए, लागू करने के तरीके में बदलाव इस बात पर निर्भर करता है कि IMS को पूरी तरह से ऐप्लिकेशन प्रोसेसर पर लागू किया गया है या उसे कुछ हद तक या पूरी तरह से मॉडेम पर ऑफ़लोड किया गया है. Android, बेसबैंड प्रोसेसर पर ऑफ़लोड करने के लिए कोई सार्वजनिक एचएएल उपलब्ध नहीं कराता. इसलिए, मोडेम पर एचएएल एक्सटेंशन का इस्तेमाल करके ही ऑफ़लोड किया जाना चाहिए.

पुराने IMS लागू करने के साथ काम करना

Android 9 में ImsService API शामिल है. हालांकि, IMS के लिए पुराने वर्शन का इस्तेमाल करने वाले डिवाइसों पर यह एपीआई काम नहीं करता. इन डिवाइसों के लिए, पुराने AIDL इंटरफ़ेस और रैपर क्लास को android.telephony.ims.compat नेमस्पेस में ले जाया गया है. Android 9 पर अपग्रेड करने के बाद, पुराने डिवाइसों को पुराने एपीआई का इस्तेमाल जारी रखने के लिए, ये काम करने होंगे.

  • android.telephony.ims.compat नेमस्पेस एपीआई से एक्सटेंड करने के लिए, ImsService के नेमस्पेस को बदलें.
  • AndroidManifest.xml में ImsService सेवा की परिभाषा में बदलाव किया गया है, ताकि android.telephony.ims.ImsService कार्रवाई के बजाय, android.telephony.ims.compat.ImsService इंटेंट फ़िल्टर कार्रवाई का इस्तेमाल किया जा सके.

इसके बाद, फ़्रेमवर्क ImsService के साथ काम करने के लिए, Android 9 में दिए गए कंपैटबिलिटी लेयर का इस्तेमाल करके, ImsService को ImsService से बाइंड कर देगा.

फ़्रेमवर्क के साथ ImsService का रजिस्ट्रेशन

ImsService API को एक सेवा के तौर पर लागू किया जाता है, जिसे Android फ़्रेमवर्क, IMS को लागू करने के तरीके से बाइंड करने के लिए बाइंड करता है. फ़्रेमवर्क के साथ ImsService को लागू करने वाले ऐप्लिकेशन को रजिस्टर करने के लिए, तीन चरणों की ज़रूरत होती है. पहला, ImsService लागू करने की प्रक्रिया को ऐप्लिकेशन के AndroidManifest.xml का इस्तेमाल करके प्लैटफ़ॉर्म के साथ रजिस्टर करना होगा. दूसरा, उसे यह तय करना होगा कि लागू करने के लिए कौनसी आईएमएस सुविधाएं काम करती हैं (MmTel या आरसीएस); और तीसरा, मोबाइल और इंटरनेट सेवा देने वाली कंपनी के कॉन्फ़िगरेशन या डिवाइस ओवरले में इसकी पुष्टि भरोसेमंद आईएमएस के तौर पर की जानी चाहिए.

सेवा की परिभाषा

IMS ऐप्लिकेशन, नीचे दिए गए फ़ॉर्मैट का इस्तेमाल करके मेनिफ़ेस्ट में service एंट्री जोड़कर, ImsService को फ़्रेमवर्क के साथ रजिस्टर करता है:

<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>

AndroidManifest.xml में service की परिभाषा, इन एट्रिब्यूट के बारे में बताती है, जो सही तरीके से काम करने के लिए ज़रूरी हैं:

  • directBootAware="true": इससे उपयोगकर्ता के डिवाइस को अनलॉक करने से पहले, telephony को सेवा को खोजने और चलाने की अनुमति मिलती है. उपयोगकर्ता के डिवाइस को अनलॉक करने से पहले, यह सेवा डिवाइस में एन्क्रिप्ट (सुरक्षित) किया गया स्टोरेज ऐक्सेस नहीं कर सकती. ज़्यादा जानकारी के लिए, डायरेक्ट बूट मोड के साथ काम करना और फ़ाइल-आधारित एन्क्रिप्शन लेख पढ़ें.
  • persistent="true": इस सेवा को लगातार चलाने की अनुमति देता है. साथ ही, मेमोरी वापस पाने के लिए, सिस्टम इसे बंद नहीं करता. यह एट्रिब्यूट सिर्फ़ तब काम करता है, जब ऐप्लिकेशन को सिस्टम ऐप्लिकेशन के तौर पर बनाया गया हो.
  • permission="android.permission.BIND_IMS_SERVICE": यह पक्का करता है कि ऐप्लिकेशन से सिर्फ़ वही प्रोसेस जुड़ सकती है जिसे BIND_IMS_SERVICE अनुमति मिली हो. इससे किसी भी गलत ऐप्लिकेशन को सेवा से जुड़ने से रोका जा सकता है, क्योंकि फ़्रेमवर्क से सिर्फ़ सिस्टम ऐप्लिकेशन को अनुमति दी जा सकती है.

सेवा को कार्रवाई के साथ intent-filter एलिमेंट की जानकारी भी देनी होगी android.telephony.ims.ImsService. इससे फ़्रेमवर्क को ImsService ढूंढने में मदद मिलती है.

आईएमएस की सुविधा के बारे में जानकारी

AndroidManifest.xml में ImsService को Android सेवा के तौर पर तय करने के बाद, ImsService को यह तय करना होगा कि वह IMS की किन सुविधाओं के साथ काम करती है. फ़िलहाल, Android पर MmTel और आरसीएस की सुविधाएं काम करती हैं. हालांकि, इस फ़्रेमवर्क में सिर्फ़ MmTel को शामिल किया गया है. हालांकि, इस फ़्रेमवर्क में कोई भी आरसीएस एपीआई इंटिग्रेट नहीं किया गया है, तो भी इसे ImsService की सुविधा के तौर पर एलान करने के अपने फ़ायदे हैं.

android.telephony.ims.ImsFeature में बताई गई मान्य सुविधाएं यहां दी गई हैं. ये सुविधाएं, ImsService उपलब्ध करा सकती है. साथ ही, यह भी बताया गया है कि IMS ऐप्लिकेशन में इनमें से एक या सभी सुविधाओं को लागू करने की ज़रूरत क्यों है. हर सुविधा के बारे में बताने के बाद, इस पेज पर बताया गया है कि ImsService, हर सिम स्लॉट के लिए सुविधाओं के सेट की जानकारी कैसे देता है.

FEATURE_MMTEL

ImsService, IMS MMTEL सुविधा को लागू करता है. इसमें आपातकालीन कॉल के लिए, IMS पीडीएन से कनेक्ट करने के अलावा, सभी IMS मीडिया (IR.92 और IR.94 स्पेसिफ़िकेशन) के लिए सहायता शामिल है. ImsService का ऐसा कोई भी वर्शन जिसे MMTEL की सुविधाओं के साथ काम करना है उसे android.telephony.ims.MmTelFeature बेस क्लास को एक्सटेंड करना चाहिए. साथ ही, ImsService#createMmTelFeature में कस्टम MmTelFeature वर्शन को लागू करना चाहिए.

FEATURE_EMERGENCY_MMTEL

इस सुविधा का एलान करने से, प्लैटफ़ॉर्म को सिर्फ़ यह सिग्नल मिलता है कि आपातकालीन सेवाओं के लिए, IMS पीडीएन से आपातकालीन अटैचमेंट किया जा सकता है. अगर आपके ImsService के लिए यह सुविधा नहीं बताई गई है, तो आपके प्लैटफ़ॉर्म पर आपातकालीन सेवाओं के लिए, डिफ़ॉल्ट रूप से सर्किट स्विच फ़ॉलबैक का इस्तेमाल किया जाएगा. इस सुविधा को तय करने के लिए, FEATURE_MMTEL सुविधा को तय करना ज़रूरी है.

FEATURE_RCS

ImsService API, IMS आरसीएस की किसी भी सुविधा को लागू नहीं करता है. हालांकि, android.telephony.ims.RcsFeature बेस क्लास अब भी काम की हो सकती है. फ़्रेमवर्क, ImsService से अपने-आप जुड़ जाता है और जब यह पता चलता है कि पैकेज में आरसीएस की सुविधा होनी चाहिए, तब ImsService#createRcsFeature को कॉल करता है. अगर आरसीएस सेवा से जुड़ा सिम कार्ड हटाया जाता है, तो फ़्रेमवर्क अपने-आप RcsFeature#onFeatureRemoved को कॉल करता है. इसके बाद, आरसीएस सुविधा से जुड़े ImsService को हटा देता है. यह सुविधा, पसंद के मुताबिक डिटेक्शन या बाइंडिंग लॉजिक को हटा सकती है, जो आरसीएस की सुविधा नहीं देती.

इस्तेमाल की जा सकने वाली सुविधाओं का रजिस्ट्रेशन

सबसे पहले, टेलीफ़ोन फ़्रेमवर्क, ImsService#querySupportedImsFeatures एपीआई का इस्तेमाल करके, उन सुविधाओं के बारे में क्वेरी करने के लिए ImsService से बंधता है जिन पर यह काम करता है. फ़्रेमवर्क यह तय कर लेने के बाद कि ImsService किन सुविधाओं के साथ काम करेगा, यह हर उस सुविधा के लिए ImsService#create[...]Feature को कॉल करेगा जिसकी ज़िम्मेदारी ImsService की होगी. अगर IMS ऐप्लिकेशन की सुविधाओं में बदलाव किए जा सकते हैं, तो ImsService#onUpdateSupportedImsFeatures का इस्तेमाल करके फ़्रेमवर्क को सिग्नल के ज़रिए उस सुविधा का फिर से आकलन किया जा सकता है. ImsService को शुरू करने और उससे बाइंड करने के बारे में ज़्यादा जानकारी के लिए, यहां दिया गया डायग्राम देखें.

ImsService को शुरू करना और बांधना

दूसरी इमेज: ImsService को शुरू करना और बांधना

फ़्रेमवर्क का पता लगाना और ImsService लागू करने की पुष्टि करना

AndroidManifest.xml में ImsService को सही तरीके से तय करने के बाद, प्लैटफ़ॉर्म को ज़रूरत पड़ने पर, ImsService से सुरक्षित तरीके से बंधने के लिए कॉन्फ़िगर किया जाना चाहिए. फ़्रेमवर्क, दो तरह की ImsServices से जुड़ा होता है:

  1. मोबाइल और इंटरनेट सेवा देने वाली कंपनी, ImsService को "ओवरराइड" करती है: ये ImsServices डिवाइस में पहले से लोड होती हैं, लेकिन ये एक या उससे ज़्यादा मोबाइल और इंटरनेट सेवा देने वाली कंपनियों से जुड़ी होती हैं. ये सिर्फ़ तब बाउंड होंगी, जब डिवाइस में मैच करने वाला सिम कार्ड डाला जाएगा. इसे
  2. डिवाइस "डिफ़ॉल्ट" ImsService: यह ऐसा डिफ़ॉल्ट ImsService है, जो किसी OEM के ज़रिए डिवाइस पर लोड किया जाता है. इसे ऐसी सभी स्थितियों में IMS सेवाएं देने के लिए डिज़ाइन किया जाना चाहिए, जब मोबाइल और इंटरनेट सेवा देने वाली कंपनी ImsService उपलब्ध न हो. साथ ही, डाले गए सिम कार्ड में कोई सिम कार्ड नहीं डाला गया हो या डिवाइस में कोई सिम कार्ड इंस्टॉल न हो, तो यह उपयोगी है. इसे डिवाइस ओवरले में, इन कॉन्फ़िगरेशन का इस्तेमाल करके तय किया जाता है:

Android, तीसरे पक्ष के डाउनलोड किए जा सकने वाले ImsService के लागू होने वाले ऐप्लिकेशन के साथ काम नहीं करता. इसलिए, यहां बताए गए किसी भी ImsService के लागू होने वाले ऐप्लिकेशन को सिस्टम ऐप्लिकेशन होना चाहिए. साथ ही, ज़रूरी अनुमतियां देने के लिए, उन्हें /system/priv-app/ या /product/priv-app/ फ़ोल्डर में होना चाहिए. इन अनुमतियों में फ़ोन, माइक्रोफ़ोन, जगह की जानकारी, कैमरा, और संपर्कों की अनुमतियां शामिल हैं. यह पुष्टि करके कि IMS लागू करने के लिए इस्तेमाल किए गए पैकेज का नाम, ऊपर बताई गई CarrierConfig या डिवाइस ओवरले वैल्यू से मैच करता है या नहीं, सिर्फ़ भरोसेमंद और पहले से इंस्टॉल किए गए ऐप्लिकेशन को ही बाउंड किया जाता है.

पसंद के मुताबिक बनाएं

ImsService को लागू करने वाले ऐप्लिकेशन सिर्फ़ उन डिवाइसों पर लागू होते हैं जहां उन्हें ImsService कंपनी के "ओवरराइड" या डिवाइस "डिफ़ॉल्ट" ImsService कॉन्फ़िगरेशन के तौर पर कॉन्फ़िगर किया गया है. MMTEL या आरसीएस फ़ंक्शन के लिए, ImsService कॉन्फ़िगरेशन. ImsService, आईएमएस की उन सुविधाओं (MMTEL और आरसीएस) को डाइनैमिक तौर पर चालू या बंद करने की अनुमति देता है जो इसके साथ काम करती हैं. इसके लिए, यह ImsService#onUpdateSupportedImsFeatures तरीके का इस्तेमाल करके अपडेट का इस्तेमाल करती है. इससे फ़्रेमवर्क को फिर से यह हिसाब लगाने के लिए ट्रिगर किया जाता है कि कौनसी ImsServices बाउंड हैं और वे किन सुविधाओं के साथ काम करती हैं. अगर IMS ऐप्लिकेशन, फ़्रेमवर्क को ऐसी सुविधाओं के साथ अपडेट करता है जो काम नहीं करती हैं, तो ImsService तब तक अनबाउंड रहेगी, जब तक फ़ोन को रीबूट नहीं किया जाता या IMS ऐप्लिकेशन से मैच करने वाला नया सिम कार्ड नहीं डाला जाता.

एक से ज़्यादा ImsService के लिए बाइंडिंग की प्राथमिकता

फ़्रेमवर्क, डिवाइस में पहले से लोड की गई सभी संभावित ImsServices से बंधने की सुविधा नहीं देता. यह हर सुविधा के हिसाब से, हर सिम स्लॉट में दो ImsServices (हर सुविधा के लिए एक ImsService) से बंधेगा. यह क्रम इस तरह होगा:

  1. सिम कार्ड डालने पर, CarrierConfig की वैल्यू config_ims_[mmtel/rcs]_package_override_string से तय किया गया ImsService पैकेज का नाम.
  2. config_ims_[mmtel/rcs]_package के लिए, डिवाइस ओवरले वैल्यू में तय किया गया ImsService पैकेज का नाम. इसमें वह स्थिति भी शामिल है जब कोई सिम कार्ड नहीं डाला गया है. यह ज़रूरी है कि ImsService, आपातकालीन MmTel सुविधा के साथ काम करे.

आपको अपनी ImsService के पैकेज का नाम, CarrierConfig में तय करना होगा. यह नाम, उस पैकेज का इस्तेमाल करने वाली हर मोबाइल और इंटरनेट सेवा देने वाली कंपनी के लिए तय करना होगा. इसके अलावा, अगर आपकी ImsService डिफ़ॉल्ट है, तो नाम को डिवाइस ओवरले में तय करना होगा.

आइए, हर सुविधा के बारे में अलग-अलग जानते हैं. एक सिम कार्ड वाले डिवाइस (एक या कई सिम) के लिए, IMS की दो सुविधाएं उपलब्ध हैं: MMTel और आरसीएस. फ़्रेमवर्क हर सुविधा के लिए ऊपर बताए गए क्रम में बाइंड करने की कोशिश करेगा. अगर यह सुविधा, कैरियर के कॉन्फ़िगरेशन ओवरराइड में तय किए गए ImsService के लिए उपलब्ध नहीं है, तो फ़्रेमवर्क आपके डिफ़ॉल्ट ImsService पर फ़ॉलबैक होगा. उदाहरण के लिए, नीचे दी गई टेबल में बताया गया है कि फ़्रेमवर्क किस आईएमएस सुविधा का इस्तेमाल करेगा. यह फ़्रेमवर्क, सिस्टम पर इंस्टॉल किए गए तीन IMS ऐप्लिकेशन को लागू करता है. इन ऐप्लिकेशन में नीचे दी गई सुविधाएं शामिल हैं:

  • मोबाइल और इंटरनेट सेवा देने वाली कंपनी A की ImsService, आरसीएस के साथ काम करती है
  • Carrier B ImsService, आरसीएस और MMTel के साथ काम करती है
  • OEM ImsService, आरसीएस और MMTel के साथ काम करता है
सिम कार्ड डाला गया आरसीएस की सुविधा MMTel की सुविधा
मोबाइल और इंटरनेट सेवा देने वाली कंपनी A मोबाइल और इंटरनेट सेवा देने वाली कंपनी A OEM
मोबाइल और इंटरनेट सेवा देने वाली कंपनी B कैरियर B मोबाइल और इंटरनेट सेवा देने वाली कंपनी B
कोई सिम कार्ड नहीं लगाया गया है OEM OEM

पुष्टि करें

IMS के लागू होने की पुष्टि करने वाले टूल शामिल नहीं किए गए हैं, क्योंकि IMS की जानकारी काफ़ी ज़्यादा है और पुष्टि करने के लिए खास उपकरणों का इस्तेमाल किया जाता है. इन जांचों से सिर्फ़ यह पुष्टि की जा सकती है कि टेलीफ़ोनी फ़्रेमवर्क, ImsService API के लिए सही तरीके से जवाब देता है या नहीं.

IMS ऐप्लिकेशन डेवलप करना

Android टेलीफ़ोनी स्टैक के साथ इंटरफ़ेस करने वाले IMS ऐप्लिकेशन को डेवलप करते समय, हमारा सुझाव है कि आप यह बताएं कि ऐप्लिकेशन किसी खास कैरियर की सदस्यता के लिए अटैच किए गए ImsService इंस्टेंस की स्थिति को सुन सकता है या उसमें बदलाव कर सकता है.

MMTEL और आरसीएस सुविधाओं के लिए ImsService की स्थिति के बारे में जानकारी पाने या उसमें बदलाव करने के लिए, ImsManager क्लास का इस्तेमाल करें. इससे आपको ImsMmTelManager, ImsRcsManager या IMS से जुड़ी ProvisioningManager क्लास का इंस्टेंस मिलेगा. इसके बाद, ऐप्लिकेशन, आईएमएस की खास सेवा और प्रावधान करने से जुड़ी इन स्थितियों को सुन सकता है, जैसे कि:

  • चालू और उपलब्ध MMTEL या आरसीएस की सुविधाएं
  • IMS रजिस्ट्रेशन की स्थिति में बदलाव होने पर अपडेट होता है
  • IMS सुविधाओं के प्रोवाइज़न की स्थिति
  • IMS की वे सुविधाएं जिन्हें उपयोगकर्ता ने चालू किया है

ImsStateCallback का इस्तेमाल करें

ImsService, लगातार बाउंड रहने वाली सेवा है. हालांकि, नया सिम कार्ड या एम्बेड की गई सदस्यता चालू होने पर या मोबाइल और इंटरनेट सेवा देने वाली कंपनी के कॉन्फ़िगरेशन में बदलाव होने पर, बाउंड की गई सेवा बदल सकती है. ImsService, टेलीफ़ोन सेवा की प्रोसेस का हिस्सा नहीं है. इसलिए, अगर सदस्यता या कॉन्फ़िगरेशन में बदलाव की वजह से, ImsService अचानक क्रैश हो जाती है या अनबाउंड हो जाती है, तो IMS API को ऐक्सेस करने के दौरान ऐप्लिकेशन को अनचाहे अपवाद दिख सकते हैं.

Android 13 या उसके बाद के वर्शन वाले डिवाइसों पर, यह मॉनिटर करने के लिए कि उससे जुड़ी सदस्यता के लिए ImsService इंस्टेंस उपलब्ध है या उपलब्ध नहीं है, ऐप्लिकेशन ImsStateCallback क्लास का इस्तेमाल कर सकता है. ImsMmTelManager या ImsRcsManager का इंस्टेंस मिलने पर, हमारा सुझाव है कि ऐप्लिकेशन पहले ImsMmTelManager#registerImsStateCallback या ImsRcsManager#registerImsStateCallback का इस्तेमाल करके, IMS स्टेटस कॉलबैक के लिए रजिस्टर करे. ImsService के फिर से उपलब्ध होने पर, कुछ सदस्यताओं के लिए कॉलबैक अपडेट पाने के लिए, ऐप्लिकेशन को ImsMmTelManager, ImsRcsManager या ProvisioningManager के ज़रिए रजिस्टर किए गए मौजूदा कॉलबैक को रजिस्ट्रेशन से हटाना होगा या उन्हें खारिज करना होगा. साथ ही, नए कॉलबैक रजिस्टर करने होंगे.

अगर कोई ऐसी सदस्यता है जो आईएमएस के साथ काम नहीं करती, तो फ़्रेमवर्क ImsStateCallback#onUnavailable को REASON_NO_IMS_SERVICE_CONFIGURED वजह के साथ कॉल करता है. इसका मतलब है कि सदस्यता के लिए, ImsService और IMS से जुड़े एपीआई उपलब्ध नहीं हैं.

अगर टेलीफ़ोनी प्रोसेस बंद हो जाती है, तो इस स्थिति में ऐप्लिकेशन को ImsStateCallback#onError मिलता है और रजिस्टर किए गए ImsStateCallback इंस्टेंस के लिए, अब कोई अपडेट नहीं मिलता. इस स्थिति से उबरने के लिए, ImsMmTelManager#registerImsStateCallback या ImsRcsManager#registerImsStateCallback को कॉल करके, इससे जुड़ी सदस्यता के लिए ImsStateCallback इंस्टेंस फिर से रजिस्टर करें.