แอป Wear OS สามารถทำงานแบบสแตนด์อโลนได้โดยไม่ต้องมีแอปคู่ ซึ่งหมายความว่าแอป Wear OS ต้องจัดการการตรวจสอบสิทธิ์ด้วยตัวเองเมื่อเข้าถึงข้อมูลจากอินเทอร์เน็ต แต่ขนาดหน้าจอที่เล็กและความสามารถในการป้อนข้อมูลที่ลดลงของนาฬิกาจะจำกัดตัวเลือกการตรวจสอบสิทธิ์ที่แอป Wear OS ใช้ได้
คู่มือนี้จะให้คำแนะนำเกี่ยวกับวิธีการตรวจสอบสิทธิ์ที่แนะนำสำหรับแอป Wear OS ซึ่งก็คือ Credential Manager
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีออกแบบประสบการณ์การลงชื่อเข้าใช้ที่ดีได้ใน คู่มือ UX การลงชื่อเข้าใช้
ข้อควรพิจารณาเบื้องต้น
โปรดพิจารณาประเด็นต่อไปนี้ก่อนเริ่มการติดตั้งใช้งาน
โหมดผู้มาเยือน
ไม่ต้องกำหนดให้มีการตรวจสอบสิทธิ์สำหรับฟังก์ชันทั้งหมด แต่ให้แสดงฟีเจอร์ต่างๆ แก่ผู้ใช้ให้มากที่สุดโดยไม่ต้องกำหนดให้ผู้ใช้ลงชื่อเข้าใช้
ผู้ใช้อาจค้นพบและติดตั้งแอป Wear โดยไม่ได้ใช้แอปบนอุปกรณ์เคลื่อนที่มาก่อน จึงอาจไม่มีบัญชีและไม่ทราบว่าแอปมีฟีเจอร์ใดบ้าง ตรวจสอบว่าฟังก์ชันโหมดผู้มาเยือนแสดงฟีเจอร์ของแอปได้อย่างถูกต้อง
อุปกรณ์บางเครื่องอาจปลดล็อกอยู่นานขึ้น
ในอุปกรณ์ที่รองรับซึ่งใช้ Wear OS 5 ขึ้นไป ระบบจะตรวจหาว่าผู้ใช้สวมอุปกรณ์ไว้ที่ข้อมือหรือไม่ หากผู้ใช้ปิดการตรวจจับข้อมือแล้วถอดอุปกรณ์ออกจากข้อมือ ระบบจะปลดล็อกอุปกรณ์ไว้นานกว่าปกติ
หากแอปของคุณกำหนดให้มีการรักษาความปลอดภัยระดับสูงขึ้น เช่น เมื่อแสดงข้อมูลที่อาจมีความละเอียดอ่อนหรือเป็นส่วนตัว ให้ตรวจสอบก่อนว่าได้เปิดใช้การตรวจจับข้อมือแล้วหรือไม่ โดยทำดังนี้
fun isWristDetectionAutoLockingEnabled(context: Context): Boolean { // Use the keyguard manager to check for the presence of a lock mechanism val keyguardManager = context.getSystemService<KeyguardManager>() val isSecured = keyguardManager?.isDeviceSecure == true // Use OEM-specific system settings to verify that on-body autolock is enabled. val isWristDetectionOn = android.provider.Settings.Global.getInt( context.contentResolver, PIXEL_WRIST_AUTOLOCK_SETTING_STATE, 0 ) == 1 return isSecured && isWristDetectionOn }
หากค่าที่แสดงผลของเมธอดนี้เป็น false ให้แจ้งให้ผู้ใช้ลงชื่อเข้าใช้บัญชีในแอปก่อนที่จะแสดงเนื้อหาที่เฉพาะเจาะจงกับผู้ใช้
Credential Manager
Credential Manager เป็น API ที่แนะนำสำหรับ การตรวจสอบสิทธิ์ใน Wear OS โดยมีสภาพแวดล้อมที่ปลอดภัยยิ่งขึ้นสำหรับผู้ใช้ในการลงชื่อเข้าใช้แอปพลิเคชัน Wear OS ในการตั้งค่าแบบสแตนด์อโลน โดยไม่จำเป็นต้องมีโทรศัพท์ที่จับคู่และเชื่อมต่ออยู่ และไม่จำเป็นต้องจำรหัสผ่าน
เอกสารนี้สรุปข้อมูลที่นักพัฒนาแอปต้องใช้ในการติดตั้งใช้งานโซลูชัน Credential Manager ด้วยกลไกการตรวจสอบสิทธิ์มาตรฐานที่โซลูชันนี้โฮสต์ไว้ ซึ่งได้แก่
- พาสคีย์
- รหัสผ่าน
- ข้อมูลประจำตัวแบบรวมศูนย์ (เช่น ลงชื่อเข้าใช้ด้วย Google)
นอกจากนี้ คู่มือนี้ยังให้คำแนะนำเกี่ยวกับวิธีย้ายวิธีการตรวจสอบสิทธิ์อื่นๆ ที่ยอมรับได้ของ Wear OS (การแชร์โทเค็นเลเยอร์ข้อมูล และ OAuth) เป็นข้อมูลสำรองสำหรับ Credential Manager รวมถึงคำแนะนำพิเศษสำหรับการ จัดการการเปลี่ยนจากปุ่มลงชื่อเข้าใช้ด้วย Google แบบสแตนด์อโลนที่เลิกใช้งานแล้ว ไปยัง Credential Manager เวอร์ชันที่ฝังไว้
ข้อจำกัดและความแตกต่างของ Wear OS
นักพัฒนาแอปควรทราบถึงข้อจำกัดและความแตกต่างต่อไปนี้ใน Wear OS
- Credential Manager พร้อมใช้งานใน Wear OS 3 ขึ้นไป
- สร้างข้อมูลเข้าสู่ระบบใน Wear OS ไม่ได้
- ระบบไม่รองรับทั้งการคืนค่าข้อมูลเข้าสู่ระบบและขั้นตอนการลงชื่อเข้าใช้แบบไฮบริด
- สามารถนำผู้ให้บริการข้อมูลเข้าสู่ระบบที่มีการผสานรวม Wear OS กลับมาใช้ซ้ำจากอุปกรณ์เคลื่อนที่ได้เท่านั้น
พาสคีย์ใน Wear OS
เราขอแนะนำให้นักพัฒนาแอปติดตั้งใช้งานพาสคีย์ในการติดตั้งใช้งาน Credential Manager ของ Wear OS พาสคีย์เป็นมาตรฐานอุตสาหกรรมใหม่สำหรับการตรวจสอบสิทธิ์ผู้ใช้ปลายทาง และมีประโยชน์ที่สำคัญหลายประการสำหรับผู้ใช้
พาสคีย์ใช้งานง่ายกว่า
- ผู้ใช้สามารถเลือกบัญชีที่จะใช้ลงชื่อเข้าใช้ได้ โดยไม่จำเป็นต้องพิมพ์ชื่อผู้ใช้
- ผู้ใช้สามารถตรวจสอบสิทธิ์โดยใช้การล็อกหน้าจอของอุปกรณ์ได้
- หลังจากสร้างและลงทะเบียนพาสคีย์แล้ว ผู้ใช้จะเปลี่ยนไปใช้อุปกรณ์ใหม่ได้อย่างราบรื่นและใช้งานได้ทันทีโดยไม่ต้องลงทะเบียนใหม่
พาสคีย์ปลอดภัยกว่า
- นักพัฒนาแอปจะบันทึกเฉพาะคีย์สาธารณะลงในเซิร์ฟเวอร์แทนการบันทึกรหัสผ่าน ซึ่งหมายความว่าผู้ไม่ประสงค์ดีจะแฮ็กเซิร์ฟเวอร์ได้ยากขึ้นมาก และคุณก็ไม่ต้องทำความสะอาดมากนักในกรณีที่เกิดการละเมิด
- พาสคีย์ให้การป้องกันที่ทนทานต่อฟิชชิง พาสคีย์จะทำงานได้บนเว็บไซต์และแอปที่ลงทะเบียนเท่านั้น ผู้ใช้จึงไม่ถูกหลอกให้ตรวจสอบสิทธิ์ในเว็บไซต์หลอกลวง เนื่องจากเบราว์เซอร์หรือระบบปฏิบัติการจะจัดการการยืนยัน
- พาสคีย์ช่วยลดความจำเป็นในการส่ง SMS ทำให้การตรวจสอบสิทธิ์คุ้มค่ามากขึ้น
ติดตั้งใช้งานพาสคีย์
รวมถึงการตั้งค่าและคำแนะนำสำหรับการติดตั้งใช้งานทุกประเภท
ตั้งค่า
ตั้งค่าระดับ API เป้าหมายเป็น 35 ในไฟล์ build.gradle ของโมดูลแอปพลิเคชัน
android { defaultConfig { targetSdk(35) } }เพิ่มบรรทัดต่อไปนี้ลงในไฟล์ build.gradle ของแอปหรือโมดูล โดยใช้เวอร์ชันเสถียรล่าสุดจากการอ้างอิง
androidx.credentialsการเผยแพร่androidx.credentials:credentials:1.6.0 androidx.credentials:credentials-play-services-auth:1.6.0
วิธีการตรวจสอบสิทธิ์ในตัว
เนื่องจาก Credential Manager เป็น API แบบรวม ขั้นตอนการติดตั้งใช้งานสำหรับ Wear OS จึงเหมือนกับอุปกรณ์ประเภทอื่นๆ
ใช้คำแนะนำสำหรับอุปกรณ์เคลื่อนที่ เพื่อเริ่มต้นใช้งานและติดตั้งใช้งานการรองรับพาสคีย์และรหัสผ่าน
ขั้นตอนในการ เพิ่มการรองรับฟีเจอร์ลงชื่อเข้าใช้ด้วย Google ลงใน Credential Manager มุ่งเน้นไปที่การพัฒนาแอปบนอุปกรณ์เคลื่อนที่ แต่ขั้นตอนจะเหมือนกันใน Wear OS
โปรดทราบว่าเนื่องจากสร้างข้อมูลเข้าสู่ระบบใน Wear OS ไม่ได้ คุณจึงไม่จำเป็นต้องติดตั้งใช้งานวิธีการสร้างข้อมูลเข้าสู่ระบบที่กล่าวถึงในคำแนะนำสำหรับอุปกรณ์เคลื่อนที่
วิธีการตรวจสอบสิทธิ์สำรอง
แอป Wear OS มีวิธีการตรวจสอบสิทธิ์อื่นๆ ที่ยอมรับได้ 2 วิธี ได้แก่ OAuth 2.0 (ทั้ง 2 รูปแบบ) และการแชร์โทเค็นการตรวจสอบสิทธิ์ของอุปกรณ์เคลื่อนที่ผ่านเลเยอร์ข้อมูล แม้ว่าวิธีการเหล่านี้จะไม่มีจุดผสานรวมใน Credential Manager API แต่คุณก็สามารถรวมไว้ในขั้นตอน UX ของ Credential Manager เป็นข้อมูลสำรองในกรณีที่ผู้ใช้ปิดหน้าจอ Credential Manager
หากต้องการจัดการการดำเนินการของผู้ใช้ในการปิดหน้าจอ Credential Manager ให้ดักจับ
NoCredentialExceptionซึ่งเป็นส่วนหนึ่งของ
GetCredential
ตรรกะ แล้วไปยัง UI การตรวจสอบสิทธิ์ที่กำหนดเอง
try { val getCredentialResponse: GetCredentialResponse = credentialManager.getCredential(activity, createGetCredentialRequest()) return authenticate(getCredentialResponse.credential) } catch (_: GetCredentialCancellationException) { navigateToSecondaryAuthentication() }
จากนั้น UI การตรวจสอบสิทธิ์ที่กำหนดเองจะแสดงวิธีการตรวจสอบสิทธิ์อื่นๆ ที่ยอมรับได้ ซึ่งอธิบายไว้ในคู่มือ UX การลงชื่อเข้าใช้
การแชร์โทเค็นเลเยอร์ข้อมูล
แอปคู่ในโทรศัพท์สามารถโอนข้อมูลการตรวจสอบสิทธิ์ไปยังแอป Wear OS ได้อย่างปลอดภัยโดยใช้ Wearable Data Layer API โอนข้อมูลเข้าสู่ระบบเป็นข้อความหรือเป็นรายการข้อมูล
การตรวจสอบสิทธิ์ประเภทนี้มักไม่กำหนดให้ผู้ใช้ต้องดำเนินการใดๆ อย่างไรก็ตาม ให้หลีกเลี่ยงการตรวจสอบสิทธิ์โดยไม่แจ้งให้ผู้ใช้ทราบว่าระบบกำลังลงชื่อเข้าใช้ให้ คุณสามารถแจ้งให้ผู้ใช้ทราบโดยใช้หน้าจอที่ปิดได้ซึ่งแสดงว่าระบบกำลังโอนบัญชีจากอุปกรณ์เคลื่อนที่
สำคัญ: แอป Wear OS ต้องมีวิธีการตรวจสอบสิทธิ์อื่นๆ อย่างน้อย 1 วิธี เนื่องจากตัวเลือกนี้จะทำงานได้เฉพาะในนาฬิกาที่จับคู่กับ Android เมื่อมีการติดตั้งแอปบนอุปกรณ์เคลื่อนที่ที่เกี่ยวข้อง โปรดระบุวิธีการตรวจสอบสิทธิ์อื่นสำหรับผู้ใช้ที่ไม่มีแอปบนอุปกรณ์เคลื่อนที่ที่เกี่ยวข้องหรืออุปกรณ์ Wear OS จับคู่กับอุปกรณ์ iOS
ส่งโทเค็นโดยใช้เลเยอร์ข้อมูลจากแอปบนอุปกรณ์เคลื่อนที่ ดังที่แสดงในตัวอย่างต่อไปนี้
val token = "..." // Auth token to transmit to the Wear OS device. val putDataReq: PutDataRequest = PutDataMapRequest.create("/auth").run { dataMap.putString("token", token) asPutDataRequest() } val putDataTask: Task<DataItem> = Wearable.getDataClient(this).putDataItem(putDataReq)
ฟังเหตุการณ์การเปลี่ยนแปลงข้อมูลในแอป Wear OS ดังที่แสดงในตัวอย่างต่อไปนี้
class AuthDataListenerService : WearableListenerService() { override fun onDataChanged(dataEvents: DataEventBuffer) { dataEvents.forEach { event -> if (event.type == DataEvent.TYPE_CHANGED) { val dataItemPath = event.dataItem.uri.path ?: "" if (dataItemPath.startsWith("/auth")) { val token = DataMapItem.fromDataItem(event.dataItem) .dataMap .getString("token") // Display an interstitial screen to notify the user that they're being signed // in. Then, store the token and use it in network requests. handleSignInSequence(token) } } } } /** placeholder sign in handler. */ fun handleSignInSequence(token: String?) {} }
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ Wearable Data Layer ได้ที่ หัวข้อส่งและซิงค์ข้อมูลใน Wear OS
ใช้ OAuth 2.0
Wear OS รองรับขั้นตอนที่อิงตาม OAuth 2.0 2 ขั้นตอน ซึ่งอธิบายไว้ในส่วนต่อไปนี้
- การให้สิทธิ์รหัสการให้สิทธิ์ที่มี Proof Key for Code Exchange (PKCE) ตามที่กำหนดไว้ ใน RFC 7636
- การให้สิทธิ์การตรวจสอบสิทธิ์ของอุปกรณ์ (DAG) ตามที่กำหนดไว้ใน RFC 8628
Proof Key for Code Exchange (PKCE)
หากต้องการใช้ PKCE อย่างมีประสิทธิภาพ ให้ใช้ RemoteAuthClient
จากนั้นสร้างออบเจ็กต์ OAuthRequest เพื่อส่งคำขอการตรวจสอบสิทธิ์จากแอป Wear OS ไปยังผู้ให้บริการ OAuth
ออบเจ็กต์นี้ประกอบด้วย
URL ไปยังปลายทาง OAuth สำหรับรับโทเค็นและออบเจ็กต์
CodeChallenge
โค้ดต่อไปนี้แสดงตัวอย่างการสร้างคำขอการตรวจสอบสิทธิ์
val oauthRequest = OAuthRequest.Builder(context) .setAuthProviderUrl(uri) .setCodeChallenge(codeChallenge) .setClientId(CLIENT_ID) .build()
หลังจากสร้างคำขอการตรวจสอบสิทธิ์แล้ว ให้ส่งคำขอไปยังแอปคู่โดยใช้เมธอด
sendAuthorizationRequest()
RemoteAuthClient.create(context).sendAuthorizationRequest( request = oauthRequest, executor = { command -> command?.run() }, clientCallback = object : RemoteAuthClient.Callback() { override fun onAuthorizationResponse( request: OAuthRequest, response: OAuthResponse ) { // Extract the token from the response, store it, and use it in requests. continuation.resume(parseCodeFromResponse(response)) } override fun onAuthorizationError(request: OAuthRequest, errorCode: Int) { // Handle Errors continuation.resume(Result.failure(IOException("Authorization failed"))) } } )
คำขอนี้จะทริกเกอร์การเรียกไปยังแอปคู่ ซึ่งจะแสดง UI การให้สิทธิ์ในเว็บเบราว์เซอร์ในโทรศัพท์มือถือของผู้ใช้ ผู้ให้บริการ OAuth 2.0 จะตรวจสอบสิทธิ์ผู้ใช้และขอความยินยอมจากผู้ใช้สำหรับสิทธิ์ที่ขอ จากนั้นระบบจะส่งการตอบกลับไปยัง URL เปลี่ยนเส้นทางที่สร้างขึ้นโดยอัตโนมัติ
หลังจากให้สิทธิ์สำเร็จหรือไม่สำเร็จ เซิร์ฟเวอร์ OAuth 2.0 จะเปลี่ยนเส้นทางไปยัง URL ที่ระบุไว้ในคำขอ หากผู้ใช้อนุมัติคำขอเข้าถึง การตอบกลับจะมีรหัสการให้สิทธิ์ หากผู้ใช้ไม่อนุมัติคำขอ การตอบกลับจะมีข้อความแสดงข้อผิดพลาด
การตอบกลับจะอยู่ในรูปแบบของสตริงการค้นหาและมีลักษณะเหมือนตัวอย่างใดตัวอย่างหนึ่งต่อไปนี้
https://wear.googleapis.com/3p_auth/com.your.package.name?code=xyz
https://wear.googleapis-cn.com/3p_auth/com.your.package.name?code=xyz
ซึ่งจะโหลดหน้าเว็บที่นำผู้ใช้ไปยังแอปคู่ โดยแอปคู่จะยืนยัน URL การตอบกลับและส่งต่อการตอบกลับไปยังแอป Wear OS โดยใช้ onAuthorizationResponse API
จากนั้นแอปสมาร์ทวอทช์จะแลกรหัสการให้สิทธิ์เป็นโทเค็นเพื่อการเข้าถึงได้
การให้สิทธิ์การตรวจสอบสิทธิ์ของอุปกรณ์
เมื่อใช้การให้สิทธิ์การตรวจสอบสิทธิ์ของอุปกรณ์ ผู้ใช้จะเปิด URI การยืนยันในอุปกรณ์อื่น จากนั้นเซิร์ฟเวอร์การให้สิทธิ์จะขอให้ผู้ใช้อนุมัติหรือปฏิเสธคำขอ
หากต้องการทำให้กระบวนการนี้ง่ายขึ้น ให้ใช้
RemoteActivityHelper เพื่อเปิดหน้าเว็บใน
อุปกรณ์เคลื่อนที่ที่จับคู่ของผู้ใช้ ดังที่แสดงในตัวอย่างต่อไปนี้
// Request access from the authorization server and receive Device Authorization Response. private fun verifyDeviceAuthGrant(verificationUri: String) { RemoteActivityHelper(context).startRemoteActivity( Intent(Intent.ACTION_VIEW).apply { addCategory(Intent.CATEGORY_BROWSABLE) data = Uri.parse(verificationUri) }, null ) }
หากคุณมีแอป iOS ให้ใช้ Universal Link เพื่อดักจับ Intent นี้ในแอปแทนที่จะใช้เบราว์เซอร์ในการให้สิทธิ์โทเค็น