UE5でMetaQuestのEntitlement Checkを実装する

# 概要
UE5でMetaQuestのEntitlement Checkを通すのに苦労したので忘備録も兼ねてやり方を記載しておきます。

基本は公式のページを参考にすれば良いはずです。
https://developer.oculus.com/documentation/unreal/unreal-engine/

# Oculus VR 用のUE5をビルドする
UE5以降ではOculusVR Pluginがディスコンになっており、代わりにMetaXR Pluginを利用します。その為にはOculus-VR用にforkされたUnrealEngineを取得し、ソースビルドする必要があります。現時点ではEpic Games Lancherから取得したUnrealEngineではMetaXR Pluginを利用する事が出来ないのでOculus Storeに提出するのに必要な機能（Entitle Ment Check）が実装できません。
ソースは下記から取得します。なお、現状ではUE5.0.3までしか対応していません。
https://github.com/Oculus-VR/UnrealEngine/tree/oculus-5.0.3-release-1.79.0-v47.1

ここからUnrealEngineソースを取得し、VisualStudioでビルドします。私の環境ではVisualStudio2022でビルドできました。

# Entitlement Checkを実装する
* 必要なプラグイン
PluginsのMetaXR PluginとOnline Subsystem Oculusを有効にします。

* ブループリント
VerifyEntitlementノードにてEntitlement Checkを行います。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116884/c4960c70-f0cb-bfb7-f28a-d3dc260c168e.png)

* iniファイル設定
DefaultEngine.iniファイルに下記を追記します。MobileAppIdはMetaQuest Developer Centerで作成したアプリのIDとなります。アプリIDはMetaQuest Developer Center→マイアプリ→APIから確認できます。

```ruby:GameEngine.ini
[OnlineSubsystem]
DefaultPlatformService=Oculus
bHasVoiceEnable=true

[OnlineSubsystemOculus]
bEnabled=true
MobileAppId=xxxxxxxxx
```

# android(Meta quest)ビルド
インストールしたエンジンの下記batファイルを利用してAndroidビルド環境を設定します。
**\Engine\Extras\Android\SetupAndroid.bat

batファイルにAndroid Studioのpath情報等の設定を追記します。
```ruby:SetupAndroid.bat
set STUDIO_PATH=C:\Program Files\Android\Android Studio
set JAVA_HOME=C:\Program Files\Android\Android Studio\jre
```

* Android SDK等の設定
SDK, NDK等の設定は下記のように設定しました。
![スクリーンショット 2022-12-23 001046.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116884/7e36a29b-74bb-b8d9-af70-f05bdb21c151.png)

Minimum SDK VersionとTarget SDK Versionは下記のように設定しました。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116884/519f6bd3-a7f3-adca-acee-1a1f996cf8ae.png)

* 署名
下記のマニュアルを参考にします。
https://docs.unrealengine.com/5.0/ja/signing-android-projects-for-release-on-the-google-play-store-with-unreal-engine/

* manifestファイル
Entitlement Checkを行うにはMetaQuest Developer CenterにてAlphaリリースチャンネルにapkをアップロードする必要がありますが、その為には幾つかAndroidPermissionを設定する必要があります。UEにてAndroidPermissionを設定する方法を調べたのですが、下記redditのリンク先のAndroidPermissionプラグインを利用させていただきました。下記サイトにダウンロードリンク先があるので、それをダウンロードします。

https://www.reddit.com/r/unrealengine/comments/s6x5p4/your_manifest_includes_the_following_permissions/

プラグインの中の下記ファイルに、下記設定を記載します。
```ruby:RemoveAndroidPermissions.UPL
<?xml version="1.0" encoding="utf-8"?>
<root xmlns:android="http://schemas.android.com/apk/res/android">
	<androidManifestUpdates>
		<removePermission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
		<removePermission android:name="android.permission.WAKE_LOCK" />
		<removePermission android:name="android.permission.READ_EXTERNAL_STORAGE" />
		<removePermission android:name="android.permission.ACCESS_MEDIA_LOCATION" />	
	</androidManifestUpdates>
</root>
```
* Landscape
Setting→Platform AndroidにOrientation項目があり、これをLandscapeに設定します。

* ビルド
下記を参考にビルドします。
https://developer.oculus.com/resources/publish-mobile-manifest/#unreal

# Alphaリリースチャンネルにアップロード
https://developer.oculus.com/documentation/unreal/unreal-platform-tool/
公式のマニュアルに書いてあるUEから利用できるOculus Platform Toolが使えない（利用しようとするとUEがクラッシュする）ので、MetaQuest DeveloperツールでAlphaチャネルにapkをアップロードします。

# Entitlement Checkを検証する
正しくアップロードされていればMetaQuestに自動でインストールされ、エンタイトルメントチェックの動作確認をする事ができます。