Ich bin neu zu schnell und Methoden, die ich finde, sind über mein Problem veraltet. Ich baue eine Verzeichnis-App und ziehe Kontaktdaten aus einer API, nicht aus dem Adressbuch des Telefons.Wie erstellt man eine vCard/vcf-Datei für die Verwendung im Aktienbogen?
Wenn Sie in iOS zu Ihrem Adressbuch wechseln, können Sie einen Kontakt auswählen und "Kontakt freigeben" wählen, wodurch ein Freigabeblatt angezeigt wird. Ich möchte diese genaue Funktionalität in meiner App.
ich denken Ich habe Teile Blätter herausgefunden, und hier ist mein Code dafür:
@IBAction func actShare(sender: AnyObject) {
let activityViewController = UIActivityViewController(activityItems: ["text" as NSString], applicationActivities: nil)
presentViewController(activityViewController, animated: true, completion: {})
}
Ich möchte "text" as NSString
zu ändern, um eine vCard zu sein, als dass das Objekt ist, dass iOS Aktien aus dem Adressbuch, richtig? Angenommen, ich habe Recht, möchte ich eine vCard aus dem Kontaktobjekt meiner eigenen App erstellen, um sie mit entsprechenden Apps (E-Mail, SMS usw.) zu teilen.
Wie kann ich das in Swift erreichen? Wenn ich falsch liege, bitte korrigieren Sie mich und zeigen Sie mir, was ich tun muss. Vielen Dank.
EDIT: Okay, hier sind meine Änderungen.
@IBAction func actShare(sender: AnyObject) {
do {
var contactData = NSData()
try contactData = CNContactVCardSerialization.dataWithContacts([createContact()])
let activityViewController = UIActivityViewController(activityItems: [contactData as NSData], applicationActivities: nil)
presentViewController(activityViewController, animated: true, completion: {})
} catch {
print("CNContactVCardSerialization cannot save address")
}
und
func createContact() -> CNMutableContact {
let contactCard = CNMutableContact()
contactCard.givenName = "John"
contactCard.familyName = "Doe"
contactCard.emailAddresses = [
CNLabeledValue(label: CNLabelWork, value: "[email protected]")
]
return contactCard
}
Allerdings, wenn ich auf die Schaltfläche klicken und es bringt meinen Anteil Blatt, ich wählen Sie die Anwendung, die ich teilen möchten und es nicht hinzufügen/attach den Kontakt Daten wie vorgesehen. Wie erreiche ich das?
Danke - ich meine erste Post mit einer neuen Frage gerade aktualisiert. Ich denke, deine Antwort wird es jedoch lösen. Ich werde es ausprobieren und zu dir zurückkommen.Sehr geschätzt! –
Vielen Dank! Das hat perfekt funktioniert. Ich verstehe es jetzt. Ich habe jedoch eine letzte Frage. Wenn ich den Kontakt teile, hat die .vcf einen langen Namen wie "6DD3C04D-08C1-44C7-8A7E-F08C6F0CB5CD.vcf". Kann ich das in JohnnyAppleeseed.vcf ändern, so wie Sie es erhalten, wenn Sie einen Kontakt aus Ihrem eigenen Adressbuch freigeben? EDIT: Oh, ich habe es! Ich habe .URLByAppendingPathComponent (NSUUID(). UUIDstring) übersehen. Ich danke dir sehr! –
'CNContactFormatter' wird Ihnen dort helfen. Ich habe den Code aktualisiert, um zu zeigen, wie Sie ihn verwenden können. Es wird auf die UUID-Zeichenfolge zurückgesetzt, wenn der Kontakt keinen Namen hat (aus welchem Grund auch immer) oder wenn Sie mehrere Kontakte gleichzeitig teilen (in diesem Fall ist die Verwendung des Vornamens wahrscheinlich nicht erwünscht). –