Instant App

 

Avant-propos

Avant de commencer, vous devez télécharger notre SDK via l’application Tag Composer en vous connectant à votre compte AT Internet ou utiliser la dépendance du SDK présente dans JCenter (voir la documentation sur l\’intégration de la bibliothèque).

La création d’une application instantanée nécessite au minimum la version Android Studio 3.0.

Voir l’ensemble des prérequis sur la documentation officielle : https://developer.android.com/topic/instant-apps/getting-started/index.html

 

Structure de base d’un projet

structure

Une application instantanée « basique » se compose de trois modules, le module de l’application instantanée (Instant app module), le module de l’application installée (App module) et le module feature de base (Base feature) (voir https://developer.android.com/topic/instant-apps/getting-started/structure.html).

 

Intégration dans Android Studio

 

Bibliothèque

Le principe d’intégration reste le même que sur une application standard. Seule la destination change puisque, pour intégrer la bibliothèque à votre projet, vous devez la copier dans le dossier « MonProjet/feature/libs » du module feature de base (Base feature), ce module contenant entre autre les ressources partagées entre les modules Instant app et App.

Après avoir synchronisé votre projet (Sync Project with Gradle Files), ouvrez le fichier build.gradle du module feature de base (feature dans l’exemple).

feature

Fichier build.gradle :

  • Intégration de la bibliothèque au format JAR
apply plugin: 'com.android.feature'

android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

// If this block doesn't exists, add it
repositories{
    maven {
        url "https://dl.bintray.com/atinternet/maven/"
    }
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    api fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(':base')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
  • Intégration de la bibliothèque au format AAR
apply plugin: 'com.android.feature'

android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

// If this block doesn't exists, add it
repositories{
    maven {
        url "https://dl.bintray.com/atinternet/maven/"
    }
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    api fileTree(dir: 'libs', include: ['*.aar'])
    implementation project(':base')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
}
  • Intégration de la dépendance JCenter
apply plugin: 'com.android.feature'

android {
    compileSdkVersion 26
    defaultConfig {
        minSdkVersion 23
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

// If this block doesn't exists, add it
repositories{
    maven {
        url "https://dl.bintray.com/atinternet/maven/"
    }
    flatDir {
        dirs 'libs'
    }
}

dependencies {
    implementation project(':base')
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.1'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
    api 'com.atinternet:Tracker:2.x.x'// >= 2.0.6
}

Dans le cadre des « bonnes pratiques » préconisées sur les Instant App, il est conseillé de réduire le poids global des modules (incluant le dossier « libs » avec les archives). Il est alors préférable pour l’utilisateur de charger la bibliothèque au format JAR, plus léger.
A noter toutefois, que, dans ce cas, il ne sera pas possible d’activer le Livetagging et le Debugger nécessitant des ressources graphiques présentes seulement dans l’archive au format AAR.

Les fonctionnalités Livetagging et Debugger ne sont pas disponibles sur les modules de type Instant app à cause notamment de limites en terme de permissions Android (impossibilité d’utiliser la permission sur l’overlay : « android.permission.SYSTEM_ALERT_WINDOW »). Voir https://developer.android.com/topic/instant-apps/faqs.html pour plus de détails.

 

Autorisations

L’ajout des autorisations doit se faire dans le fichier AndroidManifest.xml du module feature de base.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 

Marquage

Le marquage doit être ajouté dans les activity de la ou des features concernées en fonction de la structure du projet.

Selon la FAQ de la documentation Android : « All the network traffic from inside instant apps must use HTTPS. Instant apps does not support HTTP. » (voir https://developer.android.com/topic/instant-apps/faqs.html).

Le mode secure du Tracker doit être activé (avec log secure) pour permettre l’envoi de hits sur une Instant app.

 

Dernière mise à jour : 11/12/2017