인스턴트 앱(Instant App)

참고링크 :

https://codelabs.developers.google.com/codelabs/android-instant-apps/index.html

https://developer.android.com/topic/google-play-instant/getting-started/create-base-feature-module

https://developer.android.com/topic/google-play-instant/getting-started/convert-to-instant-app

https://developer.android.com/topic/google-play-instant/guides/config-splits

인스턴트 앱이란?

https://developer.android.com/topic/instant-apps/overview?hl=ko

구글 I/O 2017에서 공개된 것으로 설치없이 앱의 일부 기능을 사용해보는 것.

Play Store, Google 검색, SNS 및 링크를 공유하는 모든 곳에서 인스턴트 앱을 사용할 수 있다 함.

Android 6.0 (API 23) 이상에서만 실행됨.

자주 묻는 질문(FAQ)

필요한 것들

앱을 인스턴트 앱에 맞춰 feature 모듈과 APK용 / Instant App용 모듈로 구성해야 함.

인스턴트 앱은 링크 기반으로 진입점을 작업하며, 인증을 위한 웹 도메인이 필요함.

(간단히 로컬 테스트는 실제 도메인 없어도 가능하나, 구글 플레이 배포시는 필요함.)

인스턴트 앱 구조 맞추기

기존 앱을 인스턴트 앱 구조에 맞춰 변경해보자.

기존 프로젝트의 기본 모듈을 base feature로 수정 후 이를 참조하여 APK, Instant App용 모듈을 추가한다.

기존 앱 base feature module로 변경

  1. 기존 app 모듈명을 base feature명으로 수정 (ex. base_module)

  2. base_module의 gradle 파일을 열어 아래와 같이 수정

    // apply plugin: 'com.android.application'
    apply plugin: 'com.android.feature'
    ...
    android {
        ...
        baseFeature true
        ...
    }

APK Module 만들기

  1. Module 추가 (File > New > New Module)

  2. Phone & Table Module 선택

  3. 모듈명 기입.(ex. apk_module)

    앱 이름 및 최소 SDK 버전 등을 확인해야 함.

  4. Add No Activity 선택.

Base Module과 APK Module 연결

  1. base_module의 gradle 파일을 열어 아래와 같이 수정 (applicationIdSuffix 가 있다면 주석 처리)

    android {
        ...
        defaultConfig {
            ...
            //applicationId "com.mycompany.example"
            ...
        }
    }
    ...
    dependencies {    
        ...
        application project(":apk_module")
        ...
    }
  2. apk_module의 gradle 파일을 열어 아래와 같이 수정

    android {
        ...
        defaultConfig {
            // applicationId "com.mycompany.example.apk_module"
            applicationId "com.mycompany.example"
            ...
        }
        ...
        dependencies {
            implementation project(':base_module')
        }
    }
  3. base_module의 AndroidManifest.xml 파일을 열어 아래와 같이 수정

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              xmlns:tools="http://schemas.android.com/tools"
              package="com.mycompany.example">
    ...
    </manifest>
  4. apk_module의 AndroidManifest.xml 파일을 열어 아래와 같이 수정

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
              package="com.mycompany.example.app">
    </manifest>

Instant App Module 만들기

  1. Module 추가 (File > New > New Module)

  2. Instant App 선택

  3. 모듈명 기입. (ex. instantapp)

  4. instantapp 모듈의 build.gradle에 아래와 같이 추가

    dependencies {
        implementation project(':base_module')
    }
  5. Instant App에서 사용 가능한 권한 확인

    • ACCESS_COARSE_LOCATION
    • ACCESS_FINE_LOCATION
    • ACCESS_NETWORK_STATE
    • BILLING
    • CAMERA
    • INSTANT_APP_FOREGROUND_SERVICE (API level 26 or higher)
    • INTERNET
    • READ_PHONE_NUMBERS (API level 26 or higher)
    • RECORD_AUDIO
    • VIBRATE

Google Play에서 "Try Now" 을 위한 처리 추가

  1. base_module의 기본 액티비티 사용

  2. base_module의 기본 URL 생성

    <activity android:name="com.example.base_module.MainActivity" ... >
        <meta-data android:name="default-url"
                   android:value="https://example.com/welcome" />
    </activity>

인스턴트 앱 접근을 위한 URL 제공

  1. base_module의 AndroidManifest.xml 파일에서 액티비티에 URL 매핑 적용

    HTTP와 HTTPS 모두 지원해야 함

    <activity android:name="com.example.base_module.MainActivity" ... >
        <intent-filter android:autoVerify="true">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data
                android:scheme="http"
                android:host="example.com"
                android:pathPrefix="/welcome" />
            <data android:scheme="https" />
        </intent-filter>
    </activity>
  2. 인스턴트 앱 실행시 진입할 액티비티의 해당 URL에 autoVerify 옵션 추가

    <activity android:name="com.example.base_module.MainActivity" ... >
         <intent-filter android:autoVerify="true">
             ...
         </intent-filter>
    </activity>

인스턴트 앱 테스트

  1. Android Studio 의 "Run" -> "Edit Configurations"
  2. instantapp 모듈 선택
  3. "General" 탭의 "Launch Options"에서 "Launch" 값을 "URL" 선택
  4. "General" 탭의 "Launch Options"에서 "URL" 값을 실행할 액티비티의 매핑 URL로 입력
  5. 멀티태스킹 화면 등에서 아이콘에 번개표시로 인스턴트 앱 확인 

인스턴트 앱 링크 연결

Android 앱 링크를 설정하여 앱에서 직접 링크의 특정 콘텐츠로 이동하는 용도로 Deep Link와 App Link가 사용됨.

Deep Link

앱의 특정 콘텐츠로 바로 연결하는 URL. 인텐트 필터를 추가하여 인텐트에서 데이터를 추출하여 처리함.

App Link

Android 6.0 (API 23) 이상에서 앱이 주어진 유형의 링크의 기본 처리기로 지정되도록 허용함.

  • 앱 링크는 소유하고 웹 사이트 도메인에 연결되는 HTTP URL을 사용하므로 다른 앱이 링크 사용 불가 (Google 웹 사이트 연결 방법 중 하나를 통해 도메인 소유권 확인 필요)
  • 웹 사이트와 앱의 동일한 콘텐츠에 대해 하나의 HTTP URL을 사용. 앱이 없을 경우 웹 사이트로 이동됨.
  • 인스턴트 앱 지원을 하기 위해 앱 링크 설정
  • 모바일 브라우저, Google 검색 앱, Android 화면 검색, Google Assistant를 통해 Google 에서 URL을 클릭하여 열 수 있음.

Android App Link 추가하기

  1. 특정 컨텐츠에 대한 딥링크를 앱에 생성. (위 내용 중 "인스턴트 앱 접근을 위한 URL 제공" 참조)
  2. 딥링크 확인 추가. 인스턴트 앱에서 사용할 URL의 실제 웹 링크 소유자 확인. (Google Search Console에서 소유자 확인한 사이트에 Digital Asset Links JSON 파일이 있어야 함.) (Developers 문서에는 위와 같지만, Google Search Console에 대한 부분은 안해도 인스턴트 앱이 되긴 했음.) 참조 : https://developer.android.com/training/app-links/


+ Recent posts