Ist es möglich, Daten zwischen zwei Anwendungen auf demselben Gerät auszutauschen?
Oder kann ich einer anderen Anwendung erlauben, die Informationen / Daten meiner Anwendung oder auf andere Weise zu verwenden?
Zum Beispiel ist die erste Anwendung für die Ereignisverwaltung und ich verwende sie, um ein Ereignis zu speichern. Die zweite Anwendung dient zur Erinnerung, die Daten von der anderen Anwendung abruft, um mich an das Ereignis zu erinnern.
Dies ist nur ein einfaches Beispiel, kein reales Szenario.
UIDocumentInteractionController
UIActivityViewController
Gemeinsamer Schlüsselbundzugriff
Benutzerdefiniertes URL-Schema
Internetservice
iCloud API
UIDocumentInteractionController:
Verfügbarkeit: iOS 3.2+
Vorteile:
Nachteile:
Ermöglicht die Steuerung des Datentyps, der an den UIDocumentInteractionController gesendet wird, jedoch nicht der Ziele.
Erfordert zusätzliche Benutzerinteraktion.
Eine begrenzte Anzahl von Datenzielen kann dazu führen, dass Ihre Anwendung nicht in der Liste angezeigt wird.
UIActivityViewController:
Verfügbarkeit: iOS 6.0+
Vorteile:
Hervorragend geeignet, um gängige Datentypen mit einer Vielzahl von Anwendungen und sozialen Medien zu teilen.
Kann eine Reihe von Elementen zur Anwendung auf eine Aktivität bereitstellen. Objekte sollten dem UIActivityItemSource-Protokoll entsprechen.
Kann ausgeschlossene Aktivitätstypen festlegen.
Die Paging-Benutzeroberfläche ermöglicht mehr Datenziele als UIDocumentInteractionController.
Nachteile:
Sie müssen einen benutzerdefinierten Aktivitätstyp definieren, um die Ziele "Öffnen in ..." gängiger Datentypen einzuschränken.
Erfordert zusätzliche Benutzerinteraktion.
Gemeinsamer Schlüsselbundzugriff:
Verfügbarkeit: iOS 3.0+
Vorteile:
Nachteile:
Sie können nur Daten zwischen Anwendungen freigeben, die ein gemeinsames App-ID-Präfix verwenden.
Die Schlüsselbund-API im iOS-Simulator stammt von OS X, das eine andere API als das iOS-Gerät hat.
Benutzerdefiniertes URL-Schema:
Verfügbarkeit: iOS 3.0+
Vorteile:
Nachteile:
Sie müssen Daten in eine maskierte legale URL codieren.
Hinweis: Bei der Base64-Codierung werden häufig serialisierbare Daten in Zeichenfolgenwerte umgewandelt. Base64-Zeichenfolgen können jedoch Zeichen enthalten, die für die Verwendung in URLs ungültig sind. Sie könnten die Verwendung von base64url in Betracht ziehen. Weitere Informationen finden Sie unter Base 64-Codierung mit URL und Dateiname Safe Alphabet .
iCloud API:
Internetservice:
Verfügbarkeit: iOS 2.0+
Vorteile:
Nachteile:
Referenz
quelle
UIPasteboard
API erwähnen .Ab iOS 8 habe ich mit " App Group Functionality " erfolgreich auf denselben Ordner zugegriffen. Ich erweitere die Antwort von @siejkowski.
Hinweis: Es funktioniert nur mit demselben Entwicklerkonto.
Dazu müssen Sie die folgenden Schritte ausführen.
Jetzt müssen Sie zwei Apps erstellen. Beispielname
Jetzt kopieren wir Bilder von Demo_Share_One in den Freigabeordner, der standardmäßig erstellt wird, wenn Sie App-Gruppen aktivieren und die App ausführen. und greift über Demo_Share_Two auf alle diese Bilder zu .
Sie müssen den Gruppennamen übernehmen, der auf Ihr Entwicklerkonto festgelegt wurde
group.filesharingdemo
.Fügen Sie in beiden Apps die folgende Methode hinzu, um den relativen Pfad für die Freigabe der Ordner-URL zu erhalten.
- (NSString *) getSharedLocationPath:(NSString *)appGroupName { NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *groupContainerURL = [fileManager containerURLForSecurityApplicationGroupIdentifier:appGroupName]; return [groupContainerURL relativePath]; }
Jetzt kopieren wir Bilder aus dem Bundle von Demo_Share_One
-(IBAction)writeImage:(id)sender { for (int i = 0; i<15; i++) { NSString *strSourcePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"hd%d",i+1] ofType:@"jpg"]; NSString *strDestinationPath = [[self getSharedLocationPath:@"group.filesharingdemo"] stringByAppendingPathComponent:[NSString stringWithFormat:@"hd%d",i+1]] ; BOOL filewrite = [[NSFileManager defaultManager]copyItemAtPath:strSourcePath toPath:strDestinationPath error:nil]; if (filewrite) NSLog(@"File write"); else NSLog(@"can not write file"); } }
Jetzt in Demo_Share_Two, um auf diese Bilder zuzugreifen
NSString *pathShared = [[self getSharedLocationPath:@"group.filesharingdemo"] stringByAppendingPathComponent:[NSString stringWithFormat:@"hd%d.jpg",number]]; NSLog(@"%@",pathShared); //BOOL fileExist = [[NSFileManager defaultManager] fileExistsAtPath:pathShared]; imgView.image = [UIImage imageWithContentsOfFile:pathShared];
Und jetzt erhalten Sie alle Bilder, die Sie schreiben, von Demo_Share_One .
Also von nun an, wenn Sie diesen Ordner zwei Ihrer dritten App freigeben möchten. Fügen Sie diese App einfach Ihrer Gruppe hinzu. Daher ist es zu einfach, auf dieselben Elemente in Ihren mehreren Apps zuzugreifen.
Dank Apple für Share Elements aus Ihrer eigenen Apps-Funktionalität . Viel Spaß beim Codieren. :) :)
quelle
Seit iOS 8 können Sie problemlos Daten zwischen Apps austauschen, solange sie sich in der gemeinsamen App-Gruppe befinden.
Die Apple-Dokumentation erklärt dies am besten im Kontext von Erweiterungen: https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html
Grundsätzlich müssen Sie:
Die erste API basiert auf
NSUserDefaults
:NSString *appGroupId = @"group.my.group.id"; NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:appGroupId]; [myDefaults setObject:@"foo" forKey:@"bar"];
Die zweite API basiert auf
NSFileManager
. Es ist einfach ein freigegebener Ordner, auf den Sie zugreifen können, nachdem Sie die URL erhalten haben:NSString *appGroupId = @"group.my.group.id"; NSURL *sharedFolderURL = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:appGroupId];
Alles, was Sie in
myDefaults
den Ordner oder den Ordner legen, auf den Sie zeigen, istsharedFolderURL
für alle Ihre Apps sichtbar und zugänglich.Im Falle eines Ordners schreiben / lesen Sie bitte atomar, um sicherzustellen, dass keine Deadlocks möglich sind.
quelle
Daten zwischen Apps teilen möglich? Ja ist es!
Verwenden Sie UIPasteBoard ab iOS 3.0. Die Dokumentation finden Sie hier . Apple-Dokumente sagen:
Es ist auch möglich, Daten zwischen Apps im Schlüsselbund auszutauschen, obwohl die Daten in erster Linie als Kennwörter gedacht sind und alles, was serialisierbar ist, gespeichert werden kann. Hier ist eine Frage zum Stapelüberlauf.
quelle
NSData
auch.Sie können das benutzerdefinierte URL-Schema verwenden, um auf Daten von einer App zur anderen zuzugreifen. Folgen Sie dem unten angegebenen Link für weitere Informationen -
http://iosdevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html
quelle
Erwähnen Sie, dass der Datenaustausch zwischen Apps über UIPasteBoard nur für Apps in derselben Anwendungsgruppe in iOS7 funktioniert. Wie Äpfel sagen:
+ [UIPasteboard pasteboardWithName: create:] und + [UIPasteboard pasteboardWithUniqueName] geben jetzt den angegebenen Namen eindeutig an, damit nur die Apps in derselben Anwendungsgruppe auf das Pasteboard zugreifen können. Wenn der Entwickler versucht, ein Pasteboard mit einem bereits vorhandenen Namen zu erstellen, der nicht Teil derselben App-Suite ist, erhält er ein eigenes, einzigartiges und privates Pasteboard. Beachten Sie, dass dies keine Auswirkungen auf die vom System bereitgestellten Pasteboards, allgemein und find hat.
quelle
Wenn es Ihnen nichts ausmacht, auf das Netzwerk zuzugreifen, können Sie einen benutzerdefinierten Webdienst implementieren oder einen Cloud-Dienst verwenden. iCloud selbst wird hier nicht viel nützen. Sie können nur Daten zwischen derselben App auf verschiedenen Geräten austauschen. Sie können über iCloud lesen hier .
Ohne das Netzwerk zu verwenden, können Sie die " schnelle App-Umschaltung " nutzen, um eine begrenzte Datenmenge zwischen Apps über die URL-Codierung zu übertragen. Die tatsächliche Menge der übertragbaren Daten weiß ich nicht, aber ich bin mir sicher, dass sie sehr begrenzt wäre.
Die Antworten von JugsteR und Baudot sind in diesem Fall am besten.
quelle
Sie können https://github.com/burczyk/Camouflage verwenden , um NSData als .bmp-Datei zu lesen und in iOS Camera Roll zu schreiben und zwischen Apps zu teilen :)
Brandneue Lösung!
quelle
Nein, Sie müssten eine Cloud-Lösung verwenden.
quelle