הטמעת IMS

מערכת Android 9 כוללת ממשק SystemApi חדש בשם ImsService כדי לעזור לך להטמיע מערכת משנה מולטימדיה (IMS) של IP. ImsService API הוא בין פלטפורמת Android לבין ספק, הטמעת IMS שסופקה על ידי הספק.

סקירה כללית של ImsService

איור 1. סקירה כללית של ImsService

באמצעות ממשק ImsService, מטמיע ה-IMS יכול לספק אותות מידע לפלטפורמה, כמו פרטי הרשמה ל-IMS, הודעות SMS בשילוב של IMS ושילוב תכונות MmTel כדי לספק קול ווידאו בשיחת טלפון. גם ה-imsService API הוא ממשק Android System API, כלומר הוא יכול להיות שמבוסס על ה-SDK של Android ישירות ולא על המקור. IMS שהותקנה מראש במכשיר אפשר גם להגדיר אותה להיות מעודכנים בחנות Play.

דוגמאות ומקור

מערכת Android מספקת אפליקציה ב-AOSP שמטמיעה חלקים ממשק API של ImsService למטרות בדיקה ופיתוח. אפשר למצוא אפליקציה ב- /testapps/ImsTestService.

המסמכים של ImsService API זמינים בכתובת ImsService ובמחלקות האחרות ב-API.

הטמעה

ImsService API הוא API ברמה גבוהה שמאפשר להטמיע IMS בדרכים רבות, בהתאם לחומרה הזמינה. לדוגמה, ההטמעה משתנה בהתאם להטמעה מלאה של ה-IMS באפליקציה או אם הוא עומס חלקי או מלא במודם. ב-Android לא מספק HAL ציבורי לצורך העברה למעבד פס הבסיס, כך שכל הסרת הנתונים צריכה להתבצע באמצעות תוסף ה-HAL למודם.

תאימות להטמעות IMS ישנות יותר

Android 9 כולל את ImsService API, מכשירים שבהם נעשה שימוש בהטמעה ישנה יותר של IMS לא יכולים לתמוך ב-API. במכשירים האלה, ממשקי AIDL ומחלקות wrapper הישנים הועברו למרחב השמות android.telephony.ims.compat. כשמשדרגים ל-Android 9, מכשירים ישנים יותר צריכים לבצע את הפעולות הבאות כדי להמשיך את התמיכה של ה-API הישן יותר.

  • משנים את מרחב השמות של הטמעת ImsService כך: android.telephony.ims.compat API של מרחב השמות.
  • יש לשנות את הגדרת שירות ImsService בקובץ AndroidManifest.xml כדי להשתמש פעולת סינון לפי Intent אחת (android.telephony.ims.compat.ImsService), במקום את הפעולה android.telephony.ims.ImsService.

לאחר מכן, ה-framework יהיה מקושר ל-IMsService באמצעות שכבת התאימות שסופקו ב-Android 9 כדי לעבוד עם הגרסה הקודמת הטמעת ImsService.

רישום ImsService ב-framework

ImsService API מוטמע כשירות, שמסגרת Android מקושר אל כדי לתקשר עם הטמעת ה-IMS. שלושה שלבים לצורך רישום אפליקציה שבה מיושמת ImsService באמצעות . ראשית, הטמעת ImsService חייבת לרשום את עצמה באמצעות פלטפורמה שמשתמשת בAndroidManifest.xml של האפליקציה; שני, הוא צריך להגדיר אילו תכונות IMS נתמכות בהטמעה (MmTel או RCS). והשלישי, צריך לאמת אותו בתור הטמעת ה-IMS המהימנה אצל הספק הגדרה אישית או שכבת-על של מכשיר.

הגדרת השירות

אפליקציית IMS רושמת ImsService באמצעות ה-framework על-ידי הוספת הערך 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. כך ל-framework למצוא ImsService

מפרט תכונות IMS

לאחר הגדרת ImsService כשירות Android ב- AndroidManifest.xml, חובה להגדיר את תכונות ה-IMS שבהן הוא תומך ב-IMsService. נכון לעכשיו, מערכת Android תומכת בתכונות MmTel ו-RCS, אבל רק MmTel משולבות ב-framework. למרות שאין ממשקי API של 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

ממשק ה-API של ImsService לא מיישם תכונות RCS של IMS, אלא מחלקה בסיסית אחת (android.telephony.ims.RcsFeature) עדיין יכולה להיות שימושית. המסגרת קישור אוטומטי לשירות ה-IMSService וקריאות ImsService#createRcsFeature כשהוא מזהה שהחבילה צריכה לספק RCS. אם כרטיס ה-SIM המשויך עם הסרת שירות ה-RCS, ה-framework מתקשר אוטומטית RcsFeature#onFeatureRemoved ולאחר מכן ניקוי ImsService המשויכים באמצעות תכונת ה-RCS. הפונקציונליות הזו יכולה להסיר חלק או לוגיקה מחייבת שתכונת RCS הייתה צריכה לספק.

רישום של תכונות נתמכות

מסגרת הטלפוניה מקשרת תחילה ל-IMsService כדי לשלוח שאילתות לגבי התכונות שהוא תומך בשימוש ב-API ImsService#querySupportedImsFeatures. אחרי שמחשבת באילו תכונות ה-IMsService יתמוך, היא תקרא ImsService#create[...]Feature לכל תכונה ש-imsService יהיה באחריותכם. אם התכונות שאפליקציית IMS תומכת בהן ישתנו, יכול להשתמש בפונקציה ImsService#onUpdateSupportedImsFeatures כדי לסמן ל-framework כדי לחשב מחדש את התכונות הנתמכות. מידע נוסף זמין בתרשים הבא לגבי האתחול והקישור של ה-IMsService.

אתחול וקישור של ImsService

איור 2: אתחול וקישור של ImsService

זיהוי ואימות של Framework של הטמעת ImsService

לאחר שה-imsService הוגדר בצורה נכונה בקובץ AndroidManifest.xml, יש להגדיר את הפלטפורמה כך שתקשר (באופן מאובטח) ל-IMsService כאשר המתאים. יש שני סוגים של ImsServices שה-framework מקושר אליהם:

  1. 'ביטול' של הספק ImsService: ה-IMsServices נטענים מראש אבל הם מחוברים לספק סלולרי אחד או יותר, מחויב כאשר מכניסים כרטיס SIM תואם. הוא מוגדר באמצעות
  2. מכשיר 'ברירת מחדל' ImsService: זהו שירות ה-IMsService שמוגדר כברירת המחדל שנטען במכשיר על ידי ה-OEM (יצרן ציוד מקורי), וצריך להיות מתוכנן לספק שירותי IMS בכל המצבים שבהם חברת ImsService של חברת התובלה אינה זמינה והיא שימושית במקרים מצבים שבהם לא הוכנס למכשיר כרטיס SIM או שכרטיס ה-SIM לא הוכנס לא מותקן בו שירות ImsService של ספק. הדבר מוגדר בשכבת-העל של המכשיר באמצעות התצורות הבאות:

מערכת Android לא תומכת באפליקציות עם ImsService להורדה של צד שלישי ולכן כל הטמעות ImsService שמוגדרות כאן נדרשות להיות אפליקציות מערכת והן חייבות להיות נמצאות ב-/system/priv-app/, או /product/priv-app/ folder כדי להעניק את ההרשאות המתאימות (כלומר טלפון, הרשאות למיקרופון, למיקום, למצלמה ולאנשי הקשר). על ידי אימות שם החבילה של הטמעת ה-IMS תואם ל-CarrierConfig או למכשיר ערכי שכבת-על שהוגדרו למעלה, רק אפליקציות מהימנות שהותקנו מראש עובר.

התאמה אישית

אפליקציות שמטמיעות ImsService כפופות רק למכשירים שבהם הן מוגדרות כ"ביטול" הספק ImsService או 'ברירת המחדל' של המכשיר הגדרות של ImsService לפונקציונליות MMTEL או RCS. שירות ImsService גם מאפשר לתכונות IMS שבהן הוא תומך (MMTEL ו-RCS) מופעלת או מושבתת באופן דינמי באמצעות עדכונים באמצעות אמצעי תשלום אחד (ImsService#onUpdateSupportedImsFeatures). הפעולה הזו מפעילה את ה-framework תחשב מחדש אילו שירותי ImsServices כפופים ואילו תכונות הם תומכים. אם אפליקציית IMS מעדכנת את ה-framework בלי תכונות נתמכות, ה-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 שמוגדר אצל הספק שינוי ההגדרה, ה-framework יחזור לברירת המחדל של ImsService. כך, לדוגמה, הטבלה הבאה מתארת איזו תכונת IMS שעליה מבוסס ה-framework להשתמש בשלוש אפליקציות IMS שמטמיעות מערכת ImsServices שמותקנת במערכת עם התכונות הבאות:

  • ספק הודעות מסוג ImsService תומך ב-RCS
  • ספק B ImsService תומך ב-RCS וב-MMTel
  • OEM (יצרן ציוד מקורי) ImsService תומך ב-RCS וב-MMTel
כרטיס ה-SIM נוסף תכונת RCS תכונת MMTel
ספק א' ספק א' OEM
ספק ב' ספק ב' ספק ב'
אין כרטיס SIM OEM OEM

אימות

כלים לאימות הטמעת ה-IMS עצמה לא נכללים מכיוון שה-IMS המפרטים גדולים במיוחד ומשתמשים בציוד אימות מיוחד. יכולים רק לוודא שמסגרת הטלפוניה מגיבה באופן תקין ממשק API של ImsService.

פיתוח אפליקציית IMS

כשמפתחים אפליקציית IMS שמתממשקת עם סטאק הטלפוניה של Android, מומלץ לציין שהאפליקציה תוכל להאזין למצב של מופע של ImsService שמצורף למינוי של ספק ספציפי.

כדי להאזין למצב ImsService עבור תכונות MMTEL ו-RCS או לשנות את המצב של תכונות אלה, צריך להשתמש ה ImsManager כדי לקבל מופע של ImsMmTelManager, ImsRcsManager, או ספציפי ל-IMS ProvisioningManager בכיתה. לאחר מכן האפליקציה יכולה להאזין למצבי שירות והקצאה ספציפיים ל-IMS כמו:

  • תכונות MMTEL או RCS מופעלות וזמינות
  • עדכונים כשמצב הרישום של IMS משתנה
  • סטטוס ההקצאה של תכונות IMS
  • תכונות IMS שהמשתמש הפעיל

שימוש ב-imsStateCallback

למרות ש-imsService הוא שירות קשור באופן קבוע, החיוב עשוי להשתנות כשכרטיס SIM חדש או מינוי מוטמע הופכים לפעילים או כשהגדרות הספק משתנות. כי ImsService הוא לא חלק תהליך טלפוניה, יכול להיות שיהיו חריגים לא צפויים במהלך הניסיון כדי לגשת לממשקי API של IMS במקרה ש-IMSService קורס באופן בלתי נראה או אינו מחויב עקב שינוי במינוי או בהגדרות אישיות.

במכשירים עם Android מגרסה 13 ואילך, למעקב אם מכונת ImsService של מינוי משויך לא זמינות או לא זמינה, אפליקציה יכולה להשתמש ImsStateCallback בכיתה. כשמקבלים מופע של ImsMmTelManager או ImsRcsManager, אנחנו מומלץ שהאפליקציה תרשום תחילה קריאה חוזרת של מצב IMS באמצעות ImsMmTelManager#registerImsStateCallback או ImsRcsManager#registerImsStateCallback. כדי להמשיך לקבל עדכונים על שיחות חוזרות למינויים ספציפיים כאשר שירות ImsService יהיה זמין שוב. יהיה צורך לבטל את הרישום או למחוק את הרישום הקיים של האפליקציה קריאות חוזרות (callback) שנרשמו דרך ImsMmTelManager, ImsRcsManager, או ProvisioningManager; ולרשום קריאה חוזרת (callbacks) חדשות.

אם יש מינוי שלא תומך ב-IMS, ה-framework קורא ImsStateCallback#onUnavailable עם הסיבה REASON_NO_IMS_SERVICE_CONFIGURED המשמעות היא ש-imsService וממשקי ה-API שקשורים ל-IMS לא זמינים במינוי.

במקרה הלא-סביר שבו תהליך הטלפוניה קורס, האפליקציה מקבלת ImsStateCallback#onError ולא מקבלת יותר עדכונים לגבי המכונה הרשומה של ImsStateCallback. כדי לשחזר את התנאי הזה, צריך לרשום מחדש את המופע של ImsStateCallback עבור את המינוי המשויך באמצעות שיחה ImsMmTelManager#registerImsStateCallback או ImsRcsManager#registerImsStateCallback.