データの更新(追加・変更)
データを追加する場合のサンプルコードはリスト6のようになります。
// (1)Contactオブジェクトを作成
var item = navigator.contacts.create({
"displayName": $scope.model.displayName
});
// (2)氏名データを作成
item.name = new ContactName(
$scope.model.familyName + " " + $scope.model.givenName,
$scope.model.familyName,
$scope.model.givenName);
// (3)メールアドレスを指定
var emails = [];
emails[0] = new ContactField('other', $scope.model.email);
item.emails = emails;
// (4)電話番号を指定
var phoneNumbers = [];
phoneNumbers[0] = new ContactField('mobile', $scope.model.phone);
item.phoneNumbers = phoneNumbers;
// (5)連絡先データを端末に保存
item.save(function () {
// : (登録成功時の処理)
},
function (err) {
// : (失敗時の処理)
});
新規にデータを作成する場合、まずはContactクラスのインスタンスを作成する必要があり、(1)のようにcontacts.createメソッドを使います。このメソッドはネイティブコールをしない同期メソッドですので、すぐにオブジェクトが作成されます。そして、(2)では氏名データを作成するためにContactNameインスタンスを作成し、同様に(3)、(4)ではメールアドレス、電話番号のContactFieldインスタンスを作成し、それぞれを(1)で作成したインスタンスのプロパティに指定します。追加する場合には、(5)のようにsaveメソッドを使用します。また、更新の場合にも同じくsaveメソッドですが、その場合にはcontacts.findメソッドや、contacts.pickContactメソッドで取得したContactオブジェクトに対してsaveメソッドを実行すると更新されます。また、それらのオブジェクトのremoveメソッドを実行すれば削除することが可能です。
OSが提供するUIから選択する
OSが提供する連絡先一覧のUIから選択した連絡先データを取得するコードがリスト7のようになります。
// (1)UIの起動
navigator.contacts.pickContact(function(item){
// (2)選択したデータ
$scope.$apply(function(){
$scope.model = {
'displayName' : item.displayName,
'familyName' : item.name.familyName,
'givenName' : item.name.givenName
};
// (省略)
});
},
function(err){
// 省略
});
(1)のようにpickContactメソッドを実行するとOSの連絡先一覧UIが表示され、そのUI上から連絡先をクリックすると(2)のコールバック関数が実行されます。連絡先データを使ってほかのフォームへの入力支援などに使う場合などにはこのpickContactメソッドの方が使いやすいと思います。
最後に
連絡先データはこのようにアクセスでき、入力を支援するような使い方が簡単にできます。例えばECアプリなら配送先データなどを入力する手間などを省くことができます。しかし、連絡先データはスマホ内にあるプライバシーデータですので利用者が意図していない状態でアクセスすることは避ける必要があります。
また、AndroidやiOSなどでも多少形式が異なります。そして、必ずしも標準アプリから登録されるとも限らないためデータがどのような状態になっているのかは保証されません。従って、実際に利用する場合には、データの有無などを確認する必要があります。
次回はカレンダーにアクセスするプラグインを紹介します。
