יישום IMS

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

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

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

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

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

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

אתה יכול למצוא את התיעוד של ImsService API ב- ImsService ובשאר המחלקות ב-API.

יישום

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

תאימות עם יישומי IMS ישנים יותר

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

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

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

רישום ImsService עם המסגרת

ה-API של ImsService מיושם כשירות, שמסגרת האנדרואיד מתחברת אליו כדי לתקשר עם הטמעת 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 הוגדר כשירות אנדרואיד ב-AndroidManifest.xml, על ImsService להגדיר באילו תכונות IMS הוא תומך. אנדרואיד תומך כרגע בתכונות MmTel ו-RCS, אולם רק MmTel משולבת במסגרת. למרות שאין ממשקי 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 שלך, הפלטפורמה תמיד תקבע כברירת מחדל ל-Circuit Switch Fallback עבור שירותי חירום. יש להגדיר את התכונה FEATURE_MMTEL כדי שתכונה זו תוגדר.

FEATURE_RCS

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

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

מסגרת הטלפוניה נקשרת תחילה ל-ImsService כדי לבצע שאילתות על התכונות שבהן היא תומכת באמצעות ImsService#querySupportedImsFeatures API. לאחר שהמסגרת תחשב באילו תכונות ה-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 שנטען על המכשיר על ידי OEM ואמור להיות מתוכנן לספק שירותי IMS בכל המצבים שבהם הספק ImsService אינו זמין והוא שימושי במצבים שבהם למכשיר אין כרטיס SIM הוכנס או שלכרטיס ה-SIM שהוכנס לא מותקן איתו ספק ImsService. זה מוגדר בשכבת העל של המכשיר באמצעות התצורות הבאות:

אנדרואיד אינה תומכת באפליקציות עם יישומי 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
  • Carrier B ImsService תומך ב-RCS ו-MMTel
  • OEM ImsService תומך ב-RCS ו-MMTel
כרטיס SIM הוכנס תכונת RCS תכונת MMTel
מוביל א מוביל א OEM
מוביל ב מוביל ב מוביל ב
אין סים OEM OEM

מַתַן תוֹקֵף

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

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

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

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

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

השתמש ב-ImsStateCallback

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

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

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

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