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

时间:2012-10-23 01:48:10

标签: ios cordova contact

我有这个posted on PhoneGap google groups,但我认为在这里发帖会对我有所帮助,有点迫切需要在今天或明天完成。

无论如何,PhoneGap的Contact API最近给我带来了麻烦。简而言之:

环境

  • iOS 6
  • PhoneGap 2.0.0

我有这个应用程序扫描嵌入了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

注意

  • vcard是vcard obj的键值对。请暂时忽略这一点。这并不重要。
  • 这段代码在android上运行良好。

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

欢迎任何帮助!我在这里需要一些亮点;)

修改

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

修改编辑

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

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

2 个答案:

答案 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权限一样。这应该可以解决你的问题,它确实适合我:)