Memulai
Copy a setup prompt with the install steps and the full markdown guide for this plugin.
Set up this Capacitor plugin in the project.
Use the package manager already used by the project.
Install these package(s): `@capgo/capacitor-persistent-account`
Run the required Capacitor sync/update step after installation.
Read this markdown guide for the full setup steps: https://raw.githubusercontent.com/Cap-go/website/refs/heads/main/apps/docs/src/content/docs/id/docs/plugins/persistent-account/getting-started.mdx
Use that guide for platform-specific steps, native file edits, permissions, config changes, imports, and usage setup.
If that guide references other docs pages, read them too.
Instalasi
Section titled “Instalasi”npm install @capgo/capacitor-persistent-accountnpx cap syncyarn add @capgo/capacitor-persistent-accountnpx cap syncpnpm add @capgo/capacitor-persistent-accountnpx cap syncbun add @capgo/capacitor-persistent-accountnpx cap syncDukungan Platform
Section titled “Dukungan Platform”- iOS: Menggunakan iOS Keychain Services untuk penyimpanan yang aman dan persisten
- Android: Menggunakan Android Account Manager atau shared preferences dengan backup
Contoh Penggunaan
Section titled “Contoh Penggunaan”import { PersistentAccount } from '@capgo/capacitor-persistent-account';
// Define your account data structureinterface UserAccount { userId: string; username: string; email: string; preferences: { theme: string; notifications: boolean; };}
// Save account dataconst accountData: UserAccount = { userId: '12345', username: 'john_doe', email: 'john@example.com', preferences: { theme: 'dark', notifications: true }};
await PersistentAccount.saveAccount({ data: accountData });
// Read account dataconst result = await PersistentAccount.readAccount();if (result.data) { const account = result.data as UserAccount; console.log('Restored account:', account.username);} else { console.log('No account data found');}Referensi API
Section titled “Referensi API”saveAccount(options)
Section titled “saveAccount(options)”saveAccount(options: { data: unknown }) => Promise<void>Simpan data akun dengan aman ke penyimpanan persisten.
| Param | Type |
|---|---|
options | { data: unknown } |
readAccount()
Section titled “readAccount()”readAccount() => Promise<{ data: unknown | null }>Ambil data akun yang tersimpan.
Returns: Promise<{ data: unknown | null }>
Implementasi Praktis
Section titled “Implementasi Praktis”Contoh Layanan Auth Lengkap
Section titled “Contoh Layanan Auth Lengkap”import { PersistentAccount } from '@capgo/capacitor-persistent-account';
interface UserAccount { userId: string; username: string; email: string; authToken?: string; preferences: { theme: string; language: string; notifications: boolean; };}
class AuthService { // Save user account after login async saveUserAccount(user: UserAccount) { try { await PersistentAccount.saveAccount({ data: user }); console.log('User account saved successfully'); } catch (error) { console.error('Failed to save account:', error); throw error; } }
// Restore user account on app start async restoreUserAccount(): Promise<UserAccount | null> { try { const result = await PersistentAccount.readAccount();
if (result.data) { const account = result.data as UserAccount; console.log('Restored user account:', account.username); return account; }
console.log('No saved account found'); return null; } catch (error) { console.error('Failed to restore account:', error); return null; } }
// Update user preferences async updatePreferences(preferences: Partial<UserAccount['preferences']>) { const account = await this.restoreUserAccount();
if (account) { const updatedAccount: UserAccount = { ...account, preferences: { ...account.preferences, ...preferences } };
await this.saveUserAccount(updatedAccount); } }
// Clear account data (on logout) async clearAccount() { try { await PersistentAccount.saveAccount({ data: null }); console.log('Account data cleared'); } catch (error) { console.error('Failed to clear account:', error); } }}
// Usageconst authService = new AuthService();
// On loginawait authService.saveUserAccount({ userId: '12345', username: 'john_doe', email: 'john@example.com', authToken: 'abc123xyz', preferences: { theme: 'dark', language: 'en', notifications: true }});
// On app startconst savedAccount = await authService.restoreUserAccount();if (savedAccount) { // User was previously logged in console.log('Welcome back,', savedAccount.username);}
// Update preferencesawait authService.updatePreferences({ theme: 'light', notifications: false});
// On logoutawait authService.clearAccount();Inisialisasi Aplikasi dengan Pemulihan Akun
Section titled “Inisialisasi Aplikasi dengan Pemulihan Akun”import { PersistentAccount } from '@capgo/capacitor-persistent-account';
async function initializeApp() { try { // Try to restore saved account const result = await PersistentAccount.readAccount();
if (result.data) { const account = result.data as UserAccount;
// Validate token is still valid const isValid = await validateAuthToken(account.authToken);
if (isValid) { // Restore user session setCurrentUser(account); navigateToHome(); } else { // Token expired, show login navigateToLogin(); } } else { // No saved account, show login navigateToLogin(); } } catch (error) { console.error('Failed to initialize app:', error); navigateToLogin(); }}
// Call on app startinitializeApp();Sinkronisasi dengan Backend
Section titled “Sinkronisasi dengan Backend”import { PersistentAccount } from '@capgo/capacitor-persistent-account';
async function syncAccountWithBackend() { const result = await PersistentAccount.readAccount();
if (result.data) { const localAccount = result.data as UserAccount;
try { // Fetch latest account data from server const response = await fetch(`/api/users/${localAccount.userId}`); const serverAccount = await response.json();
// Merge server data with local preferences const mergedAccount: UserAccount = { ...serverAccount, preferences: { ...serverAccount.preferences, ...localAccount.preferences // Local preferences take priority } };
// Save merged data await PersistentAccount.saveAccount({ data: mergedAccount });
return mergedAccount; } catch (error) { console.error('Failed to sync with backend:', error); // Return local account as fallback return localAccount; } }
return null;}Praktik Terbaik
Section titled “Praktik Terbaik”- Type Safety: Definisikan interface TypeScript yang jelas untuk data akun Anda
- Validasi: Selalu validasi data saat membaca dari penyimpanan persisten
- Penanganan Error: Implementasikan blok try-catch yang tepat untuk semua operasi
- Keamanan: Jangan simpan data sensitif seperti password dalam teks biasa
- Manajemen Token: Refresh token auth saat memulihkan akun
- Ukuran Data: Jaga agar data yang tersimpan tetap minimal untuk memastikan operasi baca/tulis yang cepat
- Pengecekan Null: Selalu periksa apakah data ada sebelum menggunakannya
- Strategi Backup: Pertimbangkan sinkronisasi dengan backend untuk keamanan tambahan
Pertimbangan Keamanan
Section titled “Pertimbangan Keamanan”- Data akun disimpan menggunakan mekanisme penyimpanan aman khusus platform
- Data bertahan di seluruh uninstall dan reinstall aplikasi
- Pertimbangkan untuk mengenkripsi informasi sensitif sebelum menyimpan
- Implementasikan validasi data yang tepat saat membaca akun yang tersimpan
- Ikuti panduan platform untuk penanganan data pengguna
- Gunakan token autentikasi dengan kedaluwarsa untuk keamanan
- Bersihkan data akun dengan tepat saat pengguna logout
Implementasi Platform
Section titled “Implementasi Platform”- Memanfaatkan iOS Keychain Services untuk penyimpanan yang aman dan persisten
- Data bertahan melalui penghapusan aplikasi dan pemulihan perangkat
- Dilindungi oleh mekanisme keamanan iOS
Android
Section titled “Android”- Menggunakan Android Account Manager atau shared preferences dengan backup
- Mempertahankan data di seluruh reinstall aplikasi dan migrasi perangkat
- Dilindungi oleh keamanan sistem Android
Kasus Penggunaan
Section titled “Kasus Penggunaan”- User Onboarding: Pertahankan progres pengguna melalui reinstall aplikasi
- Pemulihan Akun: Pulihkan sesi pengguna setelah pembaruan aplikasi
- Penyimpanan Preferensi: Pertahankan pengaturan dan konfigurasi pengguna
- Aplikasi Offline-First: Simpan data pengguna penting secara lokal
- Manajemen Sesi: Jaga agar pengguna tetap login di seluruh restart aplikasi
- Migrasi Perangkat: Transfer data pengguna ke perangkat baru