85 votes

Partager des données entre deux ou plusieurs applications iPhone

Est-il possible de partager des données entre deux applications sur le même appareil ?

Ou puis-je permettre à une autre application d'utiliser les informations/données de mon application ou de toute autre manière ?

Par exemple, la première application est destinée à la gestion des événements, et je l'utilise pour enregistrer un événement. La deuxième application est destinée aux rappels, et elle récupère les données de l'autre application afin de me rappeler l'événement.

Il s'agit d'un simple exemple, pas d'un scénario réel.

109voto

HDA Points 2590

Dans le cadre de la en bac à sable le monde du développement iOS partageant des données entre entre applications peut s'avérer difficile. Les développeurs iOS ne peuvent pas partager les données directement par l'intermédiaire de l'interface système de fichiers Ils doivent donc trouver d'autres solutions. pour leurs applications. Les solutions les plus courantes sont les suivantes :

  • UIDocumentInteractionController

  • UIActivityViewController

  • Accès partagé au trousseau

  • Schéma d'URL personnalisé

  • Service Web

  • API iCloud


UIDocumentInteractionController :

Permet à l'utilisateur d'ouvrir un document dans n'importe quelle autre application qui qui s'enregistre comme pouvant traiter un document particulier Type d'uniforme Identifiant (UTI) .

L'UIDocumentInteractionController a été utilisé dans le passé en tant que d'ouvrir un document dans d'autres applications sur l'appareil, par ex. par exemple, l'ouverture des pièces jointes d'un courrier électronique à partir de l'application Mail.

UIDocumentInteractionController

Malheureusement, la L'interface utilisateur de UIDocumentInteractionController n'affiche que les éléments suivants six applications .

Vous ne pouvez pas garantir que votre candidature figurera sur la liste. Bien que le contrôleur UIDocumentInteractionController n'ait pas été déprécié, le contrôleur UIActivityViewController offre un remplacement plus souple à partir d'iOS 6.0.

Disponibilité : iOS 3.2+

Pour :

  • Permet de partager des types de données communs avec un large éventail de d'applications.

Cons :

  • Permet de contrôler le type de données envoyées au UIDocumentInteractionController, mais pas les destinations.

  • Nécessite une interaction supplémentaire avec l'utilisateur.

  • Le nombre limité de destinations de données peut faire en sorte que votre application ne s'affiche pas dans la liste.


UIActivityViewController :

Permet à l'utilisateur d'effectuer un certain nombre d'actions avec un tableau de données.

Par exemple, ils peuvent imprimer, envoyer des courriels, copier, publier sur les médias sociaux ou ouvrir des fichiers dans une autre application.

Vous pouvez créer vos propres sous-classes d'UIActivity pour fournir des services personnalisés. à l'utilisateur.

UIActivityController

Disponibilité : iOS 6.0+

Pour :

  • Idéal pour partager des types de données communes avec un large éventail d'applications et de médias sociaux.

  • Peut fournir un tableau d'éléments à appliquer à une activité. Les objets doivent être conformes au protocole UIActivityItemSource.

  • Possibilité de définir des types d'activité exclus.

  • L'interface de pagination permet plus de destinations de données que l'UIDocumentInteractionController.

Cons :

  • Vous devez définir un type d'activité personnalisé pour limiter les destinations "Ouvrir dans " des types de données courants.

  • Nécessite une interaction supplémentaire avec l'utilisateur.


Accès partagé au trousseau :

Permet de stocker en toute sécurité des données dans un trousseau de clés partagé avec d'autres utilisateurs. applications faisant partie d'une suite d'applications peuvent y accéder.

Toutes les applications qui partagent l'accès au trousseau doivent utiliser le même identifiant d'application. préfixe.

Pour un exemple d'accès partagé au trousseau en action. Voir Apple's GenericKeychain d'Apple .

Shared Key Chain

Disponibilité : iOS 3.0+

Pour :

  • Accès sécurisé aux données.

Cons :

  • Vous ne pouvez partager des données qu'entre des applications qui partagent un préfixe d'identification commun.

  • L'API du trousseau sur le simulateur iOS provient d'OS X, dont l'API est différente de celle de l'appareil iOS.


Schéma d'URL personnalisé :

Permet aux données de passer d'une application à l'autre à l'aide de simples URL.

Custom URL Scheme

Disponibilité : iOS 3.0+

Pour :

  • Aucune connexion réseau n'est nécessaire.
  • Idéal pour les petites quantités de données que vous pouvez facilement encoder dans une URL légale échappée.

Cons :

  • Vous devez encoder les données dans une URL légale échappée.

Remarque : L'encodage base64 est couramment utilisé pour transformer des données sérialisables en chaînes de caractères. Cependant, les chaînes base64 peuvent inclure des caractères qui ne sont pas valides pour une utilisation dans les URL. Vous pouvez envisager d'utiliser base64url. Voir Base 64 Encoding with URL and Filename Safe Alphabet (Encodage en base 64 avec l'alphabet sécurisé des URL et des noms de fichiers) pour plus d'informations.


API iCloud :

Tout le monde sait ce qu'est iCloud, ses avantages et ses inconvénients. plus d'explications à ce sujet.

Mais on peut se demander comment il est possible de partager des données entre applications à l'intérieur d'un même appareil, il existe des solutions de contournement pour y parvenir. pour y parvenir.

iCloud

C'est possible parce que l'identifiant utilisé pour iCloud est différent de l'identifiant du paquet, il est donc possible de partager images, vidéos et autres documents.

Pour en savoir plus voir la discussion sur ce sujet


Service Web :

Synchronisation des données par l'intermédiaire d'un tiers (par exemple Dropbox) ou d'un site web personnalisé personnalisé.

web service

Disponibilité : iOS 2.0+

Pour :

  • Utile pour le partage et la distribution de grandes quantités de données.

Cons :

  • Nécessite une connexion réseau.
  • le surcoût lié à la mise en œuvre des services web.

Référence

3 votes

Comme la réponse détaillée et l'utilisation de graphiques

1 votes

Vous devez mentionner UIPasteboard API.

0 votes

@EvgenyKarkan - N'hésitez pas à modifier le message :)

37voto

baudot Points 542

Historiquement, l'iPhone a essayé d'empêcher le partage de données entre les applications. L'idée était que si vous ne pouviez pas accéder aux données d'une autre application, vous ne pouviez pas lui faire de mal.

Dans les versions récentes d'IOS, ils ont un peu assoupli cette règle. Par exemple, le guide de programmation iOS contient désormais une section sur le passage de données entre les applications en demandant à une application de revendiquer un certain préfixe d'URL, puis en demandant à d'autres applications de référencer cette URL. Ainsi, vous pouvez configurer votre application Event pour qu'elle réponde aux URL "event://" de la même manière qu'un serveur web répond aux URL "http://".

La documentation d'Apple sur cette approche est la suivante ici .

Jetez un coup d'œil à la rubrique "Mise en œuvre de schémas d'URL personnalisés".

0 votes

Merci, c'est exactement ce que je cherchais.

0 votes

Les données volumineuses peuvent-elles être partagées de cette manière, par exemple les fichiers ?

2 votes

Si vous lisez jusqu'ici, n'oubliez pas de consulter la réponse de @siejkowski ci-dessous, car elle est plus récente.

15voto

JugsteR Points 656

Le partage de données entre applications est-il possible ? Oui, c'est possible !

Utiliser UIPasteBoard disponible à partir d'iOS 3.0, la documentation est disponible ici . Les documents d'Apple disent :

La classe UIPasteboard permet à une application de partager des données au sein de l'application ou avec une autre application à l'aide de tableaux à l'échelle du système ou spécifiques à l'application.

Il est également possible de partager des données entre applications dans le trousseau, bien que les données soient principalement destinées aux mots de passe et autres, tout ce qui est sérialisable peut être stocké. Ici est une question de Stack Overflow à ce sujet.

0 votes

Excellent ! Cela semble être un moyen viable de partager des données entre les applications.

1 votes

L'UIPasteboard semble être une bonne solution pour le partage de petites données, comme le copier-coller de chaînes de caractères. Existe-t-il une option permettant de partager des fichiers entre les applications ?

1 votes

@AlikElzin-kilaka oui, il soutient NSData también.

4voto

PawanShakya Points 77

Vous pouvez utiliser le schéma Custom URL pour accéder aux données d'une application à l'autre. Suivez le lien ci-dessous pour plus d'informations -

http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

2 votes

L'expression "données d'accès" est trompeuse. Le lien renvoie à un article dans lequel certains paramètres sont transmis à une application dans l'URL elle-même.

3voto

MasterBeta Points 242

Mentionnez que le partage de données entre applications via UIPasteBoard ne fonctionne que pour les applications du même groupe d'applications dans iOS7. Comme le dit Apples :

+[UIPasteboard pasteboardWithName:create :] et +[UIPasteboard pasteboardWithUniqueName] rendent désormais unique le nom donné pour permettre aux seules applications du même groupe d'applications d'accéder au pasteboard. Si le développeur tente de créer un tableau d'affichage avec un nom qui existe déjà et qu'il ne fait pas partie de la même suite d'applications, il obtiendra son propre tableau d'affichage unique et privé. Notez que cela n'affecte pas les tableaux d'affichage fournis par le système, les tableaux généraux et les tableaux de recherche.

0 votes

Qu'entend Apple par "même groupe d'application" ?

2 votes

@MagicBulletDave Apps qui ont le même Bundle Seed ID.

0 votes

_En UIPasteboard permet à une application de partager des données en son sein et avec une autre application. Pour partager des données avec n'importe quelle autre application, vous pouvez utiliser des tableaux d'affichage à l'échelle du système ; pour partager des données avec une autre application ayant le même ID d'équipe que votre application, vous pouvez utiliser des tableaux d'affichage spécifiques à l'application._

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X