本文へスキップ
Unveilydocs

ネイティブストレージ

安全なネイティブのキーバリューストレージ — TEMP / PERM / SECURE の 3 段階

概要

Storage Bridge を使うと、ウェブからネイティブのストレージにデータを読み書きできます。Android と iOS で同じ JS API を使用します。

タイプ保存方式削除されるタイミング用途
TEMPインメモリ (Map)アプリ再起動時セッション中の一時的な状態
PERMSharedPreferences (Android) / UserDefaults (iOS)アプリ削除または clearData 呼び出し時ユーザー設定、機微でないデータ
SECUREEncryptedSharedPreferences (Android) / Keychain (iOS)アプリ削除または clearSecureData 呼び出し時トークン、セッション、PII などの機微データ

ストレージはアプリごとに分離されます。他のアプリからはアクセスできません。

SECURE ティア: Android は AndroidKeyStore ベースの AES256-GCM 暗号化、iOS は Secure Enclave ベースの Keychain を使用します。どちらのプラットフォームでもハードウェアセキュリティモジュールで保護されます。


API

saveData

データを保存します。

window.unveilyBridge.saveData(key, value, type)
// type: "TEMP" | "PERM" | "SECURE"
// 一時保存 (セッション中のみ維持)
window.unveilyBridge.saveData("sessionStep", "2", "TEMP");

// 永久保存 (アプリ再起動後も維持)
window.unveilyBridge.saveData("theme", "dark", "PERM");

// 保安保存 (暗号化 — トークン、機微情報)
window.unveilyBridge.saveData("accessToken", "eyJ...", "SECURE");

loadData

データを同期的に読み込みます。SECURE タイプには使用不可loadSecureData を使用してください。

const value = window.unveilyBridge.loadData(key, type)
// type: "TEMP" | "PERM"
// 戻り値: 保存された文字列、なければ ""
const theme = window.unveilyBridge.loadData("theme", "PERM");
if (theme === "dark") applyDarkMode();

loadSecureData

SECURE ストレージから非同期で読み込みます。

window.unveilyBridge.loadSecureData(key, callbackFunctionName)
window.unveilyBridge.loadSecureData("accessToken", "onTokenLoaded");

function onTokenLoaded(result) {
  if (result.success) {
    console.log("トークン:", result.value);
  } else {
    console.log("保存されたトークンなし");
  }
}

コールバックのレスポンス構造

{ "success": true,  "value": "eyJ..." }
{ "success": false, "value": null }

loadData(key, "SECURE") は常に空文字列を返します。SECURE ストレージの読み込みには必ず loadSecureData を使用してください。


removeData

特定のキーのデータを削除します。

window.unveilyBridge.removeData(key, type)
// type: "TEMP" | "PERM" | "SECURE"
window.unveilyBridge.removeData("theme", "PERM");
window.unveilyBridge.removeData("accessToken", "SECURE");

clearData

TEMP / PERM 全体を初期化します。

window.unveilyBridge.clearData(type)
// type: "TEMP" | "PERM" | "ALL"
window.unveilyBridge.clearData("TEMP");   // 一時保存をすべて削除
window.unveilyBridge.clearData("PERM");   // 永久保存をすべて削除
window.unveilyBridge.clearData("ALL");    // TEMP + PERM をすべて削除

clearData は SECURE ストレージには影響しません。SECURE データを削除するには clearSecureData を使用してください。


clearSecureData

SECURE ストレージから特定のキーを削除します。

window.unveilyBridge.clearSecureData(keysJson)
// keysJson: 削除するキー一覧の JSON 配列文字列
// ログアウト時に認証関連のキーを削除
window.unveilyBridge.clearSecureData(JSON.stringify(["accessToken", "refreshToken"]));

使用パターン

ログイン / ログアウト

// ログイン成功後 — トークンは SECURE に保存
async function onLoginSuccess(token, user) {
  window.unveilyBridge.saveData("accessToken", token, "SECURE");
  window.unveilyBridge.saveData("userProfile", JSON.stringify(user), "PERM");
}

// アプリ起動時 — SECURE は非同期で読み込む
function checkAuth() {
  window.unveilyBridge.loadSecureData("accessToken", "onAuthChecked");
}

function onAuthChecked(result) {
  if (result.success && result.value) {
    // 自動ログイン処理
    initApp(result.value);
  } else {
    showLoginScreen();
  }
}

// ログアウト時 — 認証データを削除
function logout() {
  window.unveilyBridge.clearSecureData(JSON.stringify(["accessToken", "refreshToken"]));
  window.unveilyBridge.removeData("userProfile", "PERM");
}

グルー準備後の初期化

window.addEventListener("unveilyGlueReady", () => {
  // ブリッジ準備完了後にストレージへアクセス
  checkAuth();
});

On this page