
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.
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.
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.
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.
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.
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
- Créez ou choisissez votre projet Bubble dans BestPlugins → Dashboard → Plugins.
- Choisissez ce plugin et copiez sa clé de projet.
- Ouvrez Bubble → Plugins → ce plugin. Collez sa clé de projet dans licensing_api_key et enregistrez.
- Ajoutez l’élément, choisissez vos données et construisez le workflow ci-dessous.
- 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_errorActions et paramètres
Pick filesLoad local sourceSelect picked fileSave selection locallyList saved filesRestore saved fileDelete saved copyShare selected fileCancel operationClear sessionRéglages de l’élément · 16
source_uritext · Défaut: ""- Valeur exemple
file:///app-cache/report.pdf - Expression Bubble exemple
Photo Editor's output_uri - Emplacement lisible sur cet appareil, fourni par votre sélecteur ou un autre plugin.
display_nametext · Défaut: ""- Valeur exemple
report-photo.jpg - Expression Bubble exemple
Selected Attachment's display_name - Utilisez la valeur de la fiche courante et les limites ci-dessous.
mime_typetext · Défaut: ""- Valeur exemple
image/jpeg - Expression Bubble exemple
Photo 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 exemple
Current 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 exemple
Selected 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 exemple
Report Settings' accepted_mime_types_json - Utilisez la valeur de la fiche courante et les limites ci-dessous.
multipleyes_no · Défaut: false- Valeur exemple
yes - Expression Bubble exemple
Report Settings' allow_multiple_attachments - Utilisez la valeur de la fiche courante et les limites ci-dessous.
copy_to_cacheyes_no · Défaut: true- Valeur exemple
yes - Expression Bubble exemple
Report Settings' copy_to_cache - Utilisez la valeur de la fiche courante et les limites ci-dessous.
max_filesnumber · Défaut: 20- Valeur exemple
5 - Expression Bubble exemple
Report Settings' attachment_limit - Utilisez la valeur de la fiche courante et les limites ci-dessous.
max_file_bytesnumber · Défaut: 268435456- Valeur exemple
10485760 - Expression Bubble exemple
Report Settings' max_attachment_bytes - Utilisez la valeur de la fiche courante et les limites ci-dessous.
is_activeyes_no · Défaut: true- Valeur exemple
yes - Expression Bubble exemple
GuideHost'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 exemple
no - Expression Bubble exemple
GuideHost'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 exemple
yes - Expression Bubble exemple
App Settings' show_editor_controls - Afficher ou masquer les commandes intégrées.
languagetext · Défaut: "auto"- Valeur exemple
uk - Expression Bubble exemple
Current 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 exemple
App 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 exemple
Lesson 4 — review - Expression Bubble exemple
Selected 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 exemple
file:///app-cache/report.pdf - Expression Bubble exemple
Photo Editor's output_uri - Emplacement lisible sur cet appareil, fourni par votre sélecteur ou un autre plugin.
display_nametext · Défaut: —- Valeur exemple
report-photo.jpg - Expression Bubble exemple
Selected Attachment's display_name - Utilisez la valeur de la fiche courante et les limites ci-dessous.
mime_typetext · Défaut: —- Valeur exemple
image/jpeg - Expression Bubble exemple
Photo Editor's output_mime - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Select picked file
indexnumber · Défaut: —- Valeur exemple
0 - Expression Bubble exemple
Selected 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 exemple
Selected 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 exemple
Selected LocalAttachment's local_file_id - Utilisez la valeur de la fiche courante et les limites ci-dessous.
confirmyes_no · Défaut: —- Valeur exemple
yes — explicit confirmation only - Expression Bubble exemple
Confirm Checkbox is checked - Utilisez la valeur de la fiche courante et les limites ci-dessous.
Share selected file
dialog_titletext · Défaut: —- Valeur exemple
Share attachment - Expression Bubble exemple
Selected Report's share_title - Utilisez la valeur de la fiche courante et les limites ci-dessous.
utitext · Défaut: —- Valeur exemple
"" - Expression Bubble exemple
Empty 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 · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.
is_busy · yes_noUne action est en cours. Attendez avant d’en lancer une autre.
native_pending · yes_noUne action est en cours. Attendez avant d’en lancer une autre.
operation · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
selection_count · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
selected_index · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
file_id · textIdentifiant 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 · textEmplacement du fichier sur cet appareil. Sauvegardez ou envoyez-le séparément pour le conserver en ligne.
display_name · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
mime_type · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
mime_source · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
size_bytes · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
is_saved_locally · yes_noValeur 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 · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
saved_count · numberValeur 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 · textValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
invalid_saved_count · numberValeur actuelle de l’élément choisi. Lisez-la après l’événement correspondant.
share_status · textRésultat actuel de l’action. Attendez l’événement de fin correspondant avant de valider la réussite.
error_code · textInformation 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.