【初心者向け】Azure Spatial Anchorsを共有するAndroid アプリを作成する

## はじめに
[Azure Spatial Anchorsのチュートリアル](https://docs.microsoft.com/ja-jp/azure/spatial-anchors/tutorials/tutorial-share-anchors-across-devices?tabs=VS,Android)を行うと、時間が経過しても他デバイスとSpatial Anchorsのデータを共有できるアプリを作成できます。しかし、この記事だけで進めていこうとするとつまる部分も出てきました。
そこで、この記事では実際に行った際の難しかった点を中心に、チュートリアルの手順を解説していきます。

## 開発環境
 - Visual Studio 2019以降とASP.NETおよび Web の開発ワークロードがインストールされている Windows コンピューター
 - .NET Core 3.1 SDK
 - Android Studio 4.1
 - Git for Windows
 
## Azure Spatial Anchorsを作成する
Azure ポータルでSpatial Anchorsを作成します。
**リソースの作成**から、**Spatial Anchors**を選択し、作成ボタンを押します。**Spatial Anchorsアカウント**のウィンドウに移動します。
リソース名など設定項目は特に指定はありません。ただし、ここで作成したらもう使わない、と決めているなら削除しやすいようにリソースグループは新規作成すると便利です。
**新規**を選択するとリソースが作成されます。少し待つと、デプロイ完了の表示が出てきます。これで完成です！

この後使用するので**リソースに移動**ボタンをクリックし、**概要**の**アカウントID**と**アカウントドメイン**、**設定**の**キー**にある**プライマリーキー**の値をコピーしてそれぞれメモ帳などに残しておいてください。

## サンプルプロジェクトのダウンロード
Git for Windowsを使って、以下のコマンドを実行します。実行できると**サンプルフォルダ**が複製されます。（Git for Windowsの初心者だったので、使い方に手間取りました……初心者の方は[このサイト](https://eng-entrance.com/git-install)を参考にインストール、初期設定してみてください。）

    git clone https://github.com/Azure/azure-spatial-anchors-samples.git
    cd ./azure-spatial-anchors-samples

次にAndroid Studioを開きます。リボンにあるFileから、Openを選択し、複製したサンプルフォルダの**Android/Java**プロジェクトを開きます。その中から、**Android/Java/app/src/main/java/com/microsoft/sampleandroid/AzureSpatialAnchorsManager.java**ファイルを開きます。

ここで先ほどコピーした値を、ファイルに書き換えていきます。

**SpatialAnchorsAccountKey** フィールドは**プライマリーキー**に、**SpatialAnchorsAccountId** フィールドは**アカウントID**、
**SpatialAnchorsAccountDomain** フィールドは**アカウントドメイン**に
それぞれset meを置き換えます。

## データベースの作成
Azure Cosmos DBを作成します。
こちらも設定項目に指定はありません。ただしなるべく安く済ませるために、**geo 冗長性**、**マルチリージョン書き込み**オプションを 無効にしてください。
**確認と作成**をクリックして作成します。作成されてからリソースに移動し、**接続文字列**の値をコピーします。

サンプルフォルダ内の**SharingService\Startup.cs**をVisual Studioを開きます。ファイルの先頭にある**♯define INMEMORY_DEMO** をコメントアウトします。
同様に、**SharingService\appsettings.json**を開きます。**StorageConnectionString**プロパティの値を、コピーした**接続文字列**に変更します。

ファイルを全て保存できたらOKです。

## アンカー共有サービスのデプロイ
サンプルフォルダ内にある、Sharing\SharingServiceSampleのプロジェクト**SharingService.csproj**をVisual Studioで開きます。
ソリューションエクスプローラー内にSharingServiceSampleプロジェクトが出ているので、右クリックで**発行**を選択します。App Service、発行の順に選択し、**App Service の作成**ウィンドウを開きます。
開けたらAzureにログインし、App Serviceプランを作成していきます。余計な料金がかからないように、サイズをFreeにすることをお忘れなく！

次に、Webアプリを作成して発行します。アプリ名を決定して、作成をクリックして作成していきます。リソースの作成が終わったら公開設定が出てくるので、発行をクリックするとアプリがブラウザで開けます。

**https://<<アプリ名>>.azurewebsites.net**となっているURLはコピーしておいてください。

## サンプルアプリのデプロイ
Android Studioでサンプル フォルダーから、**Android/Java/app/src/main/java/com/microsoft/sampleandroid/SharedActivity.java**ファイルを開きます。
SharedActivity.java ファイルの**SharingAnchorsServiceUrl**の値を、先ほどコピーしたURLにします。この時、URL を**https://<<アプリ名>>.azurewebsites.net/api/anchors**のように、末尾に**api/anchors**を追記して変更します。

最後に、アプリをデバイスにデプロイします。Android Studioでアプリをデプロイするのが初めての場合は、**AVD Manager**からデバイスに合わせたAVD（アンドロイド仮想デバイス）を作成します。これを行わないと、アプリをデバイスで動かせないです。

Android Studioの上部に「app」と「自分のデバイス」が表示されていたら準備完了です。実行ボタン（再生ボタンのようなもの）をクリックすると、デバイスにビルドされます。

デバイスに表示される4つのボタンから、**Shared**を選択してから**Create**を選択すると、アンカーの作成を行います。作成したアンカーを呼び出すのは**Locate**です。

また、アンカーを保存・呼び出すのにはデバイスのインターネット接続が必須です。上手く保存できない時は接続状況も確認してみてください。

## まとめ
これでアンカーを共有できるようになりました。
余談ですが、共有したいアンカーを選択するとそこに黄色の球体が出てくるのですが、保存完了すると緑色に変化します。ですが、保存されるのは黄色の球体です。