安全存储

AppFramework 包含一个 Secure Storage QML 插件,允许 AppStudio 应用程序存储和访问敏感信息,例如凭据或令牌。 使用此插件,您的数据可以被加密并存储在系统提供的位置,其中数据仅可供您的应用访问。

在 Windows 设备上,这些值存储在凭据保险箱中。 在 macOS 和 iOS 上,这些值存储在系统密钥链中。 在 Android 上,这些值存储在 Android 密钥存储中。 在 Linux 上,这些值存储在您的系统设置的 keychain.ini 文件中。

要使用此功能,您必须包含以下 import 语句:

import ArcGIS.AppFramework.SecureStorage 1.0

有关此功能的示例,请参阅 ArcGIS AppStudioAppStudio 示例 GitHub 资料档案库中提供的示例应用程序。

存储字符串值

该插件中的 SecureStorage 组件是一个单例,这意味着,在使用它之前不需要对其进行实例化。 该组件由两种方法(一种用于执行值的存储,另一种用于执行值的检索)以及 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 方法时,请考虑其下列行为:

  • 密钥或值的最大长度取决于您的操作系统。 可以使用 maximumKeyLengthmaximumValueLength 属性来检查上述内容。 如果您要存储的密钥或值或两者的组合大于最大长度,请考虑对其进行分割然后分别存储。
  • 密钥不能为 null 或为空
  • 如果您使用相同的密钥两次,则与该密钥关联的前一值将被覆盖。
  • 为先前存在的密钥提供空值将移除密钥链中存在的密钥。
  • 如果在密钥中使用某些特殊字符(如斜线 (/)),Android 用户将遇到异常。
  • 如果 valuesetValue 方法失败,则会触发 onError 信号。

检索字符串值

SecureStorage 中的 value 方法是访问您的应用程序所存储字符串数据的唯一方法。如果提供的用户名已存储,则用以下修改版本替换以前代码示例中的用户名字段时,会使用 value 方法自动填充密码字段。

TextField {
    id: username
    placeholderText: "Username"

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