よくある質問

このページには、Instant App の開発中によくある質問の回答やエラーの対処法が記されています。ユーザー エクスペリエンスのガイドラインについて詳しくは、Google Play Instant でのアプリのユーザー エクスペリエンスのベストプラクティスおよび Google Play Instant でのゲームのユーザー エクスペリエンスのベストプラクティスを参照してください。

全般

  • Google Play Instant はどのデバイスでサポートされていますか?

    Google Play Instant は、Android 5.0 (API level 21) 以上を実行するほとんどのデバイスでサポートされています。

  • デベロッパーは、2 つの異なる種類の Android アプリをビルドする必要がありますか?

    デベロッパーが保守する必要があるのは、1 つのプロジェクトで 1 つのソース ツリーのみです。次の 2 つのビルド成果物を作成するように、プロジェクトを構成することができます。

    • インストール可能バージョン
    • Instant Apps バージョン

    インストール可能アプリに Instant Apps のサポートを追加するために必要なことは、インストール可能アプリが現在どのように構成されているかによって異なります。

    注: Instant App のバージョンは、最新の公開されているインストール可能アプリのバージョン以下でなければなりません。

  • Instant Apps ではどのような種類の Android API と機能を使用できますか?

    Google Play Instant の機能は既存の Android アプリを補完するものです。つまり、既存の Android アプリに置き換わるものではありません。同じ Android API、同じプロジェクト、同じソースコードを使用します。一方で、インストールされていないアプリに対してユーザーが予期しないと思われる機能は制限されています。たとえば、Instant App では、バックグラウンド サービスの使用、バックグラウンド通知の送信、一意の端末識別子へのアクセスは行えません。

  • ユーザーはアプリを永続的にインストールすることを選択できますか?

    デベロッパーは showInstallPrompt() メソッドを使用して、ユーザーが Google Play からアプリをインストールできるようにすることができます。

  • Google Play Instant でパーミッションはどのように機能しますか?

    Google Play Instant では、Android 6.0(API レベル 23)で導入されたランタイム パーミッション モデルが使用されます。

  • Instant App で利用できるパーミッションはどれですか?

    アプリバンドルを Instant Apps 対応にする方法のガイドで、パーミッションのセクションにあるリストを参照してください。

  • Instant App ではどの SDK バージョンをターゲットにする必要がありますか?

    Instant App のマニフェストでは、targetSdkVersion26 以上に設定されている必要があります。

  • Instant App がネットワーク トラフィックを処理する方法に何らかの制限はありますか?

    Instant App から行われるネットワーク トラフィックはすべて、HTTPS を使用する必要があります。Instant Apps では HTTP をサポートしていません。

  • デベロッパーはどのように Instant App を公開するのですか?

    デベロッパーは、既存の Android アプリの場合と同じように、Google Play Console を介して Instant App を公開します。詳しくは、Instant App の配布をご覧ください。

  • Instant App には Smart Lock が必要ですか?

    はい。ユーザーにログインを要求するアプリには Android 環境で Smart Lock for Passwords を実装する必要があります

  • インストール可能な Android アプリなしで、Instant App を実装できますか?

    いいえ。Google Play に Android アプリのインストール可能バージョンが存在する必要があります。

  • ビューには WebP を使用できますか?

    はい。ビュー用に WebP 形式の画像を使用する必要があります。

  • Instant App は Google ウェブ検索にどのように表示されますか?

    Instant App は、インストール可能アプリと同じように検索結果に表示されます。Instant App が特定の URL と関連付けられている場合は、検索結果にアプリのアイコンと「Instant」というラベルが表示されます。

  • Google Play Instant を使用してゲームを配布することはできますか?

    はい。ゲームは Google Play Instant で完全にサポートされています。始めに、既存のゲームを Instant App に変換する方法の説明をご覧ください。

プロジェクトの構造、機能、アーキテクチャ

  • Instant App とインストール可能アプリには、別々の build.gradle ファイルを使用しますか?

    同じ Android Studio プロジェクトからインストール可能アプリと Instant App をビルドする場合は、2 つの別々の build.gradle ファイルが必要です。

    • インストール可能アプリは、com.android.application ビルドルールを使用するモジュールからビルドします。
    • Instant App は、com.android.instantapp ビルドルールを使用するモジュールからビルドします。

    Instant App を作成する方法について詳しくは、機能モジュールを Instant App に変換する方法に関するガイドをご覧ください。

  • インストール可能アプリを Instant App とは別にビルドできますか?

    アプリを基本機能モジュールに変換する機能モジュールを Instant App に変換するで説明されているように、推奨されるプロジェクト構造では、まずアプリの機能をライブラリ モジュールに分離し、インストール可能アプリと Instant App がこれらのライブラリ モジュールに依存するようにします。推奨されるプロジェクト構造に従っている場合、インストール可能アプリとは別に各機能を作成できます。

  • 私の Instant App で NDK はサポートされていますか?

    はい。NDK は Android 5.0(API レベル 21)以上を実行するデバイスでサポートされます。

  • Instant App のアクティビティ間を移動するにはどうすればよいですか?

    各機能専用の URL を起動することで、さまざまなアクティビティ間を移動することができます。アクティビティの指定は URL で行う必要があります。URL 経由でアクティビティを指定し、アプリのリンクを実装する方法について詳しくは、Instant App に URL アクセスを提供するをご覧ください。

  • ディープリンクを処理して他のアクティビティを必要に応じて呼び出すメインアプリにおいて、ルーティング アクティビティを使用することはできますか?

    Instant App は機能的にもモジュール化されている必要があります。中央ルーティング アクティビティを使用すると、モジュール化が制限されます。Android アプリリンクを使用すると、モジュール化を促進しながら、Android フレームワークでルーティングを実行できます。

  • 単一の機能に複数のアクティビティを含めることはできますか?

    単一の機能に複数のアクティビティを含めることは可能です。ただし、Instant App のダウンロードには 4MB のサイズ制限があることに注意してください。また、各機能には、エントリ ポイントとして単一のアクティビティが必要です。

  • 機能間でリソースを共有できますか?

    はい。基本機能のリソースは、すべての機能で利用可能です。従属機能に含まれるリソースの場合は、その特定の機能に使用が制限されています。

    従属機能と基本機能では、ファイルベースのリソースに異なる名前を付ける必要があります。たとえば、基本機能がレイアウトを res/layout/feature_layout.xml に定義し、従属機能が同じファイル名で別のレイアウトを定義している場合、Instant App が基本機能からレイアウトを読み込んでいるつもりが、実際には従属機能からレイアウトを読み込んでいたということも起こりえます。

    また、機能モジュールのマニフェストによって参照されるすべてのリソースは、基本機能モジュール内に存在する必要があります

  • アプリ内に 2 つの機能がある場合、それらの機能はメモリを共有できますか?

    はい。それらの機能は同じプロセスで実行され、アプリのコンテキストを共有することができます。同じ Instant App に属している機能は、単一のアプリの異なるコンポーネントと同じように機能します。ストレージやリソースなどのコンポーネントにも同じようにアクセスできます。

    ただし、インストール可能 APK と比較すると、Instant App にはいくつかの制限があります。詳しくは、Google Play Instant ポリシー ページをご覧ください。

  • 単一のアクティビティ内のビュー ページャーに複数のフラグメントを含めることはできますか?

    はい。単一のアクティビティに複数のフラグメントを含め、機能内のアクティビティに関連するフラグメントを定義することができます。アクティビティは、機能内のプライマリ エントリ ポイントである必要があります。フラグメントをディープリンクに関連付けたり、アクティビティから切り離して起動したりはできないことに注意してください。

  • Instant App には別個のランチャー アイコンが必要ですか?

    いいえ。UI を分岐してはなりません。Instant App とインストール可能アプリの両方が同じルックアンドフィールを提供することが重要なので、必ず同じアイコンを使用してください。同じ理由で、両方のアプリに同じビジュアル エレメントを使用する必要があります。

  • 私のアプリがインストール可能アプリとして動作しているか、それとも Instant App として動作しているか、どうすれば分かりますか?

    isInstantApp() メソッドを使用します。このメソッドは現在のプロセスが Instant App プロセスである場合に true を返します。

  • どうすれば Instant App からアプリをインストールするようにユーザーに促すことができますか?

    showInstallPrompt() メソッドを使用します。このメソッドは、アプリの通常の APK バージョンをインストールするように促すプロンプトをユーザーに表示します。

  • 機能の APK が異なるということは、Google Playでも別個にリストされるということですか?

    いいえ。Instant App とインストール可能アプリは同じパッケージ名と掲載情報を共有します。

  • Instant App 内の機能を命名する方法に関して制限はありますか?

    機能モジュールは、Java パッケージ名向けの命名規則に従って命名されます。たとえば、機能名にハイフンを含めることはできません。Java パッケージの命名規則について詳しくは、Java の資料をご覧ください。

  • データを Instant App からインストールしたアプリに転送するにはどうすればよいですか?

    Android 8.0 (API レベル 26)以上を実行しているデバイスの場合、インストールしたアプリが targetSandboxVersion2 を使用するように構成されていれば、APK のインストールが開始すると Instant App のデータが自動的に転送されます。

    インストールしたアプリで targetSandboxVersion2 を使用するように構成されていない場合や、Android 7.1 (API レベル 25)以下を実行しているデバイスの場合は、Cookie APIサンプル)または Storage APIサンプル)を使用してデータを転送してください。

  • multidex は Instant App でサポートされていますか?

    multidex は Instant App でサポートされています。最大サイズの要件を満たしているものの、dex の制限値である 65,536 個よりも多いメソッドが含まれているアプリがある場合、multidex を有効にした状態で、そのアプリを Instant App として公開することができます。

アナリティクス、Google Play、デプロイメント

  • Instant App を特定の国で起動するように制限することはできますか?

    Instant App は、インストール可能アプリが利用可能な国だけに使用が制限されています。デベロッパーは、これらの国の中から Instant App のターゲットにする国を選択することができます。

  • Instant App を Google Play のアルファ トラックでテストするには、インストール可能アプリを公開する必要がありますか?

    Google Play の内部テストトラックで Instant App のデプロイメントをテストするには、アプリのインストール可能なバージョンのドラフトフォームが Google Play Console に必要です。Instant App をデプロイおよびテストする方法について詳しくは、Instant App の配布をご覧ください。

アプリのサイズ

注: Google Play Instant 上のゲームの場合、ダウンロードの制限は 10 MB です。ゲームのデベロッパーはこのセクションのガイダンスに従ってください。ただし、各インスタンスにつき 4 MB となっている箇所を 10 MB に読み換えてください。

  • なぜ合計ダウンロード制限は 4MB なのですか?

    Instant App のサイズ(基本機能と任意の組み込み従属機能)は、できるだけ小さくする必要があります。アプリのサイズが小さいほど、ユーザーは簡単にダウンロードできます。ただし、Instant App がユーザーの端末で実行を開始すると、追加のデータをダウンロードして、内部ストレージに格納することができます。端末の内部ストレージにデータを格納する際の、ハードに関する 4MB 制限はありません。

    サイズを計算するには、Instant App APK の zip ファイルを解凍し、APK ファイルを調べます。APK ファイルのディスクサイズを使用する方法か、APK Analyzer を開いて Raw File Size 値を調べる方法のいずれかで確認できます。

    複数の機能がある Instant App の場合は、基本機能の APK のサイズを単一の機能の APK のサイズに追加する必要があります。これらの両方の APK の合計サイズは、4MB 未満でなければなりません

  • 密度、ABI、言語 APK は 4MB 制限にどのように影響しますか?

    機能のサイズは、機能 APK のサイズ、基本機能 APK のサイズ、および機能に関連付けられている最大言語、スクリーン密度、ABI APK のサイズを合計して計算します。たとえば、機能に 3 つの言語と 1 つの画面密度があり、ABI APK がない場合、機能 APK の最終的なサイズは、機能 APK、基本機能 APK、最大言語の APK、および 1 画面密度 APK のサイズを合計して導き出すことができます。

  • ユーザーは同じ Instant App をダウンロードするたびに、基本機能と従属機能の APK をダウンロードする必要がありますか?

    ユーザーは Instant App をダウンロードすると、基本機能と従属機能を受信します。追加の機能または機能 APK をリクエストすると、ユーザーはその特定の機能の機能 APK のみを受信します。このとき、基本機能が再度ダウンロードされることはありません。

    システムによるガベージ コレクションの際に、必要に応じて Instant App のキャッシュがクリアされることがあります。その場合、ユーザーがスマートフォンを再起動すると、Instant App のキャッシュがクリアされた状態になっています。ユーザーは基本機能を再ダウンロードする必要があります

  • 4MB の検証はいつ実行されますか?

    Instant App を Google Play Console の製品トラックにアップロードすると、検証が実行されます。

  • 別のアプリからリンクをクリックしたときに、そのリンクが Instant App で開きません。代わりに、アプリ内のブラウザで開きます。ユーザーが確実に Instant App にアクセスできるようにする方法はありますか?

    App Links は通常の URL であるため、アプリはリンクをアプリ内のブラウザで強制的にオープンすることがあります。Firebase Dynamic Links を使用して URL をラップし、リンクが必ず Instant App 内で開かれるようにすることを検討してください。

  • メインのアプリのマニフェストに、自分がサポートまたは所有していない URL や URL ドメインが含まれています。この場合、どのような結果になりますか?

    URL のドメイン所有権が確認されていない場合は、Instant App を公開できません。

  • URL から間違ったアクティビティが開きます。どうすればよいですか?

    選択されたアクティビティは、アクティビティ <intent-filter> のエレメントに直接基づいています。異なるアクティビティに "android:pathPrefix" 属性が重複して指定されているなどの、一般的なエラーがないか確認してください。たとえば、あるアクティビティが android:pathPrefix="/recordList" を定義し、別のアクティビティが android:pathPrefix="/record" を定義している場合、その動作は未定義になる可能性があります。android:path="/recordList"android:pathPrefix="/record/" などの曖昧さのないパス定義を使用します。こうすることにより、/recordList をすべてのレコードのスクロール リストと、/record/123 を特定のレコードと一致させることができます。

端末で Instant App を実行する

  • ユーザーが Google Play Instant からオプトアウトする方法はありますか?

    はい。ユーザーは最初に Instant App を起動するときにオプトアウトできます。また、[設定] から Instant Apps をオフにすることで、オプトアウトすることもできます。

  • 2 つの Instant App を同時に実行できますか?

    はい。ユーザーは Instant App を同時に実行し、一方から他方へと切り替えることができます。フォアグラウンドにある Instant App のみ、通知シェードにアイコンが表示されます。

  • ユーザーが Instant App のプロセスを kill して、[Recents] やデバイスのホーム画面からそのアプリを再起動することはできますか?

    ユーザーは Instant App を [Recents] から再起動することも、前回起動した URL をタップして再起動することもできます。

    Instant App がアイドル状態になると、Instant App のプロセスは kill されます。しかし、SQLite DB や共有プリファレンスのようなアプリの内部ストレージは依然としてアクティブなままです。デバイスに厳しい制約がある場合、Instant App は強制的に排除され、その内部ストレージも削除されることがあります。あまり起きることのない状況ですが、このようなときは、Instant App の状態をサーバーから復元する必要があります

  • Instant App はユーザーのデバイスにインストール済みの他のアプリを起動することができますか?

    Instant App は、暗黙的インテントを発行してインストール済みのアプリを起動することができます。ただし、明示的なインテントを使った場合、ほとんどのインストール済みのアプリを起動することはできません。インストール済みのアプリは、明示的なインテントを介して、Instant App とやり取りできるようになります。

  • ユーザーが古いバージョンのアプリをインストールしている場合、新しい機能を備えた Instant App の URL をクリックすると、どちらのアプリが開きますか?

    Instant App よりもインストール可能アプリが常に優先されます。

  • ユーザーは新しいバージョンの Instant App をどのようにして受け取りますか?Google はユーザーの端末上の Instant App を自動的にアップデートしますか?

    新しいユーザーと Instant App のキャッシュの有効期限が切れた既存のユーザーに最新バージョンの Instant App が配布されます。