2017-10-14 4 views
4

Android Instant AppsはAndroid 5.0以降でサポートされているようです。しかし、App Links(私がInstant Appsが依存していると理解している)は、6.0以降でのみサポートされています。私はオンラインで検索しましたが、これについて明確な答えが見つかりませんでした。AndroidインスタントアプリとApp LINKの使用

一般的には、インスタントアプリをサポートするために、さまざまな機能モジュールのアクティビティ間を移動するためにアプリリンクを使用すると思われますが、バージョンで動作するインストール可能なapkを構築するために、 5.0より下のバージョン
APIレベルをチェックし、バージョンによって異なるアプローチを使用する必要があることを意味しますか?< 5.0の場合は、明示的な目的でstartActivityを呼び出しますか?

これは私がInstant Apps documentationで見つけた情報です:

インスタント、アプリのインストールのバージョンの両方が にのAndroid 6.0で導入されたAndroidのアプリのリンク機能を実装する必要があります。アプリリンク は、URLをアプリ内の個別の アクティビティに接続するための主要な機能を提供します。

インスタントアプリは直接、別のフィーチャ内のアクティビティを起動することはできません。 の代わりに、他の機能のエントリポイントアクティビティに対応するURLアドレスを要求する必要があります。

、その後https://developer.android.com/topic/instant-apps/index.html

のAndroidインスタントアプリからAndroidのO

+0

一見したところでは、あなたの投稿は実際に質問自体が欠けているようです。私はそれを再確認した後に創設しました: – Idolon

+0

ええ、それは私が認めているビットです:)そして余分な混乱を加えるために2つの関連する質問の一種です(しようと言い換える)! –

答えて

3

のAndroidアプリのリンクを通じて のAndroid 5.0から最新のAndroidデバイス(APIレベル21)をサポートするだけで提供Androidのシステムでは、http深いリンクとアプリケーションを一意に関連付けることができます(リンクを開くアプリケーションを選択するための曖昧さ回避のダイアログを表示することなく)。アクティビティを開始するための新しいAPIは提供しません。したがって、いずれにしてもstartActivityに電話する必要があります。別のインスタントアプリケーション機能モジュールに属するアクティビティを開く場合は、暗黙のインテントを使用するだけです。

同じ機能モジュール内のナビゲーション(またはインスタントアプリケーションがちょうどone base featureである場合)では、明示的な意図を自由に使用できます。

Androidインスタントアプリは Android 5.0以降でサポートされているようです。しかし、アプリケーションのリンクは(私が インスタントアプリが依存することを理解する)だけ6.0でサポートされて以降

はい、それは本当です。しかし、インスタントアプリの管理者(Google Playサービスの内部にインストールされ、8.0より前のAndroidでインスタントアプリを実行するために使用される)は、確認済みのインスタントアプリドメインに登録されたアプリリンクが確実にインスタントアプリに転送されるようにします。

あなたは100%を確認したい場合は、これは、はい(< 5.0場合などはstartActivity を呼び出す)そのコードはAPIレベルを確認し、バージョンによって 異なるアプローチを使用する必要がある

を意味していますあなたのアプリケーションのアクティビティをブラウズしている間に(そしておそらくあなたはそのような奇妙なユーザエクスペリエンスを防止したいと思うかもしれませんが)あなたのユーザは曖昧さ回避(別名「選択」)ダイアログlike thisを表示しません。依存関係注入を使用する場合は、アプリケーションのナビゲーションに使用するインタフェースを使用し、次にインストール可能なアプリケーションとインスタントアプリケーションの実装を別々にすることができます。

interface Navigation { 
    void startActivityFromModuleA(); 
    void startActivityFromModuleB(); 
    … 
} 

class InstallableAppNavigation implements Navigation { 
    public void startActivityFromModuleA() { 
     // explicit intent 
     Intent intent = new Intent(context, ActivityFromModuleA.class); 
     context.startActivity(intent); 
    } 
    … 
} 

class InstantAppNavigation implements Navigation { 
    public void startActivityFromModuleA() { 
     // implicit intent 
     Intent intent = new Intent(Intent.ACTION_VIEW, 
       Uri.parse("https://your.app.com/moduleA/smth")); 
     context.startActivity(intent); 
    } 
    … 
} 
+1

明示的なインテントの使用についての1つのこと....(ナビゲーションコードが例えばベースモジュール内にある場合には)他に必要とされない程度の結合が必要です。あなたはこれを避けるための方法を推薦していますか? –

+1

@ JohnO'Reillyもちろん、結合を避けるためにできる最も簡単なことは、クラス参照の代わりに 'ComponentName'を使うことです。もう一つの選択肢は、暗黙的なインテントを使用することですが、パッケージ名で始まるアクション(例: 'com.yourapp.ACTION_A')を使用します。これは、偶発的な選択ダイアログのポップアップのリスクを最小限に抑えます。より適切なOOPソリューションをご希望の場合は、[Dagger multibindings](https://google.github.io/dagger/multibindings)をご覧ください。 (アイデアは、フィーチャモジュールのコンポーネントによってマルチバインドマップに追加された、いくつかのインターフェイスインスタンスにナビゲーションを委任することです。) – Idolon

+0

インスタントモジュールとapkモジュールにそれぞれ実装を入れますか? – dazza5000

関連する問題