セキュア ストレージ

AppFramework には Secure Storage QML プラグインが組み込まれているため、AppStudio アプリを使用して、認証情報やトークンなどの機密情報を保存したり、これらの機密情報にアクセスしたりすることができます。 このプラグインを使用することで、データはシステム指定の場所に暗号化および保存され、このデータにはアプリからのみアクセスできます。

Windows デバイスでは、これらの値は資格情報保管ボックスに保存されます。 macOS と iOS では、これらの値はシステム キーチェーンに保存されます。 Android では、これらの値は Android Keystore に保存されます。 Linux では、これらの値はシステム設定の keychain.ini ファイルに保存されます。

この機能を使用するには、まず次のインポート ステートメントを含める必要があります。

import ArcGIS.AppFramework.SecureStorage 1.0

この機能の例については、ArcGIS AppStudio または AppStudio サンプル GitHub リポジトリにあるサンプル アプリをご覧ください。

文字列値の保存

プラグイン内の SecureStorage コンポーネントはシングルトンです。このため、使用前にインスタンス化する必要はありません。 このコンポーネントは、値の保存を実行するメソッドと、値の取得を実行するメソッドの 2 つのメソッドから構成され、onError シグナルも同様です。

setValue メソッドは、キーと値のペアをストレージに保存します。 次のサンプル コードは、このメソッドの機能を示しており、後で使用できるようにユーザー名とパスワードをストレージに保存します。 隣接するチェックボックスがオンでない限り、パスワードのフィールドに入力されたデータは非表示になります。

TextField {
    id: username
    placeholderText: "Username"
}

TextField {
    id: password
    placeholderText: "Password"
    anchors.left: username.right
    echoMode: passwordVisible.checked === true ? TextInput.Normal : TextInput.PasswordEchoOnEdit
}

CheckBox {
    id: passwordVisible
    anchors.left: password.right
}

Button {
    id: secureButton
    text: qsTr("Store Combination")
    anchors.top: username.bottom
    onClicked: {
        SecureStorage.setValue(username.text,password.text)
    }
}

setValue メソッドを使用する場合は、このメソッドの次の挙動を考慮してください。

  • キーまたは値の最大長は、オペレーティング システムに基づきます。 これらは、maximumKeyLength および maximumValueLength プロパティで確認できます。 保存するキーや値、またはそれらの組み合わせが最大長より大きい場合は、分割してから別々に保存することを検討してください。
  • キーは NULL または空にできません。
  • 同じキーを 2 回使用すると、そのキーに関連付けられた以前の値が上書きされます。
  • 既存のキーに空の値を指定すると、キーチェーンに存在するキーが削除されます。
  • Android では、特定の特殊文字 (スラッシュ (/) など) がキーに使用された場合、例外が発生します。
  • value または setValue メソッドが正常に実行されないと、onError シグナルがトリガーされます。

文字列値の取得

SecureStorage 内の value メソッドは、アプリに保存されている文字列データにアクセスできる唯一の手段です。上記のサンプル コードにあるユーザー名フィールドを次の修正バージョンに置き換えると、入力したユーザー名がすでに保存されている場合に、value メソッドでパスワード フィールドが自動的に入力されます。

TextField {
    id: username
    placeholderText: "Username"

    onEditingFinished: {
        password.text = SecureStorage.value(username.text)
    }
}

このトピックの内容
  1. 文字列値の保存
  2. 文字列値の取得