我在 PhoneGap 谷歌群组上发布了这篇文章,并在 Stack Overflow 上交叉发布了它。
无论如何,PhoneGap 的Contact API最近让我头疼。简而言之:
环境
- iOS 6
- PhoneGap 2.0.0
我有这个应用程序可以扫描嵌入了 VCard 的 QR 码,一旦用户同意将其保存下来,它就会将其保存到用户的联系人中。On Android 4.1.2
,这段代码完美无瑕地运行,没有任何错误,并且联系人也被保存了。但是,我iOS 6
无法让它工作。我一直收到的是error #4
,也就是ContactError.IO_ERROR
。
代码如下:
navigator.notification.confirm('Found a contact: "'+(vcard['N'] || '')+'". Add it into your contact list?', function(btn) {
if (btn == 1) {
var contact = navigator.contacts.create();
contact.displayName = vcard['N'] || '';
contact.emails = [new ContactField('email', vcard['EMAIL'] || '')];
var org = new ContactOrganization();
org.name = vcard['ORG'] || '';
contact.organizations = [org];
contact.save(function() {
navigator.notification.alert('Contact Saved');
}, function(err) {
navigator.notification.alert('Error on saving contact: '+err.code);
});
}
}, 'QR Code Scanner', 'OK,Cancel');
以下是我在点击“确定”后在 XCode上看到的唯一日志:(第一个回调是针对notification.confirm
)
2012-10-22 21:19:24.619 [11897:907] PluginResult:toJSONString - {"status":1,"message":1,"keepCallback":false}
2012-10-22 21:19:24.621 [11897:907] PluginResult toSuccessCallbackString: cordova.callbackSuccess('Notification12',{"status":1,"message":1,"keepCallback":false});
2012-10-22 21:19:24.738 [11897:907] PluginResult:toJSONString - {"status":9,"message":4,"keepCallback":false}
2012-10-22 21:19:24.739 [11897:907] PluginResult toErrorCallbackString: cordova.callbackError('Contacts13',{"status":9,"message":4,"keepCallback":false});
然后我会看到警报:
Error on saving contact: 4
笔记
- vcard 是 vcard obj 的键值对。请暂时忽略这一点。这并不重要。
- 这段代码在 android 上运行良好。
这是建立联系的正确方式吗?如何使用 PhoneGap 在 iOS 6 上保存联系人?
编辑
我做了所有必要的迁移并升级到 v2.1.0,但错误代码仍然出现。为什么是这样?
编辑
显然,这与 Mark 提到的 iOS 6 上的新地址簿权限请求有关,但没有人回答我如何正确执行此操作。花了一些时间研究我得出一个结论,如果我们可以等待 Phonegap 完成 v2.2 是最好的,因为我看到在 v2.2 rc2 提交 61857860 的 CDVContacts.m 中添加了权限请求......