Fix Amber "not installed" false positive - skip isExternalSignerInstalled() check
Android 11+ package visibility rules cause isExternalSignerInstalled() to return false even when Amber is installed, unless <queries> is declared in AndroidManifest.xml. Skip the pre-check and attempt login directly instead, with better error messages for cancel vs not-found vs other errors. Co-authored-by: shakespeare.diy <assistant@shakespeare.diy>
This commit is contained in:
parent
6230948383
commit
ef22eb2de7
1 changed files with 12 additions and 12 deletions
|
|
@ -16,7 +16,7 @@ import { useLoginActions } from '@/hooks/useLoginActions';
|
|||
import { useToast } from '@/hooks/useToast';
|
||||
import { cn } from '@/lib/utils';
|
||||
import { openAmberForLogin, subscribeToAmberReturn } from '@/lib/amber';
|
||||
import { getAmberPublicKeyViaPlugin, isAmberInstalled } from '@/lib/capacitorAmberSigner';
|
||||
import { getAmberPublicKeyViaPlugin } from '@/lib/capacitorAmberSigner';
|
||||
|
||||
|
||||
interface LoginDialogProps {
|
||||
|
|
@ -54,23 +54,23 @@ export const LoginDialog: React.FC<LoginDialogProps> = ({ isOpen, onClose, onLog
|
|||
|
||||
if (isCapacitor) {
|
||||
// ── Native path (ZapStore/Capacitor APK) ────────────────────────────────
|
||||
// Check Amber is installed first for a clear error message
|
||||
const installed = await isAmberInstalled();
|
||||
if (!installed) {
|
||||
setAmberError('Amber is not installed. Install it from the ZapStore or GitHub.');
|
||||
setAmberStep('error');
|
||||
return;
|
||||
}
|
||||
// Attempt login directly — skip isExternalSignerInstalled() check because
|
||||
// Android 11+ package visibility rules can make it return false even when
|
||||
// Amber IS installed (requires <queries> in AndroidManifest.xml).
|
||||
try {
|
||||
// This opens Amber natively, user approves, pubkey comes back as a Promise
|
||||
const pubkey = await getAmberPublicKeyViaPlugin();
|
||||
completeAmberLogin(pubkey);
|
||||
} catch (e: unknown) {
|
||||
// User cancelled or Amber threw
|
||||
const msg = (e as Error)?.message ?? 'Amber login failed';
|
||||
setAmberError(msg.includes('cancelled') || msg.includes('cancel')
|
||||
? 'Login cancelled. Tap "Open Amber" to try again.'
|
||||
: msg);
|
||||
// Distinguish: user cancelled vs Amber not installed vs other error
|
||||
if (msg.toLowerCase().includes('cancel') || msg.toLowerCase().includes('denied')) {
|
||||
setAmberError('Login cancelled. Tap "Open Amber" to try again.');
|
||||
} else if (msg.toLowerCase().includes('not found') || msg.toLowerCase().includes('no activity') || msg.toLowerCase().includes('resolve')) {
|
||||
setAmberError('Amber not found. Make sure Amber is installed from the ZapStore.');
|
||||
} else {
|
||||
setAmberError(msg);
|
||||
}
|
||||
setAmberStep('error');
|
||||
}
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in a new issue