2016-07-22 161 views
3

我已經編寫了一個保存聯繫人圖片的代碼。我使用CNContact類來完成它。它可以成功保存聯繫人。CNContact保存聯繫人時不會發送聯繫人圖片

聯繫人在iOS默認聯繫人應用中正確顯示縮略圖。但我的問題是,當我使用iOS的默認聯繫人應用程序通過短信或電子郵件分享該聯繫人時,圖像不會添加到vCard中。

任何人都可以引導我到我做錯了什麼?

以下是我用來保存聯繫人的方法。它在斯威夫特。

func addContact(withData: ContactModel, andPicture picture: NSData?) -> Bool { 
    if(checkForPermission() != true) { 
     print("No permission") 
     return false 
    } 

    let contact = convertToCNMutableContact(withData) 
    contact.imageData = picture 
    let saveRequest = CNSaveRequest() 
    saveRequest.addContact(contact, toContainerWithIdentifier: nil) 
    do { 
     try contactStore.executeSaveRequest(saveRequest) 
     return true 
    } catch { 
     print("Couldn't save contact") 
     return false 
    } 
} 
+0

我提交的這個錯誤之後。不明白爲什麼不包括照片。 – Daniel

回答

1

我想出了問題。當我使用CNContactVCardSerialization.dataWithContacts()時,我得到的圖像爲NSData。如果我將其轉換爲UIImageJPEGRepresentation/UIImageJPEGRepresentation,然後將帶有vCard字符串的圖像追加爲@"PHOTO;BASE64;ENCODING=b;TYPE=JPEG%@",然後追加圖像數據,則圖像將與vCard一起發送。

+0

你能舉個例子嗎? –

4

由於@haider_kazal表示,是的,您可以將聯繫人圖片數據作爲回答here [Example]獲取到.vcf文件中。

樣品:

作爲一種變通方法,您可以創建電子名片的內部PHOTO領域。

NSError* error = nil; 
NSData* vCardData = [CNContactVCardSerialization dataWithContacts:@[contact] error:&error]; 
NSString* vcString = [[NSString alloc] initWithData:vCardData encoding:NSUTF8StringEncoding]; 
NSString* base64Image = contact.imageData.base64Encoding; 
NSString* vcardImageString = [[@"PHOTO;TYPE=JPEG;ENCODING=BASE64:" stringByAppendingString:base64Image] stringByAppendingString:@"\n"]; 
vcString = [vcString stringByReplacingOccurrencesOfString:@"END:VCARD" withString:[vcardImageString stringByAppendingString:@"END:VCARD"]]; 
vCardData = [vcString dataUsingEncoding:NSUTF8StringEncoding]; 

由於某些原因CNContactVCardSerialization不使用任何聯繫照片。序列化後的電子名片的樣子:

BEGIN:VCARD 
VERSION:3.0 
PRODID:-//Apple Inc.//iPhone OS 9.3.2//EN 
N:Contact;Test;;; 
FN: Test Contact 
END:VCARD 

插入後內電子名片照片字段,你會得到

BEGIN:VCARD 
VERSION:3.0 
PRODID:-//Apple Inc.//iPhone OS 9.3.2//EN 
N:Contact;Test;;; 
FN: Test Contact 
PHOTO;TYPE=JPEG;ENCODING=BASE64:<photo base64 string> 
END:VCARD 

此插入聯繫人會看起來很好的CNContactViewController