Interface Offline Files.
Interface Offline Files.
← Tous les guides natifs

Xodera Plugins · Bubble Native

Xodera Offline Files Native

Gardez les pièces jointes de rapport et fichiers choisis sur l’appareil, retrouvez-les plus tard et partagez une copie choisie.

Guides bêta publics · instructions Haptics dans sa fiche Bubble

Offre bêta publique : installation Bubble gratuite · essai de 7 jours avec carte, puis 1,50 USD/mois par plugin/projet.

Documentation révisée 6 novembre 2026

Exemples pratiques

Préparer plusieurs pièces jointes locales avant un rapport

Le formulaire doit montrer les fichiers choisis et permettre d’en garder une copie gérée avant l’envoi vers un stockage.

`accepted_mime_types_json = your allowed MIME list` ; `multiple = yes` ; définissez `max_files`, `max_file_bytes` et un compte/rapport `document_context`.

Pick files → vérifier noms et tailles → Save selection locally. Votre formulaire garde les IDs jusqu’à son workflow Envoyer, qui téléverse les fichiers approuvés.

Affichez `selection_count`, `file_names`, `file_sizes` et `saved_file_ids`. La copie gérée conserve le fichier original de l’appelant.

L’annulation du sélecteur ne soumet pas le rapport. Sur `files_error`, gardez les IDs déjà réussis et affichez `error_code`. Une URI locale ne suffit pas à créer une pièce jointe cloud.

Les fichiers restent sur cet appareil jusqu’à un partage ou envoi séparé.

Conserver un export local de l’éditeur photo ou du recorder

Un fichier généré peut se trouver dans un emplacement temporaire ; l’app a besoin d’une copie gérée explicite.

`source_uri = the local output of a separately accepted editor/recorder` ; liez son vrai `display_name` et `mime_type` ; utilisez le même `document_context` du propriétaire.

Load local source → vérifier les métadonnées → Save selection locally. Gardez l’ID dans le bon appareil et contexte, puis appelez Restore saved file avec cet ID précis.

Utilisez `file_id`, `local_uri`, `size_bytes` et `is_saved_locally`. `file_restored` distingue une restauration achevée d’une simple demande.

Refusez une URL HTTP comme source locale. Si la source a disparu ou si la restauration échoue, affichez `error_code` et conservez l’enregistrement métier pour la reprise.

Les fichiers restent sur cet appareil jusqu’à un partage ou envoi séparé.

Partager un reçu ou un export local avec la feuille système

L’app doit transmettre le fichier choisi à la feuille de partage de l’appareil, sans inventer d’URL publique.

`selected_file_id = the exact managed copy chosen from your app’s saved-file list` ; son nom et MIME décrivent le vrai fichier local.

List saved files → Restore saved file → Share selected file après un appui sur Partager. Gardez la copie jusqu’à une demande explicite de Delete saved copy.

Utilisez `share_status` et `share_sheet_closed` pour mettre à jour l’interface après fermeture. Conservez l’ID pour un nouveau partage volontaire.

Une feuille fermée ne prouve pas la livraison d’un email ou d’un message. Gérez annulation et `files_error` sans annoncer une livraison réussie.

Les fichiers restent sur cet appareil jusqu’à un partage ou envoi séparé.

Ce qui fonctionne maintenant

Bêta publique. Utilisez les commandes et actions documentées ; testez les formats, les autorisations et le comportement dans votre propre app native. L’aperçu web ne valide pas les résultats sur appareil.

Construire le workflow

Utilisez les actions bêta disponibles ci-dessous et testez le résultat sur vos appareils cibles.

Les exemples utilisent des fiches comme Lesson, Message et Order. Remplacez-les par vos types de données et noms d’éléments. Utilisez vos propres fichiers à la place des adresses d’exemple.

  1. Renseignez document_context = Current User's unique id, ou une valeur stable pour le compte et le rapport. Choisissez accepted_mime_types_json, max_files et max_file_bytes.

  2. Lancez Pick files, ou Load local source pour un fichier lisible créé par Photo Editor ou Recorder. Après selection_changed, lisez les listes correspondantes ; Select picked file choisit un index.

  3. Lancez Save selection locally. Après files_saved, gardez saved_file_ids dans la fiche de pièce jointe locale. List saved files affiche les copies ; Restore saved file ouvre l’ID choisi.

  4. Share selected file ouvre le menu système. share_sheet_closed indique seulement sa fermeture. Delete saved copy demande l’ID choisi et confirm=yes.

Diagramme de flux — pas une capture d’écran d’application · SVG

Configurer une fois

Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins. Choisissez Xodera Offline Files Native, copiez sa clé, puis ouvrez Bubble → Plugins → Xodera Offline Files Native et collez-la dans licensing_api_key. Enregistrez une fois, puis utilisez les actions ci-dessous. Chaque plugin de chaque projet possède sa propre clé.

Utilisez une app native ayant accès aux fichiers choisis. Donnez un document_context stable au compte ou rapport pour regrouper correctement ses fichiers.

Configurer une fois
  1. Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins.
  2. Choisissez ce plugin et copiez sa clé de projet.
  3. Ouvrez Bubble → Plugins → ce plugin. Collez sa clé de projet dans licensing_api_key et enregistrez.
  4. Ajoutez l’élément, choisissez vos données et construisez le workflow ci-dessous.
  5. Dans le tableau de bord, vérifiez et confirmez l’essai de 7 jours avec carte pour ce plugin. Il coûte ensuite 1,50 USD/mois par projet, développement et production inclus. Annulez avant la fin de l’essai pour éviter le premier débit.
Installation et abonnement

Pour Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit et Haptics : installation Bubble gratuite, essai de 7 jours avec carte, puis 1,50 USD par mois, par plugin et projet. Développement et production inclus, sans plafond d’opérations. Les limites de fichier et de fonction restent applicables. Vérifiez facturation et annulation avant confirmation. Les autres plugins ne sont pas ouverts à l’achat.

Enregistrer le résultat dans votre app

Exemple LocalAttachment : owner, document_context, ID du fichier sauvegardé, display_name, mime_type et size_bytes. Cet ID fonctionne seulement sur le même appareil et pour le même compte ou rapport. Pour une pièce jointe en ligne, utilisez un autre workflow d’envoi et gardez sa référence de fichier.

Échec, annulation et reprise

Un sélecteur annulé donne operation_cancelled ; le formulaire n’est pas envoyé. Tant que native_pending=yes, attendez la fermeture du sélecteur ou du partage. Clear session efface la sélection mais conserve les copies sauvegardées. Si un fichier manque, proposez de le choisir à nouveau.

Fonctions et limites

Sélectionnez les fichiers 1–20 en une fois. Limite par fichier : 1 octet–256 MiB, avec une limite inférieure si vous le choisissez. Les filtres de type de fichier ne vérifient pas les virus. Les ID et chemins de fichiers de l'appareil ne fonctionnent pas comme liens de téléchargement cloud. Les copies locales ne sont pas un stockage chiffré et peuvent être perdues si les données de l'application sont supprimées.

Réglages, actions et résultats

Utilisez ces noms dans Bubble. Les fonctionnalités prévues sont marquées séparément.

Paramètres bêta disponibles

Réglages de l’élément

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

États

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 (liste)file_uris · text (liste)file_names · text (liste)file_mime_types · text (liste)file_sizes · number (liste)files_json · textsaved_count · numbersaved_file_ids · text (liste)saved_file_uris · text (liste)saved_file_names · text (liste)saved_file_mime_types · text (liste)saved_file_sizes · number (liste)saved_files_json · textinvalid_saved_count · numbershare_status · texterror_code · text

Événements

selection_changedfiles_savedlist_loadedfile_restoredfile_deletedshare_sheet_closedoperation_cancelledfiles_error

Actions et paramètres

Pick filesLoad local sourceSelect picked fileSave selection locallyList saved filesRestore saved fileDelete saved copyShare selected fileCancel operationClear session
Réglages de l’élément · 16
source_uritext · Défaut: ""
Valeur exemplefile:///app-cache/report.pdf
Expression Bubble exemplePhoto Editor's output_uri
Emplacement lisible sur cet appareil, fourni par votre sélecteur ou un autre plugin.
display_nametext · Défaut: ""
Valeur exemplereport-photo.jpg
Expression Bubble exempleSelected Attachment's display_name
Utilisez la valeur de la fiche courante et les limites ci-dessous.
mime_typetext · Défaut: ""
Valeur exempleimage/jpeg
Expression Bubble exemplePhoto Editor's output_mime
Utilisez la valeur de la fiche courante et les limites ci-dessous.
document_contexttext · Défaut: "default"
Valeur exemple<current-user-id>
Expression Bubble exempleCurrent User's unique id
Valeur stable pour ce compte ou cette fiche. Réutilisez-la pour restaurer ses fichiers ou brouillons.
selected_file_idtext · Défaut: ""
Valeur exemple<returned saved file ID>
Expression Bubble exempleSelected LocalAttachment's local_file_id
Utilisez la valeur de la fiche courante et les limites ci-dessous.
accepted_mime_types_jsontext · Défaut: "[\"*/*\"]"
Valeur exemple["image/*","application/pdf"]
Expression Bubble exempleReport Settings' accepted_mime_types_json
Utilisez la valeur de la fiche courante et les limites ci-dessous.
multipleyes_no · Défaut: false
Valeur exempleyes
Expression Bubble exempleReport Settings' allow_multiple_attachments
Utilisez la valeur de la fiche courante et les limites ci-dessous.
copy_to_cacheyes_no · Défaut: true
Valeur exempleyes
Expression Bubble exempleReport Settings' copy_to_cache
Utilisez la valeur de la fiche courante et les limites ci-dessous.
max_filesnumber · Défaut: 20
Valeur exemple5
Expression Bubble exempleReport Settings' attachment_limit
Utilisez la valeur de la fiche courante et les limites ci-dessous.
max_file_bytesnumber · Défaut: 268435456
Valeur exemple10485760
Expression Bubble exempleReport Settings' max_attachment_bytes
Utilisez la valeur de la fiche courante et les limites ci-dessous.
is_activeyes_no · Défaut: true
Valeur exempleyes
Expression Bubble exempleGuideHost's view_is_active (your yes/no custom state)
yes tant que cette vue est ouverte ; no en la quittant pour arrêter la lecture ou l’action en cours.
disabledyes_no · Défaut: false
Valeur exempleno
Expression Bubble exempleGuideHost's is_busy (your yes/no custom state)
Désactivez l’élément si l’app est occupée ou l’action indisponible.
show_controlsyes_no · Défaut: true
Valeur exempleyes
Expression Bubble exempleApp Settings' show_editor_controls
Afficher ou masquer les commandes intégrées.
languagetext · Défaut: "auto"
Valeur exempleuk
Expression Bubble exempleCurrent User's preferred_language
Utilisez language=auto pour suivre une langue prise en charge sur l’appareil ou dans le navigateur. Saisissez un code de langue pris en charge pour la choisir explicitement.
ui_text_jsontext · Défaut: ""
Valeur exemple{}
Expression Bubble exempleApp Settings' player_labels_json (supported keys only)
JSON facultatif avec les libellés de boutons pris en charge. Laissez vide pour les textes intégrés.
titletext · Défaut: ""
Valeur exempleLesson 4 — review
Expression Bubble exempleSelected Lesson's name
Texte visible ; vide utilise le texte localisé prévu. Aucun identifiant secret.
Actions et paramètres · 10
Pick files

Aucun paramètre d’action

Load local source
source_uritext · Défaut: —
Valeur exemplefile:///app-cache/report.pdf
Expression Bubble exemplePhoto Editor's output_uri
Emplacement lisible sur cet appareil, fourni par votre sélecteur ou un autre plugin.
display_nametext · Défaut: —
Valeur exemplereport-photo.jpg
Expression Bubble exempleSelected Attachment's display_name
Utilisez la valeur de la fiche courante et les limites ci-dessous.
mime_typetext · Défaut: —
Valeur exempleimage/jpeg
Expression Bubble exemplePhoto Editor's output_mime
Utilisez la valeur de la fiche courante et les limites ci-dessous.
Select picked file
indexnumber · Défaut: —
Valeur exemple0
Expression Bubble exempleSelected row's current_source_index
Utilisez la valeur de la fiche courante et les limites ci-dessous.
Save selection locally

Aucun paramètre d’action

List saved files

Aucun paramètre d’action

Restore saved file
file_idtext · Défaut: —
Valeur exemple<returned saved file ID>
Expression Bubble exempleSelected LocalAttachment's local_file_id
Utilisez la valeur de la fiche courante et les limites ci-dessous.
Delete saved copy
file_idtext · Défaut: —
Valeur exemple<returned saved file ID>
Expression Bubble exempleSelected LocalAttachment's local_file_id
Utilisez la valeur de la fiche courante et les limites ci-dessous.
confirmyes_no · Défaut: —
Valeur exempleyes — explicit confirmation only
Expression Bubble exempleConfirm Checkbox is checked
Utilisez la valeur de la fiche courante et les limites ci-dessous.
Share selected file
dialog_titletext · Défaut: —
Valeur exempleShare attachment
Expression Bubble exempleSelected Report's share_title
Utilisez la valeur de la fiche courante et les limites ci-dessous.
utitext · Défaut: —
Valeur exemple""
Expression Bubble exempleEmpty unless your iOS integration supplies a proven UTI
Utilisez la valeur de la fiche courante et les limites ci-dessous.
Cancel operation

Aucun paramètre d’action

Clear session

Aucun paramètre d’action

États et événements

États

status · text

Résultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.

is_busy · yes_no

Une action est en cours. Attendez avant d’en lancer une autre.

native_pending · yes_no

Une action est en cours. Attendez avant d’en lancer une autre.

operation · text

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

selection_count · number

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

selected_index · number

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

file_id · text

Identifiant de cet élément ou de cette action. Gardez-le avec la fiche correspondante. Réutilisez le même identifiant de demande si le résultat est incertain.

local_uri · text

Emplacement du fichier sur cet appareil. Sauvegardez ou envoyez-le séparément pour le conserver en ligne.

display_name · text

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

mime_type · text

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

mime_source · text

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

size_bytes · number

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

is_saved_locally · yes_no

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

file_ids · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

file_uris · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

file_names · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

file_mime_types · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

file_sizes · number (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

files_json · text

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

saved_count · number

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

saved_file_ids · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

saved_file_uris · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

saved_file_names · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

saved_file_mime_types · text (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

saved_file_sizes · number (liste)

Liste des fichiers choisis. Le même index dans les autres listes désigne le même fichier.

saved_files_json · text

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

invalid_saved_count · number

Valeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.

share_status · text

Résultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.

error_code · text

Information sur l’erreur de la dernière action. Affichez un message utile et proposez la bonne nouvelle tentative.

Événements

selection_changed

À cet événement, lisez les états correspondants du même élément.

files_saved

À cet événement, lisez les états correspondants du même élément.

list_loaded

À cet événement, lisez les états correspondants du même élément.

file_restored

À cet événement, lisez les états correspondants du même élément.

file_deleted

À cet événement, lisez les états correspondants du même élément.

share_sheet_closed

À cet événement, lisez les états correspondants du même élément.

operation_cancelled

À cet événement, lisez les états correspondants du même élément.

files_error

À cet événement, lisez les états correspondants du même élément.

Questions des développeurs

Share signifie-t-il envoyé ?

Non, aucune preuve fiable de réception. Affichez la fermeture du menu.

Comment fonctionne l’abonnement ?

Pour Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit et Haptics : installation Bubble gratuite, essai de 7 jours avec carte, puis 1,50 USD par mois, par plugin et projet. Développement et production inclus, sans plafond d’opérations. Les limites de fichier et de fonction restent applicables. Vérifiez facturation et annulation avant confirmation. Les autres plugins ne sont pas ouverts à l’achat.

Guides associés

Pour obtenir de l’aide, indiquez le plugin, l’appareil, l’action essayée et le résultat. Utilisez un exemple sans données personnelles. Ne partagez jamais votre clé ni vos fichiers privés.