Goolgeは、米国にて2015年12月17日より、アプリ内でユーザーが場所や住所を素早く入力できる機能を提供開始したと発表しました。この機能は、ユーザーが場所の地名や名前、住所を入力している途中で、自動的に補完するオートコンプリート機能であり、2つの方法で提供しています。
そもそもオートコンプリートとは
まずそもそもオートコンプリートとは何か、ですが検索キーワードを入力した際に出てくる予測キーワードの表示機能のことです。
検索ボックスに入力すると、入力しているキーワードと似ている予測キーワードが表示されるので、すばやく情報を見つけることができます。たとえば、「ニューヨーク」と入力するにつれて、ニューヨークに関連する他の検索キーワードが表示される場合があります。
オートコンプリート ウィジェットとは
Googleが今回発表したオートコンプリート ウィジェットのUIには、オーバーレイとフルスクリーンの2つのタイプがあります。
オーバーレイタイプのオートコンプリート ウィジェット
フルスクリーンタイプのオートコンプリート ウィジェット
Andoridでは、オートコンプリート ウィジェットは画面制御の動作のため、フラグメントとして追加することで実装可能となっています。イベントリスナーを追加し、オートコンプリートされたプレイスのリファレンスをアプリケーションで受け取る仕様です。
アクティビティのXMLレイアウトファイルにフラグメントを追加する方法:
<fragment android:id="@+id/place_autocomplete_fragment" android:layout_width="match_parent" android:layout_height="wrap_content" android:name="com.google.android.gms.location.places.ui.PlaceAutocompleteFragment" />
オートコンプリート ウィジェットをインテントで起動するこもできます。インテントについて、詳しくはこちらをご確認ください。
なぜアプリのオートコンプリートを強化したのか
今回なぜGoolgeはアプリ内での場所や住所の検索機能を強化したのでしょうか?それは、ユーザー体験の向上を目的としたものであると思います。最近AMPプロジェクトなど、モバイル上での体験を高速化させ、ユーザー体験を向上させる試みが数多く実施されています。
この動きはGoolgeに限らず、Facebookなどほかの競合企業も同様です。Facebookで言えば、Instant Articleというニュース記事をFacebookアプリ内で閲覧できるサービスを展開中です。あらゆる企業が、モバイルでの高速化を目指してさまざまな施策を打っているのです。
実装方法まとめ
ここからは、実際にプログラムで上記のオートコンプリートを実装する方法を見ていきます。
まず、アクティビティのonCreate()メソッドにイベントリスナーを追加する方法:
// PlaceAutocompleteFragment fragment = (PlaceAutocompleteFragment) getFragmentManager().findFragmentById(R.id.place_autocomplete_fragment); fragment.setOnPlaceSelectedListener(new PlaceSelectionListener() { @Override public void onPlaceSelected(Place place) { // 選択したプレイスを処理 } @Override public void onError(Status status) { // エラーを処理 }
オートコンプリート ウィジェットを起動するインテントを作成する方法:
try { Intent intent = new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN) .build(this); startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE); } catch (GooglePlayServicesRepairableException e) { GooglePlayServicesUtil .getErrorDialog(e.getConnectionStatusCode(), getActivity(), 0); } catch (GooglePlayServicesNotAvailableException e) { // 例外を処理 }
iOS(Objective-C)では、オートコンプリートのデリゲートを実装してプレイス選択に対応します。
@interface MyViewController () @end @implementation ViewController . . . - (IBAction)onLaunchClicked:(id)sender { // ボタン押下時にオートコンプリート ビュー コントローラーを表示 GMSAutocompleteViewController *acController = [[GMSAutocompleteViewController alloc] init]; acController.delegate = self; [self presentViewController:acController animated:YES completion:nil]; } - (void)viewController:(GMSAutocompleteViewController *)viewController didAutocompleteWithPlace:(GMSPlace *)place { // ユーザーがプレイスを選択 [self dismissViewControllerAnimated:YES completion:nil]; } - (void)viewController:(GMSAutocompleteViewController *)viewController didAutocompleteWithError:(NSError *)error { [self dismissViewControllerAnimated:YES completion:nil]; } // ユーザーがキャンセル ボタンを押下 - (void)wasCancelled:(GMSAutocompleteViewController *)viewController { [self dismissViewControllerAnimated:YES completion:nil]; } @end
Swift の場合:
import UIKit import GoogleMaps class MyViewController: UIViewController { @IBAction func onLaunchClicked(sender: AnyObject) { let acController = GMSAutocompleteViewController() acController.delegate = self self.presentViewController(acController, animated: true, completion: nil) } } extension MyViewController: GMSAutocompleteViewControllerDelegate { func viewController(viewController: GMSAutocompleteViewController!, didAutocompleteWithPlace place: GMSPlace!) { // ユーザーがプレイスを選択 self.dismissViewControllerAnimated(true, completion: nil) } func viewController(viewController: GMSAutocompleteViewController!, didAutocompleteWithError error: NSError!) { self.dismissViewControllerAnimated(true, completion: nil) } func wasCancelled(viewController: GMSAutocompleteViewController!) { self.dismissViewControllerAnimated(true, completion: nil) } }
Place Pickerにもオートコンプリート機能が
今回の目的として、場所名や住所、地図上の位置など、ユーザーの現在地を知らせるのに便利なUIウィジェットPlace Pickerにもオートコンプリート機能が実装されています。ユーザーは場所名や住所の一部を入力するだけで、目的の場所を素早く選択できるメリットがあります。
ちなみに、すでにアプリでPlace Pickerを利用している場合は、移動的にオートコンプリート機能が実装されるとのことです。開発者は何も対応する必要がありません。
モバイルアプリで場所や住所の入力を容易にするオートコンプリートウィジェットをリリース - Google Developers Japan