hai*_*zal 3 vcf-vcard objective-c ios swift cncontact
我写了一个代码来保存与图像的联系.我用CNContact类来做.它成功保存了联系人.
该联系人在iOS的默认联系人应用程序中正确显示缩略图.但我的问题是,当我使用iOS的默认联系人应用程序通过短信或电子邮件分享该联系人时,该图像不会加到vCard中.
任何人都可以向我指导我做错了什么吗?
以下是我用来保存联系人的方法.它在Swift中.
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
}
}
Run Code Online (Sandbox Code Playgroud)
正如@ haider_kazal所说,是的,您可以将联系人图像数据转换为.vcf文件,如此处所示[示例].
示例:
作为一种解决方法,您可以在VCard中创建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];
Run Code Online (Sandbox Code Playgroud)
由于某些原因,CNContactVCardSerialization不使用任何联系人照片.序列化后的VCard如下所示:
BEGIN:VCARD
VERSION:3.0
PRODID:-//Apple Inc.//iPhone OS 9.3.2//EN
N:Contact;Test;;;
FN: Test Contact
END:VCARD
Run Code Online (Sandbox Code Playgroud)
在VCard中插入PHOTO字段后,您将获得
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
Run Code Online (Sandbox Code Playgroud)
在此插入后,联系人在CNContactViewController中看起来很好
| 归档时间: |
|
| 查看次数: |
859 次 |
| 最近记录: |