Skip to content

๐Ÿ“ฑ Mobile App Integration Track โ€‹

Source: en/tracks/mobile.md ยท Live: https://docs.1pass.dev/en/tracks/mobile LLM-sanitized: internal links absolutized, VitePress containers โ†’ admonitions, line numbers in the Jump-to Index reference this rendered file (1-indexed).

๐Ÿ“ Jump-to Index โ€‹

  • L29-L37: ## The four core promises
  • L38-L45: ## Step 1 ยท Register the app
  • L46-L97: ## Step 2 ยท Platform quickstart
    • L48-L83: ### iOS โ€” LogiAuth Swift Package (recommended)
    • L84-L97: ### Other platforms
  • L98-L104: ## Step 3 ยท Avoid the mobile-specific pitfalls
  • L105-L114: ## Step 4 ยท Pre-build checks
  • L115-L123: ## Common reference (track-agnostic)
  • L124-L131: ## Hand the whole thing to an AI

๐Ÿ“ฑ Mobile App Integration Track โ€‹

The fastest path to integrating logi in iOS, Android, Flutter, and React Native native apps.

๐Ÿ’ก Tip: Is this the right track?

The four core promises โ€‹

  1. Public client + PKCE are required. Never hardcode client_secret into a mobile app.
  2. Use a single custom-scheme redirect_uri โ€” for example, com.example.app://oauth/1pass/callback.
  3. App-to-app first, in-app browser fallback โ€” works even when the user arrives from an in-app browser like KakaoTalk or Naver.
  4. Keep the app RP and the web RP separate โ€” don't mix mobile and web redirects under the same client_id. Details: Common / Public Clients ยท One RP per surface

Step 1 ยท Register the app โ€‹

Register one RP with client_type: public. You can do this from the console or the API.

Step 2 ยท Platform quickstart โ€‹

On iOS, the official Swift SDK LogiAuth handles PKCE, ASWebAuthenticationSession, the in-app escape, and keychain storage for you. Reach for the SDK before you roll your own.

swift
// Package.swift
.package(url: "https://github.com/dcode-co/logi-auth-swift.git", from: "0.2.0"),

// App.swift
import LogiAuth

@main
struct MyApp: App {
  init() {
    LogiAuth.configure(LogiAuthConfig(
      clientId: "logi_xxx",
      redirectURI: URL(string: "myapp://oauth/1pass/callback")!
    ))
  }

  var body: some Scene {
    WindowGroup {
      ContentView()
        .onOpenURL { url in _ = LogiAuth.handle(url) }
    }
  }
}

// anywhere
let result = try await LogiAuth.signIn()

Don't forget .onOpenURL { url in _ = LogiAuth.handle(url) } โ€” the SDK receives the login callback there and completes the token exchange.

For full integration and error classification โ†’ Swift quickstart

Other platforms โ€‹

Follow the single page for your stack. The rest are mirrors of the same pattern.

StackGuideSDK / library
iOS (Swift)integrations/swiftLogiAuth 0.1.2 (recommended) ยท or roll your own ASWebAuthenticationSession + CryptoKit
Android (Kotlin)integrations/androidLogiAuth Kotlin SDK (recommended) ยท or hand-rolled Custom Tabs + DataStore + Keystore
Flutterintegrations/flutterflutter_web_auth_2 + flutter_secure_storage
React Nativeintegrations/react-nativereact-native-app-auth + react-native-keychain

โ„น๏ธ Note: Storing credentials separately on Android The Android (Kotlin) โ€” Canonical/Merge page covers canonical_sub / linked_subs handling and the pattern for storing credentials separately. For a new integration, read it after you finish the Step 2 guide.

Step 3 ยท Avoid the mobile-specific pitfalls โ€‹

Step 4 ยท Pre-build checks โ€‹

Common reference (track-agnostic) โ€‹


Hand the whole thing to an AI โ€‹

Paste @/llms-full.txt into Claude Code, Cursor, or Codex, then say:

"Integrate logi 1pass as an RP into my [iOS Swift / Flutter / Android Kotlin / RN] app, using a public client + PKCE."

โ†’ It generates the quickstart, env, redirect_uri registration, and callback handler automatically.

์ตœ์ข… ์ˆ˜์ •:

Identity๊ฐ€ ์ œํ’ˆ์˜ ์‹ ๋ขฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.