# Biometric sign-in for Expo, iOS, and Android

[View video](./biometric-sign-in.mp4)

Clerk's mobile SDKs can now enroll a signed-in user's current device as a trusted device, then let returning users sign in with Face ID, Touch ID, or Android biometrics. Clerk verifies a device-bound challenge while the private key stays on the device.

Prebuilt auth and user profile views can show the enrollment prompt, biometric sign-in button, and current-device toggle. Custom flows can use the trusted-device APIs directly.

## Expo

**Enroll**

```tsx
import { useTrustedDevices } from '@clerk/expo'

const { enroll } = useTrustedDevices()

await enroll()
```

**Sign in**

```tsx
import { useTrustedDevices } from '@clerk/expo'

const { signIn } = useTrustedDevices()

await signIn()
```

**Revoke**

```tsx
import { useTrustedDevices } from '@clerk/expo'

const { revoke } = useTrustedDevices()

await revoke(trustedDeviceId)
```

## iOS

**Enroll**

```swift
try await Clerk.shared.trustedDevices.enroll()
```

**Sign in**

```swift
try await Clerk.shared.auth.signInWithTrustedDevice()
```

**Revoke**

```swift
try await Clerk.shared.trustedDevices.revoke(id: trustedDeviceId)
```

## Android

**Enroll**

```kotlin
scope.launch {
  Clerk.trustedDevices.enroll()
}
```

**Sign in**

```kotlin
scope.launch {
  Clerk.auth.signInWithTrustedDevice()
}
```

**Revoke**

```kotlin
scope.launch {
  Clerk.trustedDevices.revoke(trustedDeviceId)
}
```

See the biometric sign-in docs for setup and reference material:

- [iOS guide](https://clerk.com/docs/ios/guides/development/custom-flows/authentication/biometric-sign-in.md)
- [Android guide](https://clerk.com/docs/android/guides/development/custom-flows/authentication/biometric-sign-in.md)
- [Expo guide](https://clerk.com/docs/expo/guides/development/custom-flows/authentication/biometric-sign-in.md)
