Files
readest/apps/readest-app/src-tauri/Info-ios.plist
T
Huang Xin ae9fb05f2c feat(sync): Google Drive sign-in on Android + iOS (mobile OAuth) (#4823)
* feat(sync): Google Drive sign-in on Android (Custom Tab OAuth)

Add the Android OAuth runner so Drive can be connected on Android, reusing the
same provider / token store / connect flow as desktop.

- oauthAndroid.ts: runAndroidOAuth wires the DI OAuth flow to a Chrome Custom
  Tab via the existing authWithCustomTab native bridge (keeps the Tauri Activity
  foregrounded so the in-flight redirect survives). Headless-unit-tested.
- googleDriveConnect: dispatch the platform runner by OS (Android -> Custom Tab,
  desktop -> system browser deep link).
- IntegrationsPanel: show the Google Drive provider row on Android too.
- Native (device-verification pending — no Android toolchain in CI):
  NativeBridgePlugin.kt handleIntent now also resolves the reverse-DNS
  com.googleusercontent.apps.<id>:/oauthredirect redirect through the same
  pending invoke as the Supabase callback; a matching BROWSABLE intent-filter
  added to AndroidManifest.xml (mirrors the tauri.conf.json deep-link scheme).

Full suite 6475 green; lint + format clean. The native sign-in needs on-device
Android verification before this ships.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* feat(sync): Google Drive sign-in on iOS (ASWebAuthenticationSession OAuth)

Add the iOS OAuth runner so the Drive provider connects on iPhone/iPad,
mirroring the Android Custom Tab flow.

- oauthIos.ts: runIosOAuth drives the shared PKCE flow through
  authWithSafari, keyed to the client-id-derived reverse-DNS callback
  scheme so the web-auth session intercepts the redirect.
- nativeAuth.ts: AuthRequest gains an optional callbackScheme; the
  Supabase login keeps the native "readest" default.
- googleDriveConnect.ts: resolveOAuthRunner dispatches ios to runIosOAuth.
- IntegrationsPanel.tsx: show the Google Drive cloud-sync row on iOS.

Native (device-verify pending, no iOS toolchain in CI):
- auth_with_safari honors args.callbackScheme (default "readest").
- Info-ios.plist registers the reverse-DNS scheme in CFBundleURLTypes,
  mirroring the AndroidManifest gdrive-oauth filter.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 16:59:55 +02:00

71 lines
2.1 KiB
Plaintext

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleLocalizations</key>
<array>
<string>en</string>
<string>ar</string>
<string>bn</string>
<string>bo</string>
<string>de</string>
<string>el</string>
<string>es</string>
<string>fa</string>
<string>fr</string>
<string>he</string>
<string>hi</string>
<string>hu</string>
<string>id</string>
<string>it</string>
<string>ja</string>
<string>ko</string>
<string>ms</string>
<string>nl</string>
<string>pl</string>
<string>pt-PT</string>
<string>pt-BR</string>
<string>ro</string>
<string>ru</string>
<string>si</string>
<string>sl</string>
<string>sv</string>
<string>ta</string>
<string>th</string>
<string>tr</string>
<string>uk</string>
<string>uz</string>
<string>vi</string>
<string>zh-Hans</string>
<string>zh-Hant</string>
</array>
<key>LSSupportsOpeningDocumentsInPlace</key>
<true/>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>com.bilingify.readest</string>
<key>CFBundleURLSchemes</key>
<array>
<string>readest</string>
</array>
</dict>
<!-- Google Drive OAuth reverse-DNS redirect (iOS-type client). The
ASWebAuthenticationSession matches on this scheme; mirrors the
gdrive-oauth filter in AndroidManifest.xml and the deep-link.mobile
scheme in tauri.conf.json. -->
<dict>
<key>CFBundleURLName</key>
<string>com.googleusercontent.apps.gdrive-oauth</string>
<key>CFBundleURLSchemes</key>
<array>
<string>com.googleusercontent.apps.209390247301-ctpmep68ppfa56r1b8tr35e4qi4p60kq</string>
</array>
</dict>
</array>
</dict>
</plist>