0

在 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 中添加了权限请求......

4

2 回答 2

2

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

如果用户在 iOS 6 上没有 AddressBook 权限,当前会崩溃。用户将看到一个类似于 Geolocation 权限对话框的弹出对话框。在创建通讯录时,我们应该处理应用没有权限,返回的通讯录为NULL的情况。

于 2012-10-26T19:38:11.650 回答
0

我有同样的问题。事实证明,我使用的是 phonegap 1.9 版,它不支持 iOS 6,因此添加联系人总是给我错误 4 消息。为了解决这个问题,我升级到 phonegap 2.1 版。此版本支持 iOS 6 以及 armv6 和 armv7 架构。错误消息是因为 iOS 6 需要权限才能访问地址簿,就像在 iOS 上使用 GPS 需要权限一样。这应该可以解决您的问题,它对我有用:)

于 2013-01-11T13:21:49.390 回答