在iOS 6上保存联系人时出现Phonegap ContactError

我有这个贴在PhoneGap谷歌组,但我认为张贴在这里会帮助我不知何故,有点迫切需要做到今天或明天。

无论如何,PhoneGap的联系API最近让我头疼。 简而言之:

环境

  • iOS 6
  • PhoneGap 2.0.0

我有这个应用程序,用VCardembedded扫描QR码,一旦用户同意将其保存下来,它将保存到用户的联系人。 在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'); 

下面是我点击“OK”之后在XCode上看到的唯一日志:(第一个callback是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上正常工作。

这是创build联系人的正确方法吗? 如何使用PhoneGap在iOS 6上保存联系人?

任何帮助,欢迎! 我需要点亮这里)

编辑

花了一个小时做了所有必要的迁移并升级到v2.1.0,但错误代码仍然出现。 为什么?!

编辑编辑

我离结束这个赏金还有两个小时,但是我不能奖励它,因为这不是最终的答案吗?

显然,这与Mark6提到的iOS 6上新的AddressBook权限请求有关,但没有人回答我如何正确执行。 花了一些时间在研究上,我得出结论,最好是,如果我们可以等待Phonegap完成v2.2,因为我看到权限请求被添加到v2.2中的CDVContacts.m rc2 commit 61857860 …

我有同样的问题。 事实certificate,我使用的电话版本1.9,它不支持iOS 6,因此添加联系人一直给我错误4消息。 为了解决这个问题,我升级到手机版本2.1。 该版本支持iOS 6以及armv6和armv7体系结构。 错误信息是因为iOS 6需要权限才能访问地址簿,就像在iOS上使用GPS需要权限一样。 这应该解决你的问题,它为我做:)

https://issues.apache.org/jira/browse/CB-902

如果用户在iOS 6上没有AddressBook权限,则会崩溃。用户将会看到类似于Geolocation权限对话框的popup对话框。 在创build地址簿时,我们应该处理应用程序没有权限的情况,并且返回的地址簿是NULL。