アンドロイドには、連絡帳や連絡先と呼ばれるアプリが標準で付属しています。このアプリは、「連絡先(Contact)」の情報を表示編集するものですが、アンドロイド自体がContact情報を扱う機能を持っており、このアプリや電話アプリ、GMailやメールといったアプリは、この連絡先情報を扱うことができるようになっています。
さまざまなアプリで連絡先情報を扱うことは初期のアンドロイドでもできたのですが、もともとは、単に連絡先アプリが管理していた情報を他のアプリで参照するための機能でしたが、現在では、複数の連絡先情報を統合して扱うことができるアンドロイドというシステム自体が持つ機能に進化してきました。たとえば、Skypeといったサービスが持つ連絡先情報も同時に扱えるようになっています。逆に現在の連絡先アプリは、アンドロイド自身が持っている「連絡先」情報を表示するためのアプリになっています。
まず、連絡先の情報は、Googleのアドレス帳(GMailのアドレス帳)だけでなく、Google+やSkype、Exchangeサービスなどがそれぞれに持っています。アンドロイドでは、連絡先などの情報を利用するアプリに対しては「Content Provider」という仕組みを通して連絡先などの情報を提供するとともに、それぞれのアカウントが持つ連絡先の提供元となるサービスとは、「Syncアダプタ」と呼ばれる仕組みを使って、情報を入手します(図01)。この仕組みを管理するのが、アンドロイドの設定ページにある「アカウントと同期」です。ここでは、さまざまなサービスのアカウント管理とそこから提供されるデータ(Content)を同期する仕組みをサービスごとに管理できるようになっています。
図01: 連絡先情報はContacts Providerがとりまとめアプリケーションに連絡先情報としてまとめて提供する。各連絡先ソースへのアクセスはSync Adapterと呼ばれるソフトウェアモジュールが個別に行う。図は、https://developer.android.com/からのもの |
たとえば、Googleの場合、1つのGoogleアカウントに対してGMailやGoogle+などの様々なサービスが対応し、それぞれが提供するContentに対して「同期」の設定が可能です。連絡先情報は、GMailやGoogle+(サークル設定)が持っており、1つのアカウントでも、別々のソースからの連絡先情報としてContent Provider側で処理されます。特に連絡先情報を扱う「Content Provider」を「Contacts Provider」といいます。
複数ソースからの連絡先情報があるので、各ソースからの連絡先情報は、「Contact」という情報として扱われますが、これは、「raw contact」と呼ばれる各ソース(Contacts Provider)から得た連絡先情報を集約したものです(図02)。集約には、名前を基本として自動的に行われる集約と、連絡帳アプリなどでユーザーが明示的に指定した「統合/分割」の2種類があります。
図02: 1つのコンタクト情報は、連絡先ソースからの複数のraw contactを統合したものになる可能性がある。同様に図はhttps://developer.android.com/からのもの |
自動集約は、同じ名前で項目を統合するものですが、米国の名前がベースに考えられているため、姓と名前が逆順や愛称(WiliamがBillと呼ばれるなど)を考慮して統合が行われるようです。また、名前がない項目などでは、同じニックネームや同じメールアドレス、電話番号などでも集約が行われるようです。また、日本以外の電話番号については、電話番号を解釈して国番号の有無にかかわらず同一性の判定が行われるようです。これは、同じ電話番号に国番号がついているものとそうでないものがあっても、ちゃんと同一の番号かどうかを区別することができるようです。日本が除かれているはっきりした理由はわかりません。この集約に関しては、SDKの文書などで、ルールが書かれていたのですが、現在では、公式文書に統合化の明示的なルールは表記されていません。
過去にContacts APIの解説に記載されていた統合を行うルールは以下のようなものです。
- 名前(姓と名)が同じ
- 名前を構成する単語が同じだが順番が違う
- 片方がもう一方の「short name」(愛称)になっている
「Bob Parr」と「Robert Parr」が例示 - 片方が一致する姓か名のどちらかしかない場合で、電話番号やメールアドレス、ニックネームが一致
- 片方に名前がないが、電話番号、メールアドレス、ニックネームが一致する場合
また、名前の一致を見る場合には、大文字小文字は区別されず、ダイアクリティカルマーク(アルファベットに付く発音を区別するウムラウトやアキュートなどの記号)も無視されます。また電話番号の比較では「*」、「#」、「(」、「)」やスペース文字も無視されるとされています。
ざっとみた感じ、基本的には、このルールはまだ利用されている感じです。ただし、現在では、FacebookもTwitterも連絡先情報をContent Providerとして提供していないため、主なソースとしては、Google(GMail)、Google+(サークル)、Skypeなどが主なソースとなっています。
また、SkypeなどのサードパーティのContact Providerでは、サービスとして管理している連絡先情報のすべてを提供しているわけではないようです。たとえば、Skypeのアドレス帳には、SkypeのID以外に電話番号などを登録できますが、アンドロイドの連絡帳で見る場合には、電話番号などは見えなくなっています。連絡先情報をどのように提供するのかは、Content Provider次第です。一般にContent Provider部分のソフトウェアは、サービスの提供元がアンドロイド用に提供します。
このため、前述の自動統合のルールは現状では主にグーグルアカウント間(現在のアンドロイドでは複数のグーグルアカウントを登録可能)やGoogle+の間で主に利用されている感じです。なお、この統合は、あくまでもアンドロイドの中で行われるものであるため、GMailのアドレス帳では統合前の状態の連絡先しか見ることはできません。ただし、アンドロイド側で、Googleアカウントの情報を変更すれば、それはGMailのアドレス帳に反映されます。
一般に、SNSや通話アプリなどでは、相手の名前として表示されるのは、相手がアカウント登録で付けた名前(ニックネーム)になります。しかし、GMailなどのアドレス帳では、アドレス帳に登録するときにユーザーが自由に名前を付けることができます。このため、必ずしも自動統合がちゃんと動作するわけではありません。多くの場合、ユーザーが明示的に統合を指示してやらないと、それぞれのサービスからの連絡先情報がバラバラに入ってしまいます。
ただ、Google+などのSNSでは、面識がなくてもサークルに登録することもあり、登録しているからといって必ずしも「知人」や「友人」であるとは限りません。こうした問題に対応するため、連絡先アプリなどでは、表示対象にする「Contact Provider」(対象になるアカウント)や、それぞれが提供するカテゴリを指定することができます。
「連絡帳」アプリでは、メニューを開くと「表示する連絡先」(写真01)という項目があり、これを使うことで、表示するContact Providerを1つに絞るなどさまざまな設定が可能です。通常は「すべての連絡先」か「Google」にしておくのが無難ですが、複雑な指定には「カスタマイズ」を選び、各アカウントが提供するカテゴリ単位でオンオフを指定できます(写真02)。
写真01: 連絡先アプリの「表示する連絡先」では、システムに登録されているContacts Providerから表示する連絡先ソースを選択できる |
写真02: 「カスタマイズ」では、各連絡先ソースごとに提供されているカテゴリ単位で表示をオンオフできる |
統合が行われた項目は編集状態にすると、複数の連絡先ソースに別れた形で編集が可能になります(写真03)。ただし、連絡先ソースによっては情報がリードオンリーと設定されていて、内容の変更ができない部分もあります。
もし、Google+などに実名以外を登録しているユーザーが知り合いで、Google+では公開されていない電話番号などの情報を持つ場合、名前としてGoogle+と同じ名前を使ってGMailのアドレス帳に登録を行い、自動統合を利用するか、本名でGMailのアドレス帳に登録を行い、手動で統合するかどちらかの方法が利用できます。なお、自動でも手動でも一回統合が行われると、編集でGooleアカウント側の名前を変更することも可能になるので、本名に書き換えておくといいでしょう。