פשוט יותר לבצע אימות באמצעות הכרטיסייה Auth

הכרטיסייה 'אימות' מספקת תהליך אימות מאובטח ופשוט לשימוש באפליקציות ל-Android. כשיוצרים ומפעילים AuthTabIntent, אפשר להפעיל כרטיסייה מותאמת אישית שנועדה לנהל חוויית אימות מקצה לקצה. הכרטיסייה מצומצמת ויש לה יכולות מוגבלות, כדי שהמשתמשים יוכלו להתמקד במשימה שלפניהם. בסיום, הכרטיסייה מחזירה קריאה לאפליקציה עם תוצאה באמצעות https או סכימות מותאמות אישית.

כרטיסייה מותאמת אישית עם כל התכונות
איור 1. כרטיסייה בהתאמה אישית עם כל התכונות.
כרטיסיית אימות שמכילה פונקציונליות מינימלית
איור 2. כרטיסיית אימות עם יכולות מינימליות.

החל מ-Chrome 137, כרטיסיית האימות יכולה להחליף ישירות שילובי אימות קיימים של כרטיסיות מותאמות אישית. למשתמשים שהמכשירים שלהם לא תומכים בכרטיסיית אימות, המערכת עוברת אוטומטית לכרטיסיות בהתאמה אישית. כדי לבצע מיגרציה מ-Custom Tabs ל-Auth Tab, צריך לשנות כמה שורות קוד.

איך זה עובד

באמצעות כרטיסיית האימות, אפליקציית לקוח מפעילה כרטיסייה מותאמת אישית מיוחדת שמציגה חלון דפדפן שבו נטען כתובת URL עם דף האימות הצפוי. אחרי שהתהליך מסתיים, הכרטיסייה Auth מחזירה את תוצאת האימות באמצעות קריאה חוזרת (callback).

אחרי האימות, כשמתבצעת העברה לכתובת ה-URI של ההפניה האוטומטית של הקריאה החוזרת שסופקה קודם, ההפניה האוטומטית נלכדת ומוחזרת לאפליקציית הלקוח באמצעות הקריאה החוזרת. להפניות אוטומטיות שמשתמשות בסכמת https, הדפדפן מאמת שהדומיין של ההפניה האוטומטית ואפליקציית הלקוח נמצאים בבעלות של אותו בעל תוכן דיגיטלי באמצעות Digital Asset Links.

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

למה כדאי להשתמש בכרטיסייה 'אימות'?

לפני שהשקנו את Auth Tab, יכולתם להשתמש בכוונת Custom Tabs רגילה כדי להפעיל תהליכי אימות. עדיף להשתמש בכרטיסיית אימות כי היא מספקת אבטחה משופרת וחוויית שימוש יעילה, וגם מפשטת חלק מהפרטים הפנימיים של האימות מקוד הלקוח. מסיבות אלה, כרטיסיית האימות מספקת חוויה טובה יותר.

אבטחה משופרת

בהטמעה טיפוסית של כרטיסייה בהתאמה אישית, נדרשת כוונה לקבל נתונים מחלון הדפדפן שמטפל באימות. האפשרות הזו דורשת קוד נוסף וחושפת את האפליקציה להפרעות פוטנציאליות בכוונה של המשתמש. בכרטיסייה 'אימות', הנתונים מתקבלים באמצעות קריאה חוזרת (callback), עם העברת נתונים ישירה בין Android API לבין אפליקציית הלקוח.

חוויה משופרת

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

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

הפשטת נתונים

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

הטמעה של כרטיסיית אימות

הכרטיסייה Auth Tab דורשת את ספריית האימות בדפדפן AndroidX. אפשר להוסיף את ספריית הדפדפן של AndroidX בקטע התלויות של קובץ build.gradle של פרויקט. ממשקי ה-API זמינים בגרסת אלפא. מוסיפים את השורות הבאות לקובץ ה-build:

dependencies {
    implementation 'androidx.browser:browser:1.9.0'
}

לפני שמפעילים כרטיסיית אימות, צריך להצהיר על ActivityResultLauncher שמקבלת ActivityResultCaller וגם ActivityResultCallback. הפעולה הזו מתבצעת לפני שיוצרים את הפעילות או את הקטע:

// In your activity

private final ActivityResultLauncher<Intent> mLauncher =
    AuthTabIntent.registerActivityResultLauncher(this, this::handleAuthResult);

private void handleAuthResult(AuthResult result) {
    String message = switch (result.resultCode) {
        case AuthTabIntent.RESULT_OK -> "Received auth result.";
        case AuthTabIntent.RESULT_CANCELED -> "AuthTab canceled.";
        case AuthTabIntent.RESULT_VERIFICATION_FAILED -> "Verification failed.";
        case AuthTabIntent.RESULT_VERIFICATION_TIMED_OUT -> "Verification timed out.";
    }

    if (result.resultCode == AuthTabIntent.RESULT_OK) {
        message += " Uri: " + result.resultUri;
    }

    Toast.makeText(this, message, Toast.LENGTH_LONG).show();  
}

אחר כך משתמשים ב-AuthTabIntent.Builder כדי ליצור AuthTabIntent, ואז קוראים ל-method‏ launch. ה-methods להפעלת האפליקציה מקבלות אחת משתי קבוצות של פרמטרים, בהתאם לסכימה שנדרשת:

  • redirectScheme: בסכימת הפניה אוטומטית בהתאמה אישית, הדפדפן מבצע הפניה אוטומטית ומחזיר את ה-URI עם הסכימה שסופקה.

  • redirectHost, redirectPath: בסכימות של הפניות אוטומטיות מסוג https, ה-API דורש מארח ונתיב נפרדים כדי שהדפדפן יוכל לזהות את ההפניה האוטומטית ולהחזיר את ה-URI. כשמשתמשים ב-HTTPS, צריך לאמת את Digital Asset Link.

private void launchAuthTab() {
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth"), "mycustomscheme");
}

private void launchAuthTabHttps() {
    String host = "your_host";
    String path = "your_path";
    AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();
    authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);
}

מעבר מ-Custom Tabs ל-Auth Tab

כדי לעדכן את הטמעת האימות הקיימת של כרטיסיות מותאמות אישית, משנים את כוונת הכרטיסיות המותאמות אישית לכוונה החדשה של כרטיסיית האימות. אחרי שמוסיפים את הקוד, מאתרים את הכוונה של הכרטיסיות המותאמות אישית ומשנים אותה לכוונה החדשה של כרטיסיית האימות.

CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder().build();
customTabsIntent.launchUrl(context, uri)

// change to -->

AuthTabIntent authTabIntent = new AuthTabIntent.Builder.build();

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", "mycustomscheme");

/* - OR - */

authTabIntent.launch(mLauncher, Uri.parse("https://www.example.com/auth", host, path);

חזרה לכרטיסיות מותאמות אישית

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

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

חשוב לטפל בנתונים שיכולים להגיע אל ActivityResultCallback או אל כוונת הפעילות שלכם. שימו לב: אם נעשה שימוש ב-AuthTabIntent כדי להפעיל את חוויית הגיבוי, והדפדפן הנוכחי לא תומך בכרטיסיית אימות, האפליקציה מקבלת תוצאה של Activity.RESULT_CANCELED כשכרטיסיית Chrome בהתאמה אישית נסגרת.

דוגמה להטמעה של כרטיסיית אימות עם חזרה לכרטיסיות מותאמות אישית זמינה בספרייה Android Browser Helper.

מקורות מידע נוספים