Offline Files 界面。
Offline Files 界面。
← 所有原生指南

Xodera Plugins · Bubble Native

Xodera Offline Files Native

在设备上保留报告附件和已选择的文件,稍后恢复它们,并允许用户分享所选副本。

Public beta guides · Haptics instructions are in its Bubble listing

Public beta offer: free Bubble install · 7-day card trial, then US$1.50/month per plugin/project.

文档审阅日期:2026年11月6日

实用示例

在提交报告前准备多个本地附件

表单需要显示已选择的文件,并让用户在任何云提交之前保留受管理的副本。

`accepted_mime_types_json = your allowed MIME list`;`multiple = yes`;设置 `max_files`、`max_file_bytes` 和账户/报告 `document_context`。

Pick files → 检查所选的名称/大小 → Save selection locally。您的表单保留生成的文件 ID,直至其单独的提交工作流上传已批准的文件。

使用 `selection_count`、`file_names`、`file_sizes` 和 `saved_file_ids` 渲染附件核对列表。已保存的受管副本保留调用者的原始内容。

已取消的选择器并非已提交的报告。在 `files_error` 上,保留已接受的本地 ID 并显示 `error_code`;绝不仅凭本地 URI 创建云附件。

文件会保留在此设备上,直至单独共享或上传。

保留照片编辑器或录音器的输出以供后续使用

生成的本地文件可能位于临时位置;应用需要显式的受管副本。

`source_uri = the local output of a separately accepted editor/recorder`;绑定其真实的 `display_name` 和 `mime_type`;使用相同所有者的 `document_context`。

Load local source → 检查元数据 → Save selection locally。仅在匹配的设备/上下文中存储返回的文件 ID,然后在需要时使用该确切 ID 执行 Restore saved file。

使用 `file_id`、`local_uri`、`size_bytes` 和 `is_saved_locally`;使用 `file_restored` 将已完成的恢复与仅请求恢复区分开来。

拒绝将远程 HTTP URL 视为本地来源。如果来源消失或恢复失败,显示 `error_code` 并保留原始应用记录以便恢复。

文件会保留在此设备上,直至单独共享或上传。

允许用户共享应用生成的本地收据或导出文件

应用应将选定的本地文件交给设备的系统分享面板,而不是创建公共 URL。

`selected_file_id = the exact managed copy chosen from your app’s saved-file list`;其名称和 MIME 描述真实的本地文件。

List saved files → Restore saved file → 用户点击 Share 后,执行 Share selected file。保留已保存的副本,直至他们明确选择 Delete saved copy。

在系统分享面板关闭后使用 `share_status` 和 `share_sheet_closed` 更新 UI。保留文件 ID 以便再次有意共享。

系统分享面板已关闭,并不能证明电子邮件/消息已送达。处理取消和 `files_error` 时,不得宣称收件人已成功收到文件。

文件会保留在此设备上,直至单独共享或上传。

当前可用功能

Public beta. Use the documented controls and actions; test supported formats, permissions and device behavior in your own native app. Browser preview does not validate native device output.

构建工作流

使用下面可用的测试版操作,并在目标设备上测试结果。

这些示例使用了诸如 Lesson、Message 和 Order 的应用记录。请将它们替换为您自己的数据类型和元素名称。示例媒体地址必须替换为您自己的文件。

  1. 设置 document_context = Current User's unique id,或为账户和报告设置稳定值。选择 accepted_mime_types_json、max_files 和 max_file_bytes。

  2. 运行 Pick files,或使用 Load local source 来读取由照片编辑器或录音器生成的可读文件。selection_changed 之后,读取匹配的文件列表;Select picked file 选择一个索引。

  3. 运行 Save selection locally。files_saved 之后,将 saved_file_ids 保存在应用的本地附件记录中。List saved files 显示已保存的副本;Restore saved file 打开所选的已保存 ID。

  4. Share selected file 打开系统共享菜单。share_sheet_closed 仅表示菜单已关闭。Delete saved copy 需要所选的 ID 和 confirm=yes。

工作流图 — 不是应用截图

一次性配置

在 BestPlugins → Dashboard → Plugins 中创建或选择您的 Bubble 应用项目。选择 Xodera Offline Files Native,复制其密钥,然后打开 Bubble → Plugins → Xodera Offline Files Native 并粘贴到 licensing_api_key。保存一次;随后使用以下操作。每个项目中的每个插件都有其自己的密钥。

使用具有所选文件访问权限的原生应用。为账户或报告设置稳定的 document_context,以便其已保存的文件正确分组。

一次性配置
  1. 在 BestPlugins → Dashboard → Plugins 中创建或选择您的 Bubble 应用项目。
  2. 选择此插件并复制其项目密钥。
  3. Open Bubble → Plugins → this plugin. Paste its project key into licensing_api_key and save.
  4. 添加元素,选择您的应用数据并构建以下工作流。
  5. In the dashboard, review and confirm the 7-day card trial for this plugin. It then costs US$1.50/month per app project, including development and production. Cancel before the trial ends to avoid the first charge.
安装和订阅

For Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit and Haptics: free Bubble installation, a 7-day trial with a card, then US$1.50 per month per plugin and app project. Development and production are included, with no operation cap. File-size and feature limits still apply. Review billing and cancellation before confirming. Other plugins remain unavailable for purchase.

将结果保存到您的应用中

示例 LocalAttachment:所有者、document_context、已保存的文件 ID、display_name、mime_type 和 size_bytes。此 ID 仅在同一设备且同一账户或报告下有效。对于在线附件,请使用单独的工作流上传文件并保存返回的在线文件引用。

失败、取消与恢复

取消的选择器返回 operation_cancelled;它不会提交表单。在 native_pending=yes 时,请等待文件选择器或共享菜单关闭后再打开另一个。Clear session 清除当前选择但保留已保存的副本。如果文件缺失,请让用户重新选择。

功能与限制

一次性选择 1–20 文件。单文件限制:1 字节–256 MiB,若自行选择则可设更低限制。文件类型过滤器不会对文件进行病毒检查。设备文件 ID 和路径不能用作云下载链接。本地副本不是加密存储,若应用数据被删除可能会丢失。

设置、操作和结果

在 Bubble 中使用这些名称。计划中的功能会单独标记。

可用的测试版设置

元素设置

source_uri · textdisplay_name · textmime_type · textdocument_context · textselected_file_id · textaccepted_mime_types_json · textmultiple · yes_nocopy_to_cache · yes_nomax_files · numbermax_file_bytes · numberis_active · yes_nodisabled · yes_noshow_controls · yes_nolanguage · textui_text_json · texttitle · text

状态

status · textis_busy · yes_nonative_pending · yes_nooperation · textselection_count · numberselected_index · numberfile_id · textlocal_uri · textdisplay_name · textmime_type · textmime_source · textsize_bytes · numberis_saved_locally · yes_nofile_ids · text (列表)file_uris · text (列表)file_names · text (列表)file_mime_types · text (列表)file_sizes · number (列表)files_json · textsaved_count · numbersaved_file_ids · text (列表)saved_file_uris · text (列表)saved_file_names · text (列表)saved_file_mime_types · text (列表)saved_file_sizes · number (列表)saved_files_json · textinvalid_saved_count · numbershare_status · texterror_code · text

事件

selection_changedfiles_savedlist_loadedfile_restoredfile_deletedshare_sheet_closedoperation_cancelledfiles_error

操作及其输入

Pick filesLoad local sourceSelect picked fileSave selection locallyList saved filesRestore saved fileDelete saved copyShare selected fileCancel operationClear session
元素设置 · 16
source_uritext · 默认: ""
示例值file:///app-cache/report.pdf
示例 Bubble 表达式Photo Editor's output_uri
此设备上可读的文件位置,由您的选择器或其他插件返回。
display_nametext · 默认: ""
示例值report-photo.jpg
示例 Bubble 表达式Selected Attachment's display_name
使用当前业务记录的值;根据以下限制进行验证。
mime_typetext · 默认: ""
示例值image/jpeg
示例 Bubble 表达式Photo Editor's output_mime
使用当前业务记录的值;根据以下限制进行验证。
document_contexttext · 默认: "default"
示例值<current-user-id>
示例 Bubble 表达式Current User's unique id
此账户或记录的稳定值。恢复其已保存的文件或草稿时使用相同的值。
selected_file_idtext · 默认: ""
示例值<returned saved file ID>
示例 Bubble 表达式Selected LocalAttachment's local_file_id
使用当前业务记录的值;根据以下限制进行验证。
accepted_mime_types_jsontext · 默认: "[\"*/*\"]"
示例值["image/*","application/pdf"]
示例 Bubble 表达式Report Settings' accepted_mime_types_json
使用当前业务记录的值;根据以下限制进行验证。
multipleyes_no · 默认: false
示例值yes
示例 Bubble 表达式Report Settings' allow_multiple_attachments
使用当前业务记录的值;根据以下限制进行验证。
copy_to_cacheyes_no · 默认: true
示例值yes
示例 Bubble 表达式Report Settings' copy_to_cache
使用当前业务记录的值;根据以下限制进行验证。
max_filesnumber · 默认: 20
示例值5
示例 Bubble 表达式Report Settings' attachment_limit
使用当前业务记录的值;根据以下限制进行验证。
max_file_bytesnumber · 默认: 268435456
示例值10485760
示例 Bubble 表达式Report Settings' max_attachment_bytes
使用当前业务记录的值;根据以下限制进行验证。
is_activeyes_no · 默认: true
示例值yes
示例 Bubble 表达式GuideHost's view_is_active (your yes/no custom state)
在此视图打开时设为是。离开时设为否,以便停止播放或当前工作。
disabledyes_no · 默认: false
示例值no
示例 Bubble 表达式GuideHost's is_busy (your yes/no custom state)
当应用忙碌或此操作不可用时禁用该元素。
show_controlsyes_no · 默认: true
示例值yes
示例 Bubble 表达式App Settings' show_editor_controls
显示或隐藏内置控件。
languagetext · 默认: "auto"
示例值uk
示例 Bubble 表达式Current User's preferred_language
将 language=auto 设置为跟随支持的设备或浏览器语言。输入支持的语言代码以明确选择。
ui_text_jsontext · 默认: ""
示例值{}
示例 Bubble 表达式App Settings' player_labels_json (supported keys only)
可选的 JSON,包含支持的按钮标签。留空则使用内置文本。
titletext · 默认: ""
示例值Lesson 4 — review
示例 Bubble 表达式Selected Lesson's name
可见的应用文本;留空时使用内置的本地化文案(如支持)。请勿填入凭证。
操作及其输入 · 10
Pick files

无操作参数

Load local source
source_uritext · 默认: —
示例值file:///app-cache/report.pdf
示例 Bubble 表达式Photo Editor's output_uri
此设备上可读的文件位置,由您的选择器或其他插件返回。
display_nametext · 默认: —
示例值report-photo.jpg
示例 Bubble 表达式Selected Attachment's display_name
使用当前业务记录的值;根据以下限制进行验证。
mime_typetext · 默认: —
示例值image/jpeg
示例 Bubble 表达式Photo Editor's output_mime
使用当前业务记录的值;根据以下限制进行验证。
Select picked file
indexnumber · 默认: —
示例值0
示例 Bubble 表达式Selected row's current_source_index
使用当前业务记录的值;根据以下限制进行验证。
Save selection locally

无操作参数

List saved files

无操作参数

Restore saved file
file_idtext · 默认: —
示例值<returned saved file ID>
示例 Bubble 表达式Selected LocalAttachment's local_file_id
使用当前业务记录的值;根据以下限制进行验证。
Delete saved copy
file_idtext · 默认: —
示例值<returned saved file ID>
示例 Bubble 表达式Selected LocalAttachment's local_file_id
使用当前业务记录的值;根据以下限制进行验证。
confirmyes_no · 默认: —
示例值yes — explicit confirmation only
示例 Bubble 表达式Confirm Checkbox is checked
使用当前业务记录的值;根据以下限制进行验证。
Share selected file
dialog_titletext · 默认: —
示例值Share attachment
示例 Bubble 表达式Selected Report's share_title
使用当前业务记录的值;根据以下限制进行验证。
utitext · 默认: —
示例值""
示例 Bubble 表达式Empty unless your iOS integration supplies a proven UTI
使用当前业务记录的值;根据以下限制进行验证。
Cancel operation

无操作参数

Clear session

无操作参数

状态和事件

状态

status · text

此操作的当前结果。保存成功前请使用匹配的完成事件。

is_busy · yes_no

工作仍在进行中。请在开始其他操作前等待。

native_pending · yes_no

工作仍在进行中。请在开始其他操作前等待。

operation · text

所选项目的当前值。请在相关事件后读取。

selection_count · number

所选项目的当前值。请在相关事件后读取。

selected_index · number

所选项目的当前值。请在相关事件后读取。

file_id · text

此项目或操作的标识符。请与对应的应用记录一起保存。重试不确定结果时使用相同的请求标识符。

local_uri · text

此设备上的文件位置。如果必须保持在线,请单独保存或上传文件。

display_name · text

所选项目的当前值。请在相关事件后读取。

mime_type · text

所选项目的当前值。请在相关事件后读取。

mime_source · text

所选项目的当前值。请在相关事件后读取。

size_bytes · number

所选项目的当前值。请在相关事件后读取。

is_saved_locally · yes_no

所选项目的当前值。请在相关事件后读取。

file_ids · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

file_uris · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

file_names · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

file_mime_types · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

file_sizes · number (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

files_json · text

所选项目的当前值。请在相关事件后读取。

saved_count · number

所选项目的当前值。请在相关事件后读取。

saved_file_ids · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

saved_file_uris · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

saved_file_names · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

saved_file_mime_types · text (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

saved_file_sizes · number (列表)

已选文件的列表。其他文件列表中相同索引的项指向同一文件。

saved_files_json · text

所选项目的当前值。请在相关事件后读取。

invalid_saved_count · number

所选项目的当前值。请在相关事件后读取。

share_status · text

此操作的当前结果。保存成功前请使用匹配的完成事件。

error_code · text

上一次操作的错误信息。显示有帮助的提示并提供相应的重试。

事件

selection_changed

当此事件发生时,从同一元素读取相关状态。

files_saved

当此事件发生时,从同一元素读取相关状态。

list_loaded

当此事件发生时,从同一元素读取相关状态。

file_restored

当此事件发生时,从同一元素读取相关状态。

file_deleted

当此事件发生时,从同一元素读取相关状态。

share_sheet_closed

当此事件发生时,从同一元素读取相关状态。

operation_cancelled

当此事件发生时,从同一元素读取相关状态。

files_error

当此事件发生时,从同一元素读取相关状态。

开发者常问问题

共享是否意味着“已发送”?

否。操作系统此处未提供可靠的收件人成功回执。显示“共享面板已关闭”。

订阅是如何运作的?

For Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit and Haptics: free Bubble installation, a 7-day trial with a card, then US$1.50 per month per plugin and app project. Development and production are included, with no operation cap. File-size and feature limits still apply. Review billing and cancellation before confirming. Other plugins remain unavailable for purchase.

相关指南

如需帮助,请告知我们您使用的插件和设备、尝试的操作以及发生的情况。请使用不含个人数据的示例。切勿分享您的密钥或私有文件。