תמיכה באפליקציות צד שלישי לשיחות

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

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

ב-Android 9, מומלץ לאפליקציות של צד שלישי לביצוע שיחות להטמיע את המחלקה ConnectionService שמנוהלת באופן עצמאי. מידע נוסף על בניית אפליקציית שיחות באמצעות המחלקה הזו זמין במאמר בניית אפליקציית שיחות באמצעות ספריית Core-Telecom.

בנוסף, מחלקת ConnectionService בניהול עצמי מאפשרת למפתחים להביע הסכמה לרישום שיחות באפליקציה שלהם ביומן השיחות של המערכת (ראו EXTRA_LOG_SELF_MANAGED_CALLS). בהתאם לדרישות במסמך הגדרת התאימות (CDD) של Android (סעיף 7.4.1.2), עליכם לוודא שאפליקציית החייגן או הטלפון שלכם מציגה את הרשומות האלה ביומן השיחות ומציגה את השם של אפליקציית השיחות של הצד השלישי שממנה בוצעה השיחה (דוגמה לאופן שבו אפליקציית החייגן של AOSP עומדת בדרישה הזו מופיעה במאמר רשומות ביומן השיחות מאפליקציות שיחות של צד שלישי).

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

תרחישים

צריך לשנות את אפליקציית החייגן כדי לטפל בתרחישים הבאים.

איך מטפלים בשיחות נכנסות שמנתקות שיחות פעילות

בתרחיש שבו מתבצעת שיחה עם צד שלישי (למשל, שיחה ב-SuperCaller) שלא תומכת בהחזקת שיחה, והמשתמש מקבל שיחה ברשת הסלולרית (למשל, באמצעות הספק FooCom), אפליקציית חייגן או אפליקציית הטלפון צריכות לציין למשתמש שמענה לשיחה ברשת הסלולרית יסיים את השיחה עם הצד השלישי.

חוויית המשתמש הזו חשובה כי יכול להיות שבאפליקציית שיחות של צד שלישי תתבצע שיחה שלא ניתן להעביר להמתנה באמצעות המסגרת. מענה לשיחה חדשה בנייד יגרום לניתוק השיחה הפעילה עם צד שלישי.

דוגמה בממשק המשתמש מוצגת באיור:

שיחה נכנסת מנתקת שיחה פעילה עם צד שלישי

איור 1. שיחה נכנסת מנתקת שיחה פעילה עם צד שלישי.

אפליקציית החייגן יכולה לבדוק אם שיחה נכנסת גורמת לניתוק של שיחה אחרת באמצעות בדיקה של פרטי השיחה. מוודאים שההגדרה EXTRA_ANSWERING_DROPS_FG_CALL מוגדרת לערך TRUE, ושההגדרה EXTRA_ANSWERING_DROPS_FG_CALL_APP_NAME מוגדרת לשם האפליקציה שהשיחה שלה מתנתקת כשעונים לשיחה הנכנסת בנייד.

רשומות ביומן השיחות מאפליקציות של צד שלישי לביצוע שיחות

מפתחים של אפליקציות לשיחות של צד שלישי יכולים להפעיל את האפשרות לרישום שיחות באפליקציה שלהם ביומן השיחות של המערכת (ראו EXTRA_LOG_SELF_MANAGED_CALLS). המשמעות היא שיומן השיחות יכול לכלול רשומות של שיחות שלא בוצעו ברשת הסלולרית.

כשאפליקציית החייגן של AOSP מציגה רשומות ביומן השיחות שקשורות לאפליקציית שיחות של צד שלישי, השם של האפליקציה שבה התבצעה השיחה מוצג ביומן השיחות, כמו שמוצג באיור:

רשומה ביומן השיחות עם אפליקציית שיחות של צד שלישי

איור 2. רשומה ביומן השיחות עם שם אפליקציית השיחות של צד שלישי באפליקציית החייגן.

כדי לקבוע את שם האפליקציה שמשויכת לרשומה ביומן השיחות, משתמשים בעמודות PHONE_ACCOUNT_COMPONENT_NAME ו-PHONE_ACCOUNT_ID בספק יומן השיחות כדי ליצור מופע של PhoneAccountHandle, שמזהה את המקור של רשומה ביומן השיחות. מריצים את השאילתה TelecomManager כדי לקבל את הפרטים של הכיתה PhoneAccount. כדי לבדוק אם רשומה ביומן השיחות היא מאפליקציית שיחות של צד שלישי, בודקים את היכולות של PhoneAccount כדי לראות אם מוגדר CAPABILITY_SELF_MANAGED.

השיטה getLabel של PhoneAccount שמוחזרת מחזירה את שם האפליקציה שמשויכת לרשומה ביומן השיחות מאפליקציית השיחות של צד שלישי.

אמצעי בקרה לשילוב יומן השיחות ב-VoIP

החל מ-Android 17 (רמת API‏ 37), אפליקציות של צד שלישי לביצוע שיחות VoIP שמשולבות עם Core-Telecom ו-CallsManager יכולות לכתוב את היסטוריית השיחות שלהן ישירות ליומן השיחות המקורי של מערכת Android (CallLog.Calls).

כדי להבטיח פרטיות המשתמשים עקבית ותקינות הנתונים בכל המערכת האקולוגית של Android, כל המכשירים עם Android 17 (רמת API‏ 37) ומעלה שמצהירים על feature flag של טלקום (android.software.telecom) ושיש להם את התפקיד android.app.role.DIALER, חייבים לתמוך באמצעי בקרה לשילוב של יומני שיחות ב-VoIP לכל אפליקציה בהתאם למסמך הגדרת התאימות (CDD) של Android.

דרישות להטמעה במכשיר

המכשירים צריכים לספק מסך הגדרות שנגיש למשתמשים (בדרך כלל הוא נמצא בהגדרות > חשבונות לביצוע שיחות > יומני שיחות משולבים), שמאפשר למשתמשים לראות את השילוב של יומני השיחות באפליקציות VoIP של צד שלישי ולשנות את ההגדרה שלו.

כדי לעמוד בדרישה הזו, צריך לשלב את ברירת המחדל של פלטפורמת המלאי:

  • שילוב של הגדרות הפלטפורמה: מוודאים שהמכשיר כולל את com.android.phone.settings.PhoneAccountSettingsActivity שסופק על ידי פלטפורמת Android כחלק מהמכשיר (com.android.phone).
  • דרישה לפתרון כוונות: המכשיר צריך לפתור את הכוונה TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION (android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) למסך ניהול הפלטפורמה המובנה.

כשמפעילים את הפעולות הבאות באמצעות אפליקציה, הנחיה של המערכת או קישור עומק, צריך להפעיל את הכוונה PhoneAccountSettingsActivity בהצלחה, ולא להציג את השגיאה ActivityNotFoundException:

Intent intent = new Intent(TelecomManager.ACTION_CONFIGURE_CALL_LOG_INTEGRATION);
context.startActivity(intent);

אימות

כדי לבדוק אם המכשיר תומך באפליקציות צד שלישי לביצוע שיחות, אפשר להשתמש באפליקציית הבדיקה Telecomm, שמטמיעה את המחלקה ConnectionService בניהול עצמי. האפליקציה נמצאת ב/packages/services/Telecomm/testapps/.

  1. כדי ליצור את אפליקציית הבדיקה מהשורש של מאגר קוד המקור של Android, משתמשים בפקודה:

    mmma packages/services/Telecomm/testapps/

  2. מתקינים את קובץ ה-APK של הגרסה באמצעות adb install -g -r <apk path>. סמל של דוגמה בניהול עצמי יתווסף למרכז האפליקציות.

  3. מקישים על הסמל כדי לפתוח את אפליקציית הבדיקה.

איך מטפלים בשיחות נכנסות שמנתקות שיחות פעילות

כדי לוודא ששיחה נכנסת מנתקת שיחה פעילה עם צד שלישי, פועלים לפי השלבים הבאים.

אפליקציית בדיקה לאפליקציות של צד שלישי לביצוע שיחות

איור 3. אפליקציית בדיקה עם הטמעות לדוגמה של המחלקה ConnectionService class.

  1. מבטלים את הסימון של האפשרות Holdable (ניתן להשהיה).
  2. מקישים על יוצאת כדי להתחיל שיחה יוצאת לדוגמה.
  3. מקישים על הכפתור פעיל כדי שהשיחה תהיה פעילה.
  4. מתקשרים למספר הטלפון של המכשיר שנבדק באמצעות טלפון אחר. הפעולה הזו תפעיל את התרחיש שבו החייגן מקבל את שם האפליקציה, והשיחה אליה תנותק.
  5. כשמסיימים, מקישים על הלחצן התנתקות באפליקציית הבדיקה.

רשומות ביומן השיחות מאפליקציות של צד שלישי לביצוע שיחות

אחרי שמבצעים את השלבים שלמעלה, אמורה להופיע ביומן השיחות של המערכת שיחה לאפליקציית הבדיקה. כדי לוודא שהמכשיר מתעד שיחות מאפליקציות שיחות של צד שלישי, פותחים את אפליקציית החייגן ומוודאים שהשיחה מופיעה ביומן השיחות של המערכת.

אמצעי בקרה לשילוב יומן השיחות ב-VoIP

כדי לוודא שהאפליקציה עומדת בדרישה לשילוב של יומן שיחות VoIP ב-Android מגרסה 17 ואילך, מריצים את הבדיקה CtsTelecomTestCases Compatibility Test Suite (CTS)‎. בבדיקה הזו מוודאים ששליחת TelecomManager#ACTION_CONFIGURE_CALL_LOG_INTEGRATION (android.telecom.action.CONFIGURE_CALL_LOG_INTEGRATION) מחוץ לגבולות החבילה מניבה במכשיר מטפל פעילות תקין שיוצא (בדיקת resolveActivity).