Using Unlock With Tap

This feature enables your app to perform unlock operations using mobile credentials.

Unlocking with SeamSDK uses proximity to communicate credentials to door readers. When a user initiates an unlock, the SDK performs scanning, error handling, and unlock events using Seam.shared.unlock(using:).

Using this process involves the following steps:

  1. Retrieve available mobile credentials.

  2. Monitor for permission or credential errors. Unhandled errors are thrown as credentialErrors([SeamCredentialError]).

  3. Perform the unlock operation.

  4. Handle unlock status events.

  5. Cancel the unlock operation if needed.


1. Retrieve Mobile Credentials

Access the current credentials through the published credentials array on Seam.shared:

import SeamSDK
import Combine

// Access credentials
let credentials = Seam.shared.credentials

// Observe updates with Combine
let credentialsSubscription = Seam.shared.$credentials
    .sink { creds in
        // Update UI with new credentials array.
    }

2. Monitor Credential Errors

Permission or setup issues appear in each credential’s errors property. Observe like this:

Note: The .errors array on credentials represents per-credential issues, though some issues may be repeated across several credentials (for example, bluetooth requirements). SDK- or credential-level errors (such as invalid token or expired credential) are thrown directly by methods like unlock(using:) because SeamError or SeamCredentialError and must be handled through do/catch.

3. Perform Unlock Operation

The call to Seam.shared.unlock(using:) may throw:

  • SeamError: For SDK-level issues (for example, invalid token, uninitialized SDK).

  • SeamCredentialError: For credential-specific issues (for example, expired credential, device not eligible). Ensure that you wrap the call in do/catch blocks to handle these errors.

Use Async/Await or Combine to initiate an unlock with a selected credential:

If the Apple Wallet dialog appears when using the BLE unlock, see Handling System Permissions for steps to prevent it and ensure a smoother unlockWithTap experience.


4. Handle Unlock Events

Handle each SeamUnlockEvent to update your UI and logic. Available events:

  • launched Unlock operation has started.

  • grantedAccess Access was granted by the lock.

  • timedOut Unlock operation timed out without success.

  • connectionFailed(debugDescription:) Unlock operation failed to connect; debugDescription may contain additional details.

Async/Await example:

Combine example:

5. Cancel the Unlock Operation

Stop scanning by canceling your active task or subscription.

Last updated

Was this helpful?