Oculus Store 申請時に対応必須の Entitlement Check について

# はじめに

Oculus Store へアプリを申請する場合は、
`Entitlement Check` という仕組みを導入する必要があります :white_check_mark:
 
`Entitlement Check` とはユーザがアプリを起動する際に、
Oculus Store 経由で公式に配布されているものかを確認する仕組みになります :mag: 

`Entitlement Check` に通らなかったアプリは不正なコピーとみなされ、
アプリが強制終了される必要があります :x: 

そこで本記事では、`Entitlement Check` の実装方法について書いていきます :pencil: 

なお既に [Oculus Developer のページ](https://dashboard.oculus.com/) からアプリの作成は完了済みで、
Unity プロジェクトに [Oculus Integration](https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022) も導入済みの状態を想定しております :raised_hand: 

# Entitlement Check に必要な設定を行う

まずは `Entitlement Check` を行うのに必要な情報を設定していきます :gear: 
Unity プロジェクトを開いたら `Oculus -> Platform -> Edit Settings` を開きます :arrow_down: 

<img width="280" alt="スクリーンショット 2019-12-08 16.50.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86070/52b13ccd-eb3c-03f7-b1e7-a15b4faba04d.png">

すると Inspector に `OculusPlatformSettings` が出てくるので、
`Application ID` の欄に アプリ ID を入力します :writing_hand: 

<img width="341" alt="スクリーンショット 2019-12-08 17.08.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86070/ba3a3092-d2a5-cf3c-801b-45ab59d4a9ce.png">

アプリ ID は Oculus Developer の該当アプリページの左メニューの
`API について` リンクをクリックすると確認することが出来ます :pencil: 

![スクリーンショット 2019-12-08 17.20.26_toy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86070/6c9f6744-f014-434e-7532-ed8973cd3c22.png)

# Entitlement Check を行うためのスクリプトを追加する

実は既に公式が [Entitlement Check のサンプルコード](https://developer.oculus.com/documentation/platform/latest/concepts/pgsg-unity-gsg/#entitlement-check-sample-code) を公開しているので、
そのまま `Entitlement Check` を行うためのスクリプトとしてプロジェクトに追加します :thumbsup: 

`Entitlement Check` を行うサンプルコードは MonoBehaviour を継承しているので、
アプリ起動時のシーンに配置している適当な GameObject に追加しておきます :clipboard: 

<img width="340" alt="スクリーンショット 2019-12-08 21.23.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86070/a63ad168-6a67-5925-0a85-4c680a8bae26.png">

これだけで `Entitlement Check` の対応は完了です :thumbsup:  :astonished: 

筆者は `Entitlement Check` の処理をサンプルコードを流用する形で実装しても、
Oculus Store の審査を落とされてしまうということはありませんでした :raised_hand:  

# Entitlement Check の動作確認を行う際の注意点

`Entitlement Check` はストア申請に通ったタイミングで動作確認が可能となるため、
開発時や検証段階では、常にアプリ起動時に資格チェックが通らずにアプリが終了し、
`Entitlement Check` が正常に機能していないように見えてしまうかもしれません。。 :bomb: 

しかし、Oculus アカウントでログイン済みの Oculus 機器があれば、
資格が付与された状態での `Entitlement Check` の動作確認が可能となるため、
資格チェックが通った正常時の状態で動作検証を行うことが可能です :thumbsup: 

筆者は上記挙動が分かっていなかったため、
延々と資格チェックが通らない原因の調査に時間を費やしてしまいました。。:money_with_wings:

# おわりに

今回は対策を忘れがちな `Entitlement Check` の方法についてご紹介しました。

`Entitlement Check` は動作検証や βテストの際には実装していなくても問題にならないため、
Oculus Store 申請作業の直前や提出時に対策してないこと発覚しがちなので、
アプリ作成時に予め実装しておくよう心がけると心理的安全性が保たれると思います :thumbsup: 

また、
`Entitlement Check` の資格チェックが正常に行われているかどうかの確認については、
[Entitlement Check の動作確認を行う際の注意点](# Entitlement Check の動作確認を行う際の注意点) でご紹介した通り、注意が必要です :white_check_mark: 

# 参考リンク

- [OculusPlatformについて](https://qiita.com/yuma1217/items/5dca28e0b99f59d9edc5)
- [Unity Development - Get Started with Platform SDK](https://developer.oculus.com/documentation/platform/latest/concepts/pgsg-unity-gsg/#entitlement-check-best-practices)
- [Entitlement Check Sample Code](https://developer.oculus.com/documentation/platform/latest/concepts/pgsg-unity-gsg/#entitlement-check-sample-code)