パソコンには真似できないスマホアプリの利便性として、「地図アプリ」との連携がありますね。今回はそんな地図を用いたアプリ開発に必要なGoogleMapを利用する方法を解説していきます。
まずはいたって普通に新規プロジェクトを作りましょう。
プロジェクトの形式として、
GoogleMapsActivityが選べるので、コチラを選択。
プロジェクト設定。
特にMAP特有の項目はありません。
普通にAndroidStudioが立ち上がってきます。
いよいよ開発に取り掛かりましょう!
MapsActivity.java
最初に呼び出されるメインクラス的なモノです。
最初から「GoogleMap型」の変数mMapと、OnCreate&OnMapReady関数が定義されています。
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_maps); // Obtain the SupportMapFragment and get notified when the map is ready to be used. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } @Override public void onMapReady(GoogleMap googleMap) { mMap = googleMap; // Add a marker in Sydney and move the camera LatLng sydney = new LatLng(-34, 151); mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney")); mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney)); } }
細かいことは置いておいて、超大雑把に説明すると、OnCreate関数は初期化時に実行され、画面にMapを表示します。OnMapReady関数は、Map表示後に実行され、シドニーの位置にピンを立てて、カメラを移動しています。
とりあえずこのまま起動すれば、地図が開いてシドニーが見れるアプリが既に出来あがっているんです!
しかし、このまま起動しても地図は表示できません。
むー?
無地・・・。
GoogleCloudPlatformにて、ライセンス認証が必要になるためです。
右上のログインから、Googleアカウントでログインしましょう。
持っていない場合はまずはアカウント登録から必要です。
(とりあえずMapアプリで遊ぶ程度なら、無料です)
ログイン後、コンソールをクリックするとこのような画面になります。
タイトルの右側のあたりをクリックして、プロジェクトの選択画面を開き、
右上の「新しいプロジェクト」を選択します。
続いて、プロジェクト名を入力します。なんでもいいです。
ホームに戻ったら、タイトル左側のメニューを開く。
ずっと下の方のGoogleマップから「API」
MapsSDKforAndroidを選択⇒有効にする
ダッシュボードに戻ったら、左メニューの「認証情報」
同意画面の構成を選択
UserTypeはとりあえず「外部」を指定で作成ボタン。
プロジェクト名だけは必須項目です。ここには、先ほどAndrodiStudioで作成したプロジェクト名と同じものを指定しましょう。
戻ったら、再び認証情報メニューを開いて、「認証情報の作成」⇒APIキー
すると、ポップアップで発行されたAPIキーが確認できると同時に、
ダッシュボードからもキー番号が確認できるようになります。
この番号は、ユーザーを識別するキーな上、請求情報とも紐付くため、不用意に公開してはいけません。
AndroidStudioに戻ります。
実はプロジェクト作成時に、「google_maps_api.xml」というファイルも開いた状態になっていると思います。このファイルに以下の記述があります。
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">YOUR_KEY_HERE</string>
この「YOUR_KEY_HERE」の所を、先ほど発行したばかりのAPIキーに上書きます。
そうしたら、保存をして、アプリをエミュレーター起動してみましょう!
おぉ~
今度はちゃんと地図が出ますね~
なお、エミュレーターは2020年時点、最新のAPI30 を利用しました。
何やら古いバージョンだと、GooglePlayServiceがなんか変だぞ、的なことを言われて、MAPが開きませんでした。この場合、エミュレーターを作り直すと良いかもです。
ここで発行したAPIキーですが、Googleが提供する各種ライブラリを利用するための免許証みたいなものです。場合によっては、ライブラリの利用が従量課金の場合もあるので、その時には、請求先と紐付けて管理されます。
従って、このキーは公開すると、不正利用などの恐れがありますので、管理にはご注意ください。例えば、GitHub等でソースを共有する場合などには、google_maps_api.xmlは公開対象から外さないと、誰かに盗み見られてしまう危険があります。
でもこれ、プロジェクト名しか指定してないけど、どこで一意性を担保しているの?
と疑問に思うもしれませんが、実が裏でプロジェクト名+6桁の識別番号が振られています。Googleの中の人は、この識別IDとAPIキーの組み合わせでアカウント管理をしているようです。
なので、プロジェクト名だけ同じにしても、APIキーを使いまわすことはできません。例えば、仲間内でマップソフトを共同開発するから、ソースを共有したいんだよね~、という話になっても、APIキーは1台の開発端末にしか許可されていないので、仲間のパソコンにソースをそのまま持って行ってエミュレートしても、地図は”無地状態”になってしまいます。
この解消方法、なにやらキーと認証情報を丸ごとコピーして共有する方法があるようなのですが、いまだに成功せず・・・
とりあえず、Mapを使ったソフトの共同開発はメンドクサイゾ、、、とだけ覚えておきましょう^^;