開始方法
このドキュメントでは、Maps SDK の最新の安定バージョンをインストールし、Mapbox 依存関係をプロジェクトに追加して、Android アプリケーションで地図を素早く動作させる手順を説明します。
前提条件
- Mapbox アカウント: Mapbox で無料アカウントに登録するか、ログインしてください。
- Android 開発用 IDE: Android Studio のような Android アプリケーションを編集・ビルドするためのプログラム。
パート1: 認証情報の作成と設定
Maps SDK を使用してアプリケーションの開発を開始する前に、認証情報を作成して設定する必要があります。
SDK をインストールする前に、適切なクレデンシャルを集める必要があります。
この SDK は、Mapbox アカウントからの2つの重要な情報が必要です(またはサインアップしてアカウントを作成してください):
- パブリックアクセス トークン:アカウントのトークン ページから、デフォルトのパブリック トークン をコピーするか、 Create a token ボタンをクリックして新しいパブリック トークンを作成します。
Downloads:Read
スコープを持つシークレット アクセス トークン。- アカウントのトークン ページから、 Create a token ボタンをクリックします。
- トークン作成ページでトークンに名前を付け、
Downloads:Read
スコープの横のボックスがチェックされていることを確認します。 - ページの下部にある Create token ボタンをクリックしてトークンを作成します。
- 作成したトークンは シークレット トークン であるため、安全な場所にコピーする機会は一度だけです。
これらのアクセス トークンを、許可されていないユーザーが見つける可能性のある公開されたソースコードで公開しないでください。代わりに、コンピューター上の安全な場所に保存し、Gradle プロパティ を利用して、アプリがコンパイルされたときにのみそれらが追加されるようにします(次のセクションを参照)。
シークレット トークンの設定
シークレット トークンを公開しないように、環境変数として追加します:
- Gradle ユーザー ホームフォルダーに
gradle.properties
ファイルを見つけるか作成します。フォルダーは«USER_HOME»/.gradle
にあります。ファイルを見つけるか作成したら、そのパスは«USER_HOME»/.gradle/gradle.properties
でなければなりません。Gradle プロパティの詳細については、公式 Gradle ドキュメント を参照してください。 - シークレット トークンを
gradle.properties
ファイルに追加します:
MAPBOX_DOWNLOADS_TOKEN=YOUR_SECRET_MAPBOX_ACCESS_TOKEN
パブリック トークンの設定
SDK は、アプリのリソースを通じて、または実行時に設定することで、アクセス トークンを提供する複数の方法をサポートしています。
リソース
Mapbox SDK にパブリック トークンを提供する方法の一つは、Android 文字列リソース として追加することです。
これを行うには、アプリモジュール (例:app/src/main/res/values/mapbox_access_token.xml
) に新しい文字列リソース ファイルを作成し、パブリック Mapbox API トークンを配置します:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<string name="mapbox_access_token" translatable="false" tools:ignore="UnusedResources">YOUR_MAPBOX_ACCESS_TOKEN</string>
</resources>
この場合、アクセス トークンを回転させたい場合は、アプリを再リリースする必要があります。 アクセス トークンの回転に関する詳細は、アクセス トークン情報ページ を参照してください。
実行時
トークンを提供するもう一つの方法は、以下のコードを使って実行時に行う方法です:
MapboxOptions.accessToken = YOUR_MAPBOX_ACCESS_TOKEN
このオプションは、実行時にトークンを回転させたい場合や、トークンを apk に保存する代わりにバックエンドから取得したい場合に便利です。
SDK と通信する前に、トークン が有効であることを 設定する必要があることに注意してください。そうしないと、SDK はトークンを使用できません。
たとえば、ナビゲーション SDK の場合、最初にトークンを設定し、その後で初期化を行います。
マップ SDK の場合、MapView をインフレートする前に(Activity#onCreate
での setContentView
呼び出しかもしれません)、トークンを設定します。
一度実行時にトークンを変更すると、その時点からすべての SDK が新しいトークンを使用します。
たとえば、長期間実行されるアプリがあり、48時間ごとにトークンを回転させたい場合は、以下のようなアプローチを検討することができます:
- 初回アプリ起動時に、バックエンドへトークンのネットワークリクエストを行います。
- トークンを受け取った後、ナビゲーション コンポーネントをロードし、ナビゲーション SDK をインスタンス化し、MapView をインフレートします。
- アプリ ファイルにトークンを保存します。
- 次回アプリを起動する際に、ファイルからトークンを読み込みます。
- トークンが利用できない場合(例えば、アプリ データがクリアされている場合)、バックエンドへの別のリクエストを行い、ナビゲーション コンポーネントの読み込みを遅らせます。
- 48時間ごとに、バックエンドにトークンをチェックするリクエストを行います。
- トークンが変更された場合は、アプリのライフサイクルの任意の時点で、以下を呼び出します:
MapboxOptions.accessToken = YOUR_NEW_PUBLIC_MAPBOX_ACCESS_TOKEN
この時点から、すべての Mapbox SDK が新しいトークンを使用します。
- 新しいトークンをアプリのディレクトリに保存します。
トークンの新しい値を作成する方法についての情報は、アクセス トークン情報ページ を参照してください。
権限の設定
マップ上にユーザーの位置情報を表示するか、ユーザーの位置情報を取得する予定がある場合、アプリケーションの AndroidManifest.xml
に ACCESS_COARSE_LOCATION
の権限を追加する必要があります。正確な位置へのアクセスが必要な場合は、 ACCESS_FINE_LOCATION
権限も追加する必要があります。ユーザーが位置情報の権限を付与しているかどうかを確認し、まだ付与していない場合は PermissionsManager
を使用して権限をリクエストすることができます。
<manifest ... >
<!-- この権限は常に含める -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- アプリが正確な位置情報アクセスから利益を得る場合のみ含める -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>
パート2: 依存関係を追加
認証情報が準備できたら、プロジェクトに依存関係を追加しましょう。
Mapbox は Maven を介して Maps SDK を提供しています。
Maps SDK を依存関係として追加するには、ビルド設定を変更して、Mapbox Maven リポジトリから直接 SDK をダウンロードする必要があります。
Mapbox リポジトリへのアクセスには、有効なユーザー名とパスワードが必要です。前のセクションで、gradle.properties
ファイルにパスワードを追加しました(パート1: 認証情報の作成と設定 を参照してください)。これで、そのトークンを使ってリモートリポジトリにアクセスできます。
- Android Studio でプロジェクトを開きます。
- プロジェクトの
settings.gradle
ファイルに移動し、Gradle Scripts
セクションのsettings.gradle.kts
ファイルを開きます。 dependencyResolutionManagement.repositories
内に新しいmaven {...}
定義を追加します。以下のスニペットの隠された部分は、settings.gradle.kts
ファイルの一部で、スニペットをどこに配置するかを示しています。
- モジュールレベル の Gradle 設定ファイル(例:
app
>GradleScripts
>build.gradle.kts
)を開き、プロジェクトのminSdk
が 21 以上であることを確認します。
android {
...
defaultConfig {
minSdk 21
...
}
}
android {
...
defaultConfig {
minSdk = 21
...
}
}
- 同じ モジュールレベル (例:
app
>GradleScripts
>build.gradle.kts
)の Gradle 設定ファイルに、Android 用 Mapbox SDK の依存関係を追加します。
dependencies {
...
implementation 'com.mapbox.maps:android:11.9.0'
...
}
dependencies {
...
implementation("com.mapbox.maps:android:11.9.0")
...
}
- (オプション)Jetpack Compose を使用してアプリを構築する場合は、同じ モジュールレベル(例:
app/build.gradle.kts
)の Gradle 設定ファイルに、Mapbox SDK Jetpack Compose Extension の依存関係を追加します。
android {
buildFeatures {
compose true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.3.2"
}
}
dependencies {
...
implementation 'com.mapbox.maps:android:11.9.0'
// Compose を使用する場合、Compose 拡張機能も追加します。
implementation 'com.mapbox.extension:maps-compose:11.9.0'
...
}
android {
buildFeatures {
compose = true
}
composeOptions {
kotlinCompilerExtensionVersion = "1.3.2"
}
}
dependencies {
...
implementation("com.mapbox.maps:android:11.9.0")
// Compose を使用する場合、Compose 拡張機能も追加します。
implementation("com.mapbox.extension:maps-compose:11.9.0")
...
}
- Gradle ファイルを編集したので、Android Studio で File > Sync Project with Gradle Files をクリックしてください。
- 競合する推移的依存関係が発生する場合があります。必要に応じて、
exclude group
を使用して特定の依存関係を削除できます(推移的依存関係を除外 を参照)。 settings.gradle.kts
ファイルのユーザー名フィールドは常に"mapbox"
である必要があります。- プロジェクト全体で変更が同期されていない可能性がある場合は、File > Sync Project with Gradle Files を実行してください。
パート3: マップを追加
アプリケーションにマップを追加しましょう。これは 3 つの方法のいずれかで実行できます:
Jetpack Compose
Jetpack Compose
Mapbox Maps Compose 拡張機能を使用して、Composable にマップを追加できます。 build.gradle.kts` ファイルに次の行が含まれていることを確認してください:
implementation ("com.mapbox.extension:maps-compose:11.6.0")
Jetpack Compose Extension の使用
Mapbox Jetpack Compose Extension は MapView
をラップします。すべての API が Jetpack Compose Extension を通じて公開されているわけではないため、MapEffect
内で MapView
への参照を取得し、フル API サーフェスにアクセスできます。
MapEffect
内で MapView
API を使用すると、Compose の状態と競合する可能性があり、予期しないまたは未定義の動作につながる場合があります。次の例では、MapEffect
を使用してカメラの状態を制御しています。
Jetpack Compose 拡張を使用する
Mapbox Jetpack Compose Extension は MapView をラップしています。Jetpack Compose Extension ではすべての API が公開されていないため、MapEffect 内で MapView の参照を取得して、完全な API サーフェスにアクセスすることができます。
次の例は、MapEffect を使用してデバッグ機能をオンにする方法を示しています:
ビュー内のレイアウト: XML を使用する
XML レイアウト
アクティビティの XML レイアウトファイルを開き、レイアウト内に com.mapbox.maps.MapView 要素を追加します:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.mapbox.maps.MapView
android:id="@+id/mapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:mapbox_cameraTargetLat="39.5"
app:mapbox_cameraTargetLng="-98.0"
app:mapbox_cameraZoom="2.0"
app:mapbox_cameraPitch="0.0"
app:mapbox_cameraBearing="0.0" />
</FrameLayout>
ビュー内のレイアウト: 実行時にインスタンス化する
上記のいずれかの方法に従った後、コードの上の再生ボタンを押してエミュレータを起動できます。起動後、エミュレータには次のようにマップが表示されます:
実装が期待通りに動作しない場合は、トラブルシューティングセクションを確認してください:
トラブルシューティング
settings.gradle.kts
ファイルのユーザー名フィールドは常に "mapbox" にする必要があります。- 変更を見逃していないか確認するために、File > Save All をクリックしてください。
- プロジェクト全体で同期されていない変更があった場合に備えて、File > Sync Project with Gradle Files を実行してみてください。
- mapbox ライブラリがインポートされていない場合、以下を確認してください:
app/res/values/mapbox_access_token.xml
にトークンがあり、「YOUR_MAPBOX_ACCESS_TOKEN」と表示されていないことを確認してください。settings.gradle.kts
ファイルとbuild.gradle.kts
に必要な依存関係が追加されており、Part 2: Add the dependency で示されたサンプルスニペットと一致していることを確認してください。
- MainActivity ファイルに正しいライブラリがインポートされていることを、サンプルコードを参考に確認してください。
- デフォルトの Pixel Fold でマップが表示されない場合は、仮想デバイスを切り替えてみてください。
- 競合する伝播依存関係があるか確認してください。必要に応じて、exclude group を使用して特定の依存関係を削除できます(伝播依存関係の除外 を参照)。
次のステップ
マップが動作するようになったら、他の Android 関連コンテンツを読んでみてください:
マップにデフォルトのマーカーを追加する方法を学びましょう。
ユーザーの位置を特定し、プライバシー権を理解し、アプリにユーザー位置機能を追加する方法を学びましょう。