私はこれをPhoneGapgoogleグループに投稿し、StackOverflowにクロス投稿しました。
とにかく、PhoneGapのContactAPIは最近私に頭痛の種を与えています。短くするには:
環境
- 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');
そして、以下は、 「OK」をタップした直後に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は、vcardobjのキーと値のペアです。今のところこれは無視してください。大事なことじゃない。
- このコードはAndroidで正常に機能します。
これは連絡先を作成する正しい方法ですか?PhoneGapを使用してiOS6で連絡先を保存するにはどうすればよいですか?
編集
必要なすべての移行を行い、v2.1.0にアップグレードしましたが、それでもエラーコードが表示されます。どうしてこれなの?
編集
どうやらこれは、Markが述べたようにiOS 6での新しいAddressBook許可要求と関係があるようですが、それを正しく行う方法について誰も私に答えていません。調査に何度か費やしたところ、v2.2 rc2 commit 61857860のCDVContacts.mに許可要求が追加されているのを見て、Phonegapがv2.2を終了するのを待つことが最善であるという結論に達しました...