Memulai
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