2017-10-14 9 views
4

Android Instant Apps가 Android 5.0 이상에서 지원되는 것처럼 보입니다. 그러나 앱 링크 (Instant Apps가 사용하는 것으로 알고 있음)는 6.0 이상에서만 지원됩니다. 온라인으로 검색했지만 이에 대한 분명한 대답을 찾을 수 없습니다.Android Instant Apps 및 App LINK 사용

일반적으로 인스턴트 앱을 지원하기 위해 앱 링크를 사용하여 여러 기능 모듈 간의 활동을 탐색하고 싶지만, 대부분의 경우 해당 모듈을 사용하여 버전에서 작동하는 설치 가능한 APK를 빌드해야합니다 below 5.0
코드가 API 레벨을 확인하고 버전에 따라 다른 접근 방식을 사용해야 함을 의미합니까 (예 : < 5.0 인 경우 명시적인 의도로 startActivity을 호출)?

모두 인스턴트 및 앱 설치 버전 안드로이드 앱 링크가 안드로이드 6.0에 도입 된 기능 구현해야합니다

내가 Instant Apps documentation에서 발견 한 정보입니다. 앱 링크 은 URL을 앱 내의 이산 액티비티에 연결하는 기본 메커니즘을 제공합니다.

즉시 응용 프로그램은 직접 다른 기능에서 활동을 시작할 수 없습니다; 대신 다른 기능의 진입 점 활동 인 에 해당하는 URL 주소를 요청해야합니다.

다음 https://developer.android.com/topic/instant-apps/index.html에서

안드로이드 인스턴트 앱은 안드로이드 5.0 (API 레벨 21) 안드로이드 O

+0

언뜻보기에 자신의 게시물에 실제로 질문 자체가 부족한 것처럼 보입니다. 좋아, 나는 그것을 다시 읽은 후에 발견했다. - asnwer에 맞춰 지켜봐라. – Idolon

+0

그래, 조금은 멍청 해. :) 2 개의 관련 질문이 추가 혼란을 일으킬 수있다. –

답변

3

안드로이드 앱 링크를 통해 단지를 제공하는 최신 안드로이드 장치를 지원합니다 Android 시스템에서 사용자의 http 딥 링크를 응용 프로그램과 고유하게 연결하는 방법 (사용자가 링크를 여는 응용 프로그램을 선택하기위한 모호성 제거 대화 상자를 표시하지 않음) 활동을 시작하기위한 새로운 API를 제공하지는 않습니다. 따라서 어떠한 경우에도 startActivity으로 전화해야합니다. 다른 Instant App 기능 모듈에 속한 활동을 열려면 암시 ​​적 인 텐트를 사용해야합니다.

동일한 기능 모듈 내에서 탐색하려면 (즉, 인스턴트 앱이 one base feature으로 구성된 경우) 명시적인 의도를 자유롭게 사용할 수 있습니다.

이제 Android Instant Apps는 Android 5.0 이상에서 지원됩니다. 그러나 앱 링크 (내가 인스턴트 앱은에 의존 것을 이해하는) 만 6.0에서 지원되는 이상

네, 사실입니다. 하지만 인스턴트 앱 관리자 (Google Play 서비스에서 내부적으로 설치되어 8.0 이전의 Android에서 인스턴트 앱을 실행하는 데 사용됨)는 확인 된 인스턴트 앱 도메인에 등록 된 앱 링크가 귀하의 인스턴트 앱으로 직접 전달되도록합니다.

이 그 코드는 API 레벨을 확인하고 버전에 따라 다른 접근 사용할 필요가 뜻 (예를 들어 전화를 startActivity 5.0 < 경우)

예, 100 % 확인하려면 귀하의 사용자는 앱의 활동을 탐색하는 동안 (그리고 아마도 이상한 사용자 경험을 방지하기를 원할 것입니다) 동음 이의어 ("선택자") 대화 상자 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

@ JohnO'Reilly 물론, 커플 링을 피하기 위해 할 수있는 가장 간단한 방법은 클래스 참조 대신 'ComponentName'을 사용하는 것입니다. 또 다른 옵션은 암시 적 의도를 사용하는 것이지만 패키지 이름으로 시작하는 작업 (예 :'com.yourapp.ACTION_A')으로 - 우발적 인 선택기 대화 팝업의 위험을 최소화합니다. 보다 적절한 OOP 솔루션을 원한다면 [Dagger multibindings] (https://google.github.io/dagger/multibindings)를 참조하십시오. (아이디어는 기능 모듈의 구성 요소에 의해 다중 바인딩 맵에 추가 된 일부 인터페이스 인스턴스로 탐색을 위임하는 것입니다.) – Idolon

+0

구현을 각각 instant 및 apk 모듈에 넣으시겠습니까? – dazza5000