我有这个posted on PhoneGap google groups,但我认为在这里发帖会对我有所帮助,有点迫切需要在今天或明天完成。
无论如何,PhoneGap的Contact API最近给我带来了麻烦。简而言之:
环境
我有这个应用程序扫描嵌入了VCard的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');
以下是我点击“确定”后我在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
注意
这是创建联系的正确方法吗?如何使用PhoneGap在iOS 6上保存联系人?
欢迎任何帮助!我在这里需要一些亮点;)
修改
花了一个小时进行所有必要的迁移并升级到v2.1.0,但错误代码仍然出现。为什么?!
修改编辑
我离结束这个赏金还有2个小时但是我不能奖励它,因为它不是最终的答案?
显然这与Mark提到的iOS 6上的新AddressBook权限请求有关,但没有人回答我如何正确地做到这一点。在研究上花了一些时间我得出的结论是,我最好能等待Phonegap完成v2.2,因为我在CDVContacts.m in v2.2 rc2 commit 61857860...中看到了添加权限请求
答案 0 :(得分:2)
https://issues.apache.org/jira/browse/CB-902
如果用户在iOS 6上没有AddressBook权限,则当前崩溃。 用户将获得类似于地理位置权限对话框的弹出对话框。在创建地址簿时,我们应该处理应用程序没有权限的情况,并且返回的地址簿为NULL。
答案 1 :(得分:0)
我遇到了同样的问题。事实证明,我使用的是phonegap 1.9版,它不支持iOS 6,因此添加一个联系人一直给我错误4消息。为了解决这个问题,我升级到了phonegap 2.1版。此版本支持iOS 6以及armv6和armv7架构。错误消息是因为iOS 6需要访问通讯簿的权限,就像使用GPS需要iOS权限一样。这应该可以解决你的问题,它确实适合我:)