partager données entre différentes applications
Bonjour à tous,
Je voudrais savoir si il est possible de partager des données entre différente application iPhone.
A la fermeture d'une appli je sauvegarde une NSMutableArray avec la classe NSKeyedArchiver.
Est il possible de récupérer mon fichier "personne.keyedArchive" dans une autre application, pour pouvoir récupérer mon tableau de personnes.
Je penses que non chaque application à son répertoire très fermé ou seule elle peut y accéder. C'est ça?
Comment je pourrais faire??? Avec SQLlite je peux partager donner entre plusieurs appli?
Est il possible de partager donné entre différente appli?? J'ai bien peur que non...
Merci a vous..
Je voudrais savoir si il est possible de partager des données entre différente application iPhone.
A la fermeture d'une appli je sauvegarde une NSMutableArray avec la classe NSKeyedArchiver.
<br />-(void) applicationWillTerminate:(UIApplication *)application{<br /> NSMutableData *keyedArchiveData = [NSMutableData data];<br /> NSKeyedArchiver *keyedArchiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:keyedArchiveData] autorelease];<br /> [keyedArchiver encodeObject:personne forKey:[@"presonne"];<br /> [keyedArchiver finishEncoding];<br /><br /> NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES );<br /> NSString *documentDirectory = [documentDirectories objectAtIndex:0];<br /> NSString *keyedArchiveFilename = [documentDirectory stringByAppendingPathComponent:@"personne.keyedArchive"];<br /><br /> [keyedArchiveData writeToFile:keyedArchiveFilename atomically:YES];<br />}<br />
Est il possible de récupérer mon fichier "personne.keyedArchive" dans une autre application, pour pouvoir récupérer mon tableau de personnes.
Je penses que non chaque application à son répertoire très fermé ou seule elle peut y accéder. C'est ça?
Comment je pourrais faire??? Avec SQLlite je peux partager donner entre plusieurs appli?
Est il possible de partager donné entre différente appli?? J'ai bien peur que non...
Merci a vous..
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Le seul moyen de partager des informations entre application, c'est le presse-papiers, ou alors passer par un serveur externe capable de les stocker.
PS: Le push n'a rien à voir avec tout ça
c'est pour ca que je disais "je vais peut etre dire une conenrie"
Communicating with other applications.
C'est plutôt conseillé de partager des URL ou des URIs (au sens propre : Universal Resource Locator/Identifier, donc identifieur/localisateur de ressource, donc que l'URL indique une action/un identifiant/un emplacement vers une ressource) plutôt que la ressource elle-même, mais bon selon la taille de tes données ça peut être acceptable.
J'ai testé, ça marche très bien. Du moins pour des petites chaà®nes.
Maintenant si ce ne sont pas des chaà®nes que tu veux envoyer, c'est moins simple : il faut sérialiser tes données et t'assurer que cette sérialisation ne contient que des données valides pour une NSURL. Le plus simple pour faire ça étant de sérialiser ça en NSData puis de récupérer la représentation base64 de ces dernières, mais selon tes données à partager il y a peut-être plus optimal.
1) Dans l'appli qui veut envoyer le NSDict :
2) dans le AppDelegate de l'application receveuse, implémenter le code :
3) Toujours dans l'appli receveuser, déclarer que cette appli sait gérer les URLs de type "pcom:". Pour cela, aller dans le Info.plist de l'appli, et rajouter une entrée pour "URL Types" (c'est une entrée prédéfinie, il va proposer de suite un tableau avec une entrée). Dans l'Item 0 de ce "URL Types", rentrer un identifiant pour ce URL scheme en face de "URL Identifier", par exemple "com.pommedev.datasharing.pcom", et rajouter une entrée "URL Schemes" avec comme scheme la valeur "pcom" (puisqu'on veut gérer les URLs de type "pcom:"
Et voilà . Chez moi ça marche nickel. Petites notes tout de même :
Bien sûr, si ce sont des NSData directement à envoyer, pas besoin de les sérialiser, juste besoin de l'encoder en base64 pour en avoir une chaà®ne. Si c'est une NSString directement, c'est encore plus simple. Si c'est un NSArray d'entiers, autant utiliser [array componentsSeparatedByString:@|] par exemple pour avoir une chaà®ne de ces entiers séparés par "|", ... bref, autant adapter pour que ça colle au mieux à ton cas sans rendre le code complexe inutilement. Là le code mis est le plus générique possible, mais selon ton cas il peut y avoir plus simple.
Tout ça es bien intéressant.
Si je comprend bien en ouvrant l'url "pcom:" ça va fermer ma 1er appli ouvrir la 2eme appli en lui passant mon objet serialisé dans le reste de l'URL.
Une fois ouverte ma 2eme appli lit l'url et désérialise mon objet.
Mais il n'est donc pas possible de partager une même ressource. Ou alors via le réseau comme le dit zoc.
Merci à vous, je garde cette histoire d'url scheme de coté ça servira.
MERCI
Après ça dépend ce que tu appelles "partager une même ressource".
Par exemple là j'ai passé un NSDictionary. Quand j'ai testé le code chez moi avant de poster, j'ai même testé en rajoutant dans ce NSDictionary une UIImage (enfin les NSData récupérées par la UIImageJPEGRepresentation de cette UIImage), et ça marche bien aussi : j'ai ainsi pu avoir une image dans une appli et l'envoyer dans une autre.
Maintenant, partager effectivement une ressource commune, c'est à dire que, quelle que soit l'appli que tu lances (app1 ou app2), ces dernières auront accès à la même ressource (tu lances app1, tu modifies ta ressource, tu quittes va autre part, etc... puis plus tard lances manuellement app2 et espère avoir accès à la version modifiée de ta ressource), alors en effet ma solution ne marche pas.
A voir si y'a pas d'autres astuces pour avoir une ressource commune entre 2 apps, mais j'en doute fort, puisque c'est le propre du principe de la Sandbox sur iPhone.
Je viens d'avoir une petite idée je vais tester un truc pour voir si ça marche... mais je sais pas si c'est le genre accepté par Apple en même temps.
[EDIT]Bon j'ai rien dit l'astuce à laquelle je pensais ne marche pas (et ça m'étonne pas vraiment en fait)