OculusGoアプリのリリース用APK作成手順まとめ #OculusGoDev


OculusGoのベータテストをお願いしたい & ストアにリリースしたい場合の手順まとめです。
触ってみて思いましたが、Unityのバージョンによって起こる不具合もあるようなので
**作り込む前に一度リリースビルドの経験はしておいたほうが良い**気がします。

なおOculusのドキュメントの必要な箇所に翻訳を導入しています。
翻訳を参照したければ [taiyaq.com](https://taiyaq.com)をご利用ください。


# デベロッパーサイト側の設定

https://developer.oculus.com/ に入ります。すでにログイン済みだと仮定します。

<img width="800" alt="マイアプリ_-_Oculus_と_【Unity】GearVR_アプリを_Oculus_Store_に申請する（要件・仕様の概要）_-_ヽ｜∵｜ゝ_Fantom__の_開発blog？.png" src="https://qiita-image-store.s3.amazonaws.com/0/3844/263a6ff8-93f1-35cb-f71c-8fd30d290e9b.png">

左サイドメニューのManageという項目をクリックします。
新しいアプリを作成をクリックします。


<img width="400" alt="マイアプリ_-_Oculus.png" src="https://qiita-image-store.s3.amazonaws.com/0/3844/5ec88417-05ea-0ddc-c000-58b321a9ffd8.png">

今回はOculusGo用なのでMobileを選択します。

<img width="400" alt="マイアプリ_-_Oculus.png" src="https://qiita-image-store.s3.amazonaws.com/0/3844/d6f8562c-320d-9305-f609-4664453322c9.png">

アプリ名に対する指定については以下を参照してください。
https://developer.oculus.com/distribute/latest/concepts/publish-content-bp/
[翻訳はこちら](https://taiyaq.com/contents/5B1eW82X3G58Li3W9bZ4Y0rvvP)

以下のような命名基準があるようです。

- アプリケーションの目的、つまりアプリケーションの機能やアプリ内の体験を考慮する
- 「VR」および未所有商標の追加を避ける
- アプリの名前がす​​べてのロゴや視覚的なアセットに一致するようにする
- Oculusという言葉は使わない


![マイアプリ_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/67476018-4689-2e51-d347-2da6a04263e0.png)

自分の場合は安直にTestFlightとしました。

# Unity側の設定について

かなり面倒なことになりました。今回``Unity 2018.1.0f2``を使っていますが、``AndroidManifest.xml``がUnity側の設定を引き継いでくれない箇所がいくつかありますので手動での編集が必要となります。

その箇所については明示しますのでご注意ください。

## マニュフェストの設定

リリースビルドを行うためには署名が必要です。

Tools＞Oculus＞Create store-compatible AndroidManifest.xml
を実行します。

すると `Assets/Plugins/Android/AndroidManifest.xml`が作成されます。

## Unity 2018特有の手順

Unity 2017までは特に ``AndroidManifest.xml``の修正が不要でしたが、突然必要になったようです。

以下該当ソースになります

```Assets/Plugins/Android/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="(1)"
    android:versionCode="(2)"
    android:versionName="(3)"
    android:installLocation="auto"
>
    <application>
        <activity
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
            android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
            android:launchMode="singleTask"
            android:name="com.unity3d.player.UnityPlayerActivity"
            android:excludeFromRecents="true"
            
            >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.INFO"/>
            </intent-filter>
        </activity>
        <meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="false" />
    </application>
</manifest>

```

上記`(1)`,`(2)`,`(3)`はUnity側の以下の設定に対応します

<img width="419" alt="Unity_2018_1_0f2_Personal__64bit__-_stage5_unity_-_FPS2018_-_Android__Personal___Metal_.png" src="https://qiita-image-store.s3.amazonaws.com/0/3844/17cb1900-b2f9-7576-4816-9f9371d5151f.png">

(1): `Package name`
(2): `Bundle Version Code`
(3): `Version`

それぞれの値をマニュフェストに同期させてください。
この手動作業は暫定的だと期待したいところです。

## 署名の設定

今回はリリース用の署名の設定を行います。

こちらの手順書に丸投げします。
http://www.clrmemory.com/unity/android-get-keystore/

# デベロッパーサイトへの登録作業

Unityの設定が終わったらビルドを行います。

``File`` > ``Build Settings`` > ``Build`` 
``apk``の保存先が聞かれますので把握しておきます。

https://dashboard.oculus.com/ に入りログインを行います。

![TestFlight__ビルドダッシュボード_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/6544a506-4595-6d73-341b-051e28060ac3.png)

左サイドメニューから ``Manage`` > ``自分のユーザ名`` > ``アプリ名`` > ``ビルド`` を管理をクリックします。

今回はALPHAチャネルへのアプロードを行います。

![TestFlight__ビルドダッシュボード_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/f0b637e5-bf26-a45c-5204-66807a01d029.png)

![TestFlight__ビルドダッシュボード_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/ca9fda2d-9c3b-47a4-4ce6-9df329c78c7b.png)

上記画面に対して直接作成したAPKファイルをドラックします。


![TestFlight__ビルドダッシュボード_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/a1488bfe-c660-9a6b-baaa-8158a8d60af8.png)

アップロードが進行中です。

![TestFlight__ビルドダッシュボード_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/bd5c8180-8213-9d91-1438-8ffb73bb3cff.png)

上記のようにテストのステータスが``完了``になると成功です。

## アップロード後の失敗例

いくつか失敗したのでこちらにまとめます

### 間違って開発用APKをアップロード

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">OculusGoのリリースビルドができない。<br>エラー内容的にこの辺臭いけど<a href="https://t.co/5OImca564p">https://t.co/5OImca564p</a><a href="https://twitter.com/hashtag/OculusGoDev?src=hash&amp;ref_src=twsrc%5Etfw">#OculusGoDev</a> <a href="https://t.co/t09REk4qUd">pic.twitter.com/t09REk4qUd</a></p>&mdash; m0a (@abe00makoto) <a href="https://twitter.com/abe00makoto/status/1001171250721447936?ref_src=twsrc%5Etfw">2018年5月28日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

コメント内容は無視してください。開発時のapkを間違えてアップロードしていました。

### signature-schema-v1になっていない

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">まだ、マニフェストファイルまわりか <a href="https://t.co/YpaS5BESI7">pic.twitter.com/YpaS5BESI7</a></p>&mdash; m0a (@abe00makoto) <a href="https://twitter.com/abe00makoto/status/1001340137685463040?ref_src=twsrc%5Etfw">2018年5月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

上記の場合は以下の箇所を見直します。

<img width="369" alt="Build_Settings.png" src="https://qiita-image-store.s3.amazonaws.com/0/3844/70f6f82a-1133-30bf-d39d-acdefbd294fb.png">

``File`` > ``Build Settings`` にて ``Build System``を``Internal``に変えてください

**注意点** :
この対応は暫定対応です。元々Internalを使うのはよろしくないようです。以下の様な話があります

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">Unity標準がもうgradleに移行しているので、今後何かがあってもみんなシラネになるとこです（とくにAndroidのビルドツールが新しくなることによるエラーは直ることが期待できなくなります</p>&mdash; ようてん (@youten_redo) <a href="https://twitter.com/youten_redo/status/1002153885790650368?ref_src=twsrc%5Etfw">2018年5月31日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


参考：
https://answers.unity.com/questions/1395619/how-to-sign-gear-vr-apk-using-signature-schema-v1.html


### リリース用署名忘れ


<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">まだまだ <a href="https://t.co/OFl7t1txWZ">pic.twitter.com/OFl7t1txWZ</a></p>&mdash; m0a (@abe00makoto) <a href="https://twitter.com/abe00makoto/status/1001343093528973312?ref_src=twsrc%5Etfw">2018年5月29日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

上記は署名手順漏れの場合です。上述した署名の手順を忘れないでください

# テストユーザーを募る

![TestFlight__ビルドダッシュボード_-_Oculus.png](https://qiita-image-store.s3.amazonaws.com/0/3844/769cdb1b-805c-b4bf-ff56-143ba4ffcb14.png)

上記箇所をクリックすることでテストユーザーを募ることができます。
OculusGoに紐付いたメルアドを登録してください。

# テストユーザ側のインストール手順

開発者側だとユーザがどのようにインストールするのかわからないため、
[@oreno_dinnerさん](https://twitter.com/oreno_dinner)にインストール時の挙動をyoutubeにしていただきました。
Storeの後方に表示されるようです。

https://www.youtube.com/watch?v=rEmWpITbMIA&feature=youtu.be&t=7s

[@oreno_dinnerさん](https://twitter.com/oreno_dinner)ありがとうございました。


# 最後に

StoreチャネルにアップロードすることでStoreに出品が可能になりますが
レビューがあるためハードルが高いようです。ストアに登録できたらまた手順をまとめてみます。

参考:
https://qiita.com/T_2/items/0236162c294ffdf17ca8
http://fantom1x.blog130.fc2.com/blog-entry-258.html#oculus_store_flow