見出し画像

【Magic Leap】Conceptsアプリ申請方法

これまで Magic Leap の様々なノウハウを更新してきましたが、今回は Magic Leap World Concepts からのアプリの申請・公開方法についてまとめてみました。

みなさんのお役に立てれば幸いです。

Conceptsアプリ / Magic Leap World Concepts とは?

Magic Leap Worldには、アイディアレベルのアプリケーションを公開できる場が提供されています。これをConceptsと呼びます。

Magic Leap社としては、Conceptsに公開されたアプリケーションを他の開発者に体験してもらい、フィードバックを頂き、アプリケーションをより磨き上げる場となるよう考えているようです。(そういった仕組みはありませんが。)

Magic Leap Worldの正式なアプリケーションと比較すると、審査期間が短く、審査基準も緩いのも1つの特徴です。最近は、Magic Leap社が開催している開発者ジャムのアプリケーション公開の場として使用しています。

ー Magic Leap World Concepts 公開までの道程

かんたんにまとめるとアプリのβ版をストア申請できる仕組みのようです。
正式なアプリと同じストアに並びますが、「Concept」というタグのようなものが表示されます。

画像1


今回公開したアプリ

Magic Leap に関しての調査も兼ねて、短期間で集中的にプロトタイプ作成を行いました。

実際に公開したアプリはこちら。
(ぜひ、Magic Leap をお持ちの方は遊んでみてください。)

Magic Leap World Concepts 公開申請手順

さて本題です。申請の手順を紹介していきます。
事前に必要な準備や、実装に関する情報は今までのnoteをご覧ください。

【MagicLeap】開発環境構築
【MagicLeap】ハンドトラッキング実装デモ
【MagicLeap】検出した平面をRayで取得してオブジェクトを垂直に配置する
【MagicLeap】レーザーポインターでUI操作
【MagicLeap】オクルージョンの実装方法

提出したいアプリが完成したら Magic Leap にログインし、「公開」⇒「パブリッシャー登録」の順に進みます。

現在は日本から法人の登録はできないようなので、「個人として参加する」を選択します。

ML公開

スクリーンショット-2020-05-21-15.47.26

あとは規約の確認、住所等を入力して下記画面から「アプリの公開」画面に進んでいきます。

画像4

ML最初のアプリを公開

続いて、「パブリックアプリの選択」⇒「コンセプトの選択」の順に進みます。

画像6

画像7

この手順で入力フォームにたどり着いたはずです。

アプリの追加・修正

アプリの公開枠を作成した後で再度、Magic Leap にログインした場合は、下記画像の状態となり、「公開」⇒「新しいアプリの公開」から実行ファイル(mpkファイル)を追加することができます。

画像8

もし、Magic Leap World Concepts ではなく Magic Leap World に誤って進んでしまった場合は、作成したアプリのフォームから変更を加えることはできないので新しいアプリの公開から再登録する必要があります。

アイコン作成

アプリをMagicLeapにインストールした際の表示アイコンを作成する必要があります。

画像9

アイコンビルダー から作成をしていきましょう。 (ログインが必要です。)

最低解像度の512×512で作成することをおすすめします。

「アイコンファイルのダウンロード」を選択すると、Unityエディタで設定可能なアイコンファイルがzip形式でダウンロードされます。

Unityエディタでの設定はPlayer SettingsのIconから行い、ダウンロードしたIconファイルを下記画像の用に指定します。
(プロジェクト配下にアイコンファイルを置いてしまっても大丈夫でした。)

画像10

この状態でビルドすれば実機でアイコンを確認できます。

リリース用証明書の準備

開発者用証明書とは異なり、リリース用の証明書を設定する必要があります。

設定方法自体は開発者用証明書と相違はありません。
※【参考リンク】:【MagicLeap】開発環境構築 /「ML Certification」参照

しかし、リリース用の証明書付きmpkファイルは実機にケーブルを繋げて直接転送することができません。
なので、デバッグは開発者用証明書を設定した状態で行う必要があります。

詰まった箇所

フォームの入力自体はほとんど詰まることがないのですが、個人的に一部分かりにくかった箇所を記載します。

プレビュー画像
ガイドには 1280×720 とありますが、実際には 1280×960 でした。(アップデート漏れ?)

プレビュー画像SS

manifest.xml
Magic Leap World Conceptsに提出するアプリには、manifest で ml:subtype=”Concept” と追記する必要があります。

manifest.xmlファイルは Assets/Plugins/Lumin に格納されています。

テンプレートプロジェクトからアプリを作成した場合、manifest.xml は下記コードのようになります。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:ml="magicleap" ml:package="com.upft.template" ml:version_code="1" ml:version_name="1.0.0">
 <application ml:sdk_version="1.0" ml:visible_name="Magic Leap Unity Template LWRP" ml:min_api_level="6">
   <component ml:binary_name="bin/Player.elf" ml:name=".fullscreen" ml:type="Fullscreen" ml:visible_name="Magic Leap Unity Template LWRP" ml:subtype="Concept"> //←追記
     <icon ml:model_folder="Icon/Model" ml:portal_folder="Icon/Portal" />
   </component>
   <uses-privilege ml:name="LowLatencyLightwear" />
   <uses-privilege ml:name="BackgroundDownload" />
   <uses-privilege ml:name="BackgroundUpload" />
   <uses-privilege ml:name="BatteryInfo" />
   <uses-privilege ml:name="ConnectBackgroundMusicService" />
   <uses-privilege ml:name="ControllerPose" />
   <uses-privilege ml:name="DrmCertificates" />
   <uses-privilege ml:name="GesturesConfig" />
   <uses-privilege ml:name="GesturesSubscribe" />
   <uses-privilege ml:name="HandMesh" />
   <uses-privilege ml:name="IdentityRead" />
   <uses-privilege ml:name="InAppPurchase" />
   <uses-privilege ml:name="Internet" />
   <uses-privilege ml:name="MusicService" />
   <uses-privilege ml:name="NormalNotificationsUsage" />
   <uses-privilege ml:name="PcfRead" />
   <uses-privilege ml:name="PowerInfo" />
   <uses-privilege ml:name="RegisterBackgroundMusicService" />
   <uses-privilege ml:name="ScreensProvider" />
   <uses-privilege ml:name="SecureBrowserWindow" />
   <uses-privilege ml:name="WifiStatusRead" />
   <uses-privilege ml:name="WorldReconstruction" />
   <uses-privilege ml:name="AddressBookRead" />
   <uses-privilege ml:name="AddressBookWrite" />
   <uses-privilege ml:name="LocalAreaNetwork" />
   <uses-privilege ml:name="AudioCaptureMic" />
   <uses-privilege ml:name="AudioRecognizer" />
   <uses-privilege ml:name="CameraCapture" />
   <uses-privilege ml:name="CoarseLocation" />
   <uses-privilege ml:name="ComputerVision" />
   <uses-privilege ml:name="VoiceInput" />
 </application>
</manifest>

しかし、このままの状態で提出した場合はリジェクトされてしまうので注意が必要です。(後述のリジェクトからの再申請で解説)

レーティングの設定
申請時のレーティングは入力後すぐ反映されるのできちんとチェックしていれば見逃すことはないのですが、ついうっかり見逃して「成人向けコンテンツ」として申請が通ってしまいました。。

というのも、「Graphic Imagery」という項目があるのですが、Magic Leap が提供する翻訳後のサイトには「グラフィックイメージ」と表示されます。

私はこれを勘違いして、「穏やか」という項目にチェックを入れて申請してしまいました。

しかし、この「Graphic Imagery」は「血の描写が含まれるか」という項目のようで、レーティングに影響を及ぼしていました。

申請前に下記リンクでそれぞれどのような意味を持つのかしっかりと確認しておくことをお勧めします。
Content Rating Guide

提出レビュー
アプリの申請の最終フローとして、「レビュー担当者への注記」を入力する必要があります。

ML提出レビュー

この入力欄は iOS や Android のアプリ申請時にも似た箇所がありますが、改めて説明すると、レビュー担当者向けにログインするまでの手順や、使用するテストアカウントなどを記述しておく箇所となります。

特筆すべき確認事項等がない場合であれば、英語で「初めての申請です。チェックお願いします。」等を記述しておけば大丈夫です。

リジェクトからの再申請

把握できる範囲では、申請時点(2020年5月頃)は日本でアプリをリリースされている方は個人開発の一名だけで、日本語の情報が非常に少ない状態でした。
なので、申請が通るだろうかと心配していたのですが、案の定リジェクトされてしまったのでその理由について説明していきます。

1.アプリ内の機能に説明が無い
ひとつめは、アプリ内に表示したメニューアイコンのそれぞれに機能を説明する表示が無かったことが理由でした。

Menu Readability
Please provide some text next to your icons, as it is not clear what the icons do based on images alone.
(実際のリジェクト内容引用)

画像13

たしかに、どのアイコンが何の機能を持っているかが使ってみるまではわかりません。そこで、このように修正しました。

2.アプリの終了機能がない
ふたつめはアプリの終了機能がないことでした。

Magic Leap には OS の機能として、ホームタップボタン長押しでホーム画面に戻ることができます。
そのため、アプリの終了はホームボタンの長押しでホーム画面に戻り、そこから直接終了させればいいと思っていたのですが、それではダメでアプリの終了を可能とする何かしらの機能が必要なようでした。

Exit Functionality
please add a button to exit the application.
(実際のリジェクト内容引用)

なので、アプリの終了ボタンの実装を追加しました。
ボタンを押下したときのコールバックに下記メソッドを登録しています。

   /// <summary>
   /// アプリの終了
   /// </summary>
   private void quit()
   {
#if UNITY_EDITOR
       UnityEditor.EditorApplication.isPlaying = false;
#elif PLATFORM_LUMIN
       UnityEngine.Application.Quit();
#endif
   }

3.Manifest Settings での権限が適切ではない
申請時に手を加えたmanifest.xmlですが、もうひと手間必要だったようです。

APIで利用する権限と manifest.xml 内の権限が一致している必要があり、余分な記述があった為に「その機能本当に使っているの?」と指摘をうけました。

We noticed some issues with your Magic Leap Manifest Settings:
— Please remove the following unsupported privileges, or otherwise let us know if you are using these features:
—- VoiceInput
—- InAppPurchase
—- ScreensProvider
—- RegisterBackgroundMusicService
—- AudioRecognizer
—- WifiStatusRead
—- AddressBookRead
—- PowerInfo
—- BackgroundUpload
—- DrmCertificates
—- ConnectBackgroundMusicService
—- IdentityRead
—- BatteryInfo
—- BackgroundDownload
—- NormalNotificationsUsage
—- SecureBrowserWindow
—- AddressBookWrite
—- MusicService
—- ComputerVision
(実際のリジェクト内容引用)

今回のアプリで言うと、使用する権限は下記まで絞る必要がありました。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:ml="magicleap" ml:package="com.upft.template" ml:version_code="1" ml:version_name="1.0.0">
 <application ml:sdk_version="1.0" ml:visible_name="Magic Leap Unity Template LWRP" ml:min_api_level="6">
   <component ml:binary_name="bin/Player.elf" ml:name=".fullscreen" ml:type="Fullscreen" ml:visible_name="Magic Leap Unity Template LWRP" ml:subtype="Concept">
     <icon ml:model_folder="Icon/Model" ml:portal_folder="Icon/Portal" />
   </component>
   <uses-privilege ml:name="LowLatencyLightwear" />
   <uses-privilege ml:name="ControllerPose" />
   <uses-privilege ml:name="GesturesConfig" />
   <uses-privilege ml:name="GesturesSubscribe" />
   <uses-privilege ml:name="HandMesh" />
   <uses-privilege ml:name="Internet" />
   <uses-privilege ml:name="PcfRead" />
   <uses-privilege ml:name="WorldReconstruction" />
   <uses-privilege ml:name="LocalAreaNetwork" />
   <uses-privilege ml:name="AudioCaptureMic" />
   <uses-privilege ml:name="CameraCapture" />
   <uses-privilege ml:name="CoarseLocation" />
 </application>
</manifest>

4.権限の許可選択が用意されていない 
スマホのアプリで誰もが一度は見たことのある権限確認のポップアップですが、Magic Leap においても同様に、一部機能はユーザーが権限を許可するか選択できるように設定する必要があるようです。

— Please verify the following privileges are in use in your app:
—- GesturesSubscribe
—- GesturesConfig
—- CameraCapture
—- HandMesh
—- AudioCaptureMic
(実際のリジェクト内容引用)

その設定をかんたんにする Privilege Requester という便利コンポーネントが用意されているので、シーンに配置して必要な権限確認を追加します。

画像14

自動で付与される権限は一覧にはないので、特に何もしなくて大丈夫です。

5.ホームボタンでのメニューの切り替え
今回提出したアプリは手のジェスチャーに応じてメニューの表示・非表示が切り替わるという機能を実装していました。
※【参考リンク】:【MagicLeap】ハンドトラッキング実装デモ

しかし、ホームボタンによるメニューの表示・非表示の切り替え機能の追加を求められました。

Please use the HomeTap button to toggle the menu.
(実際のリジェクト内容引用)

ホームボタンに実装すべき理由は問い合わせをしてみたのですが、解決せず、「Magic Leap は OS の機能としてホームボタンを押すと前の画面に戻れるようになっているので、その機能をアプリにも組み込む必要があるのではないか」という仮説を立てました。

手のジェスチャーによる画面の切り替え機能はそのままに、ホームボタン(長押しではない)押下によるメニューの表示・非表示の切り替え機能も追加して再申請したところ申請が通りました。

We have reviewed, approved and published your app to the Magic Leap World store. Congratulations!
(問い合わせメールに対する返信)

おわりに

前例が少ない中でのアプリ公開は戸惑うことも多かったのですが、喉元過ぎればなんとらやです。

ここまで、あたかも全て自力でなんとかしたかのように書いていますが、ほとんどが LEAPERS JAPAN(Magic Leap Community) にて助言をいただいたことで解決しました。
(とても助かりました。ありがとうございます。)

開発者のみなさんにはコミュニティーへの参加をお勧めします。

この記事が気に入ったらサポートをしてみませんか?