ลดความซับซ้อนในการตรวจสอบสิทธิ์โดยใช้แท็บการตรวจสอบสิทธิ์

แท็บการตรวจสอบสิทธิ์มีโฟลว์การตรวจสอบสิทธิ์ที่ปลอดภัยและเรียบง่ายสำหรับใช้ในแอป Android การสร้างและเปิดตัว AuthTabIntent จะช่วยให้คุณเรียกใช้แท็บที่กำหนดเองเฉพาะทางซึ่งออกแบบมาเพื่อจัดการประสบการณ์การตรวจสอบสิทธิ์แบบครบวงจรได้ แท็บนี้ได้รับการปรับลดและมีความสามารถที่จำกัด เพื่อให้ผู้ใช้มีสมาธิกับงานที่ทำอยู่ เมื่อเสร็จสิ้น แท็บจะเรียกกลับไปยังแอปพลิเคชันของคุณพร้อมผลลัพธ์โดยใช้ https หรือสคีมาที่กำหนดเอง

แท็บที่กำหนดเองที่มีฟีเจอร์ครบถ้วน
รูปที่ 1 แท็บที่กำหนดเองที่มีฟีเจอร์ครบถ้วน
แท็บการให้สิทธิ์ที่มีฟังก์ชันการทำงานขั้นต่ำ
รูปที่ 2 แท็บการให้สิทธิ์ที่มีความสามารถขั้นต่ำ

ตั้งแต่ Chrome 132 เป็นต้นไป แท็บการตรวจสอบสิทธิ์จะแทนที่การผสานรวมการตรวจสอบสิทธิ์ของแท็บที่กำหนดเองที่มีอยู่ได้โดยตรง สำหรับผู้ใช้ที่อุปกรณ์ไม่รองรับแท็บการตรวจสอบสิทธิ์ ระบบจะเปลี่ยนไปใช้ Custom Tabs โดยอัตโนมัติ คุณสามารถย้ายข้อมูลจากแท็บที่กำหนดเองไปยังแท็บการตรวจสอบสิทธิ์ได้โดยการแก้ไขโค้ดเพียงไม่กี่บรรทัด

วิธีการทำงาน

เมื่อใช้แท็บการตรวจสอบสิทธิ์ แอปไคลเอ็นต์จะเปิดแท็บที่กำหนดเองเฉพาะทางซึ่งแสดงหน้าต่างเบราว์เซอร์ที่โหลด URL พร้อมหน้าการตรวจสอบสิทธิ์ที่คาดไว้ หลังจากเสร็จสิ้นแล้ว แท็บการตรวจสอบสิทธิ์จะแสดงผลการตรวจสอบสิทธิ์โดยใช้การเรียกกลับ

หลังจากการตรวจสอบสิทธิ์ เมื่อมีการไปยัง URI เปลี่ยนเส้นทางของ Callback ที่ระบุไว้ก่อนหน้านี้ ระบบจะบันทึกการเปลี่ยนเส้นทางและส่งกลับไปยังแอปพลิเคชันไคลเอ็นต์โดยใช้ Callback สำหรับการเปลี่ยนเส้นทางที่ใช้สคีมา https เบราว์เซอร์จะยืนยันว่าโดเมนการเปลี่ยนเส้นทางและแอปไคลเอ็นต์เป็นของผู้เผยแพร่รายเดียวกันโดยใช้ลิงก์เนื้อหาดิจิทัล

ไคลเอ็นต์จะได้รับ URI ที่นำทางพร้อมรูปแบบการเปลี่ยนเส้นทาง (หรือสำหรับ https จะได้รับโฮสต์และเส้นทางการเปลี่ยนเส้นทาง) โดยใช้การเรียกกลับที่ระบุ ข้อมูลนี้ประกอบด้วยรหัสผลลัพธ์และข้อมูลอื่นๆ ที่อินเทอร์เฟซการตรวจสอบสิทธิ์ระบุ คุณใช้ข้อมูลนี้เพื่อยืนยันการตรวจสอบสิทธิ์หรือจัดการสถานการณ์ที่ไม่สําเร็จได้

เหตุผลที่ต้องมีแท็บการให้สิทธิ์

ก่อนที่จะมีแท็บการตรวจสอบสิทธิ์ คุณสามารถใช้ Intent ของแท็บที่กำหนดเองมาตรฐานเพื่อขับเคลื่อนขั้นตอนการตรวจสอบสิทธิ์ได้ เราขอแนะนำให้ใช้แท็บการให้สิทธิ์เนื่องจากจะช่วยเพิ่มความปลอดภัย มอบประสบการณ์การใช้งานที่ราบรื่น และยังช่วยแยกรายละเอียดบางอย่างของการตรวจสอบสิทธิ์ออกจากโค้ดฝั่งไคลเอ็นต์ด้วย ด้วยเหตุนี้ คุณจึงจะเห็นว่าแท็บการให้สิทธิ์มอบประสบการณ์การใช้งานที่ดีกว่า

การรักษาความปลอดภัยที่ดียิ่งขึ้น

ในการติดตั้งใช้งานแท็บที่กำหนดเองโดยทั่วไป จะต้องมี Intent เพื่อรับข้อมูลจากหน้าต่างเบราว์เซอร์ที่จัดการการตรวจสอบสิทธิ์ ซึ่งต้องใช้โค้ดเพิ่มเติมและทำให้แอปของคุณอาจถูกรบกวนความตั้งใจ เมื่อใช้แท็บการให้สิทธิ์ ระบบจะรับข้อมูลโดยใช้การเรียกกลับ โดยมีการโอนข้อมูลโดยตรงระหว่าง Android API กับแอปไคลเอ็นต์

ประสบการณ์การใช้งานที่ราบรื่น

ในแท็บที่กำหนดเอง ผู้ใช้จะมีสิทธิ์เข้าถึงฟีเจอร์เพิ่มเติมในเบราว์เซอร์ซึ่งอาจไม่พึงประสงค์สำหรับขั้นตอนการตรวจสอบสิทธิ์ แท็บการให้สิทธิ์มอบประสบการณ์ที่เรียบง่ายซึ่งนำตัวเลือกการปรับแต่งส่วนใหญ่ที่มีใน Custom Tab มาตรฐานออก สำหรับเบราว์เซอร์ Chrome ซึ่งรวมถึงปุ่มย่อ เมนูตามบริบทที่กดค้างไว้ และแตะเพื่อค้นหา รวมถึงรายการเมนูเพื่อเปิดใน Chrome, บุ๊กมาร์ก, ดาวน์โหลดและแชร์ และเพิ่มลงในหน้าจอหลัก

แท็บการตรวจสอบสิทธิ์ยังคงมีฟีเจอร์ให้เบราว์เซอร์ป้อนรหัสผ่านและการชำระเงินที่บันทึกไว้ก่อนหน้านี้โดยอัตโนมัติ นำทางไปข้างหน้าหรือข้างหลัง รีเฟรช แสดงข้อมูลหน้าเว็บ ขอเวอร์ชันเดสก์ท็อปของหน้าเว็บ และแปล

การแยกข้อมูล

การใช้แท็บการตรวจสอบสิทธิ์เพียงอย่างเดียวจะช่วยลดความจำเป็นในการรับข้อมูลจากเบราว์เซอร์ รวมถึงตัวกรอง Intent ใน AndroidManifest.xml ที่ก่อนหน้านี้จำเป็นต่อการตรวจสอบสิทธิ์เพื่อให้ทำงานได้อย่างถูกต้อง ซึ่งจะช่วยลดความซับซ้อนในฝั่งไคลเอ็นต์ ฟีเจอร์บางอย่างเหล่านี้ยังคงรวมอยู่ในโค้ดฝั่งไคลเอ็นต์ได้เพื่อให้มีความเข้ากันได้แบบย้อนหลังกับแท็บที่กำหนดเองในกรณีที่แท็บการให้สิทธิ์ไม่พร้อมใช้งานในอุปกรณ์ของผู้ใช้

ใช้แท็บการตรวจสอบสิทธิ์

แท็บการตรวจสอบสิทธิ์ต้องใช้ไลบรารีการตรวจสอบสิทธิ์ของเบราว์เซอร์ AndroidX คุณเพิ่มไลบรารีเบราว์เซอร์ AndroidX ได้ในส่วนทรัพยากร Dependency ของไฟล์ build.gradle ของโปรเจ็กต์ API พร้อมใช้งานในบิลด์เวอร์ชันอัลฟ่า เพิ่มโค้ดต่อไปนี้ลงในไฟล์บิลด์

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

ก่อนเปิดตัวแท็บการตรวจสอบสิทธิ์ ให้ประกาศ ActivityResultLauncher ที่ใช้ ActivityResultCaller รวมถึง ActivityResultCallback โดยจะดำเนินการก่อนสร้างกิจกรรมหรือ Fragment ดังนี้

// 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 แล้วเรียกใช้เมธอด launch วิธีการเปิดตัวยอมรับพารามิเตอร์ชุดใดชุดหนึ่งจาก 2 ชุดตามรูปแบบที่คุณต้องการ

  • redirectScheme: สำหรับรูปแบบการเปลี่ยนเส้นทางที่กำหนดเอง เบราว์เซอร์จะเปลี่ยนเส้นทางและแสดง URI พร้อมรูปแบบที่ระบุ

  • redirectHost, redirectPath: สำหรับรูปแบบการเปลี่ยนเส้นทาง https นั้น API จะกำหนดให้มีโฮสต์และเส้นทางแยกต่างหากเพื่อให้เบราว์เซอร์ตรวจหาการเปลี่ยนเส้นทางและส่งคืน URI เมื่อใช้ https คุณจะต้องยืนยันลิงก์เนื้อหาดิจิทัล

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 ที่มีอยู่โดยแก้ไข Intent ของ Custom Tabs เป็น Intent ของ Auth Tab ใหม่ หลังจากเพิ่มโค้ดแล้ว ให้ค้นหา Intent ของแท็บที่กำหนดเองและแก้ไขเป็น Intent ของแท็บการให้สิทธิ์ใหม่

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() วิธีนี้ช่วยให้แอปเลือกได้แบบไดนามิกระหว่างการเปิดแท็บการตรวจสอบสิทธิ์หรือโฟลว์แท็บที่กำหนดเองตามความสามารถของเบราว์เซอร์ หากต้องการจัดการสถานการณ์ที่ระบบไม่รองรับแท็บการตรวจสอบสิทธิ์อย่างราบรื่น ให้เพิ่มการติดตั้งใช้งานแท็บการตรวจสอบสิทธิ์ในขณะที่ยังคงใช้โค้ด Custom Tabs ที่มีอยู่เพื่อจัดการโฟลว์การตรวจสอบสิทธิ์เป็นตัวสำรอง

โปรดระมัดระวังในการจัดการข้อมูลที่อาจมาจาก ActivityResultCallback หรือจาก Intent ของกิจกรรม โปรดทราบว่าหากใช้ AuthTabIntent เพื่อเปิดประสบการณ์สำรองและเบราว์เซอร์ปัจจุบันไม่รองรับแท็บการตรวจสอบสิทธิ์ แอปจะได้รับผลลัพธ์ Activity.RESULT_CANCELED เมื่อปิดแท็บที่กำหนดเอง

ตัวอย่างการติดตั้งใช้งานแท็บการตรวจสอบสิทธิ์ที่มีการเปลี่ยนเส้นทางไปยังแท็บที่กำหนดเองจะอยู่ในไลบรารี Android Browser Helper

แหล่งข้อมูลเพิ่มเติม