如何在Swift 3中将我的应用程序中的位置共享给WhatsApp

coc*_*ile 6 ios whatsapp uiactivityviewcontroller swift ios10

我正在尝试将我的iOS应用程序中的位置共享给WhatsApp,我希望它看起来像这样:

在此处输入图片说明

我正在做的是用以下代码发送vCard:

 func vCardURL(from coordinate: CLLocationCoordinate2D, with name: String?) -> URL {
    let vCardFileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("Shared Location.loc.vcf")

    let vCardString = [
        "BEGIN:VCARD",
        "VERSION:3.0",
        //"PRODID:-//Apple Inc.//iPhone OS 10.3.2//EN",
        "N:;My Location;;;",
        "FN:My Location",
        "item1.URL;type=pref:https://maps.apple.com/?ll=50.359890\\,12.934560&q=My%20Location&t=m",
        "item1.X-ABLabel:map url",
        "END:VCARD"
        ].joined(separator: "\n")

    do {
        try vCardString.write(toFile: vCardFileURL.path, atomically: true, encoding: .utf8)
    } catch let error {
        print("Error, \(error.localizedDescription), saving vCard: \(vCardString) to file path: \(vCardFileURL.path).")
    }

    print(vCardString)

    return vCardFileURL
} // end of function
Run Code Online (Sandbox Code Playgroud)

//调用上方的聚会

let vURL = LocationVCard.vCardURL(from: self.newLocation.coordinate, with: "Berlin")

                let activityViewController = UIActivityViewController(activityItems: [vURL], applicationActivities: nil)
                self.present(activityViewController, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

但是我总是以这种风格而不是我想要的风格结束: 在此处输入图片说明

Hej*_*azi 3

无需将 vCard 字符串保存到文件中,只需将其转换为并用正确的类型标识符Data包装它,它就可以正常工作:NSItemProviderpublic.vcard

let data = vCardString.data(using: .utf8)! as NSData
let item = NSItemProvider(item: data, typeIdentifier: "public.vcard")
let activityViewController = UIActivityViewController(activityItems: [item], applicationActivities: nil)
Run Code Online (Sandbox Code Playgroud)