Миттєві додатки Android 101: що вони таке і як вони працюють

Миттєві програми для Android - це крутий новий спосіб використовувати рідні програми без попередньої установки. Завантажуються та запускаються лише частини програми, що надає користувачам природний вигляд за кілька секунд.

Як вони працюють?

Перш за все, не плутайте їх з прогресивними веб-програмами, де піктограма запуску відкриває веб-програму через браузер Chrome. Миттєвий додаток фактично буде встановлено на вашому телефоні, але без необхідності його пошуку в Play Store.

Веб-URL-адреси спрацьовують Google Play Store на вашому телефоні та отримують лише ту частину програми, яка пов’язана із запитаною URL-адресою. Решта програми не завантажується. Таким чином, користувачі можуть швидко насолоджуватися рідним досвідом програми Android.

Який фон?

Ну, вам потрібно розділити свій проект Android на пару модулів. Одним з них є базовий модуль із основним кодом, який використовується у всіх інших модулях (підключення API, база даних, спільні налаштування тощо). Інші, функціональні модулі, містять специфічні функціональні можливості та дії, доступ до яких здійснюється через пов'язані URL-адреси.

Скажімо, у вас є веб-програма зі списком продуктів та однією сторінкою продукту. Наприклад, ви можете зв’язати //example.domain/products для запуску ProductsListActivity та //example.domain/products/12 для запуску ProductActivity.

Щоб зробити їх доступними як миттєві дії додатків, їх потрібно упакувати в окремі модулі функцій, і вони повинні мати пов'язані посилання на програми, визначені в їх маніфестах модулів. Ми будемо називати їх Модулями продукту та Списку товарів.

Тепер, коли користувач намагається відкрити //example.domain/products/12 , модулі Product і Base почнуть завантажуватися, а ProductActivity буде запущено.

Що таке посилання на програми та як вони визначаються?

Ви, напевно, чули про глибокі посилання. Вони визначені в маніфесті програми, і вони будуть зареєстровані в ОС. Коли користувач намагається відкрити таке посилання, ОС попросить користувача вибрати між відкриттям посилання у веб-браузері або у вашому додатку. Однак цього недостатньо для миттєвих додатків, вам потрібно зробити ще один крок далі - посилання на програми. Вам потрібно включити властивість autoVerify = ”true” .

Ваш додаток перевірить, чи вказані вами посилання дійсно пов’язані з вашим доменом. Для цього вам потрібно включити файл activlinks.json до наступної папки кореня домену:

//example.domain/.well-known/assetlinks.json.

Також зверніть увагу на властивість android: order = ”100 ″ . Це насправді пріоритет у цій справі. Якщо у вас є список товарів і товарний сингл, що відповідає одному шляху (/ products та / products / 10) , буде запущено єдине завдання продукту, якщо після шляху / products є ідентифікатор . Якщо ні, тоді запускається дія списку продуктів.

Дуже важливо це визначити. Якщо дві дії відповідають одному шляху, Play Store не знатиме, яку частину програми слід отримати.

Пов’яжіть свою програму з вашим доменом

Assetlinks.json потрібно буде містити ваші SHA256 сховища ключів хешів. Для поля відношення встановлено значення за замовчуванням нижче, і цільовий об'єкт повинен бути заповнений даними конкретного додатка та вашим хешем SHA256 сховища ключів.

[{ "relation": ["delegate_permission/common.handle_all_urls"], "target": { "namespace": "android_app", "package_name": "com.example.app", "sha256_cert_fingerprints":["00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"] } }]

Коли autoVerify = true робить свою магію, усі пов’язані додаткові посилання безпосередньо запускають вашу програму. Якщо у вас не встановлена ​​програма, миттєва програма буде завантажена.

Ось приклад демо-програми, яку ми робили нещодавно. При натисканні на відповідне посилання відкривається такий екран, який пропонує замість нього застосувати програму миттєвого пошуку. Зверніть увагу, як швидко програма відкривається, а на Oreo це ще швидше.

Як визначити миттєві модулі Android?

Для миттєвої програми ваш проект буде складатися щонайменше з трьох різних модулів. Для цього вам потрібно використовувати Android Studio 3.0. Якщо ви створюєте програму з нуля, є можливість увімкнути підтримку миттєвої програми для вашого проекту.

Усі наступні модулі ініціалізуються автоматично. Якщо ви модифікуєте стару програму, вам доведеться розбити старий модуль програми на єдиний базовий модуль та пару функціональних модулів. Крім того, вам потрібно буде створити програму та модуль миттєвих додатків, які ви будете використовувати для створення як звичайних, так і миттєвих файлів .apk.

Модуль програми

По-перше, вам потрібно створити модуль програми, який визначає залежності для всіх інших модулів (базовий + функціональний модулі). У файлі build.gradle цього модуля вам потрібно буде визначити наступне:

apply plugin: 'com.android.application' ...
dependencies { implementation project(':product') implementation project(':productlist') implementation project(':base') }

Базовий модуль

У цьому модулі ви визначите наступні оператори залежностей. Також переконайтеся, що тут застосовано плагін 'com.android.feature' .

apply plugin: 'com.android.feature' android { baseFeature true ... } 
dependencies { api 'com.android.support:appcompat-v7:26.0.1' api 'com.android.support.constraint:constraint-layout:1.0.2' implementation 'com.google.firebase:firebase-appindexing:11.0.4' application project(':app') feature project(':product') feature project(':productlist') }

Зверніть увагу, що тут оператори компіляції стають інструкціями API для регулярних залежностей, які ми використовували раніше. Проект програми та проекти проектів визначаються окремо.

Модуль функцій

Цей модуль матиме наступні налаштування, також із застосованим плагіном com.android.feature .

apply plugin: 'com.android.feature' ... dependencies { implementation project(':base') ... }

Вам потрібно вказати, який модуль є вашим базовим модулем, і включити його до заяви про проект реалізації. Далі ви можете включити залежності, які потрібні лише для цього конкретного модуля. Наприклад, якщо ви використовуєте бібліотеку анімації, яка не використовується в жодному з інших модулів.

Модуль миттєвих додатків

Finally, now there’s a com.android.instantapp plugin to be included in the build.gradle file for the instantapp module.

apply plugin: 'com.android.instantapp' dependencies { implementation project(':product') implementation project(':productlist') implementation project(':base') }

In this module, we will define which modules will be built as instant apps. The result of the instantapp module build is a zip file with the instant app APKs which you can upload separately to Google Play Store in the Android Instant Apps release manager. These APKs are handled similarly as the regular ones, they have their own rollout history and versioning.

That’s it! It’s fairly simple to start developing Android Instant Apps. But, there’s always a but!

What were the Android Instant Apps’ challenges?

First of all, the Instant Apps are not enabled by default for now. If you want to try it, you need to check your phone settings under Google account and enable the Instant Apps setting.

Next, we found that it’s extremely important to specify app links data in the following format:

 ...   

Both http and https schemes need to be defined as shown in this code snippet. Any other way would cause a link verification failure and the app wouldn’t be linked properly.

Also, there is a recommendation to include the following code snippet into one of the activities in your app manifest. This annotates which activity should be launched in case the Instant app is launched from the Settings or a system launcher.

The official documentation states that the Google Search would offer Instant app annotation by default (small thunder icon), but we had problems with it. For our demo app, this was not the case. Google Search results didn’t annotate our demo links as Instant apps and the links led to the web page. Only if we tried to open the associated link from another app, like Gmail, the whole instant app process was triggered and the instant app was launched. Have you encountered any similar problems?

Conclusion

When first announced two years ago, I was very enthusiastic about Android Instant Apps. They respond to the problem of users having to search for the apps on the Store and wait till they’re downloaded to start using them. Web apps are much more accessible in that regard and the ease of discovery is much better.

Instant apps come really close to filling this gap between web and native mobile apps. They already act very well and I think that they will become more popular with time. The main problems we encountered was a rather small community and the lack of proper documentation, but the situation on that matter is also getting better.

We would love to hear from you if you’ve tried using them or had any challenges implementing them!

Originally published at www.bornfight.com.