Часть 1. Получение URL-адреса файла VCF с веб-сайта
Установите обработчик сообщений сценария на WKWebView
, используйте приведенный ниже код при инициализации WKWebView
:
webView?.configuration.userContentController.add(self, name: "MyHandler")
Вы должны установить WKScriptMessageHandler
делегат.
Добавьте приведенный ниже код к событию нажатия кнопки загрузки на вашем веб-сайте:
window.webkit.messageHandlers.MyHandler.postMessage({"message":"Start Download", "vcf_url":"https://www.yourwebsite.com/path/file.cvf"})
didReceiveScriptMessage
будет вызываться, когда пользователь нажимает кнопку загрузки на веб-сайте.Здесь вы получите ["message":"Start Download", "vcf_url":"https://www.yourwebsite.com/path/file.cvf"]
объект.
Часть 2. Получение данных файла VCF и добавление в контакты
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
print(message.body)
if let dic = message.body as? [String:String] {
if let url = dic["vcf_url"] {
let fileUrl = URL(fileURLWithPath: url)
do {
let data = try Data(contentsOf: fileUrl)
let contacts = try CNContactVCardSerialization.contacts(with: data)
let contactStore = CNContactStore.init()
contactStore.requestAccess(for: CNEntityType.contacts, completionHandler: { (granted, accessError) -> Void in
if granted {
let saveRequest = CNSaveRequest()
for contact in contacts {
let newContact = CNMutableContact()
newContact.givenName = contact.givenName
newContact.familyName = contact.familyName
newContact.phoneNumbers = contact.phoneNumbers
saveRequest.add(newContact, toContainerWithIdentifier: "")
do {
try contactStore.execute(saveRequest)
// Contact saved successfully
} catch let error {
print("Error - \(error.localizedDescription)")
}
}
}
})
} catch let error {
print("Error - \(error.localizedDescription)")
}
}
}
Здесь newContact.imageData = contact.imageData
можно использовать для сохранения изображения, если оно не nil
,
Я не проиллюстрировал все свойства контакта в качестве примера, но вы можете использовать его по своему усмотрению.