Незабавни приложения за Android 101: какви са те и как работят

Незабавните приложения за Android са страхотен нов начин за използване на естествени приложения без предварителна инсталация. Само части от приложението се изтеглят и стартират, като придават на потребителите естествен вид и усещане за няколко секунди.

Как работят те?

На първо място, не ги бъркайте с Прогресивни уеб приложения, където икона на стартер отваря уеб приложение чрез браузъра Chrome. Незабавно приложение наистина ще бъде инсталирано на телефона ви, но без да е необходимо да го търсите в Play Store.

Уеб URL адресите ще задействат Google Play Store на вашия телефон и ще извлекат само частта от приложението, която е свързана със заявения URL адрес. Останалата част от приложението не се изтегля. По този начин потребителите могат бързо да се насладят на местното изживяване на вашето приложение за Android.

Какъв е фонът?

Е, трябва да разделите вашия Android проект на няколко модула. Един от тях е базовият модул със съществения код, който се използва във всички останали модули (API връзка, база данни, споделени предпочитания и т.н.). Другите, функционални модули, съдържат специфични функционалности и дейности, които могат да бъдат достъпни чрез свързани URL адреси.

Да приемем, че имате уеб приложение със списък с продукти и една страница на продукта. Например можете да свържете //example.domain/products, за да стартирате ProductsListActivity и //example.domain/products/12, за да стартирате ProductActivity.

За да ги направят достъпни като незабавни дейности в приложенията, те трябва да бъдат пакетирани в отделни модули за функции и те трябва да имат свързани връзки към приложения, дефинирани в техните модулни манифести. Ще ги наречем модули Product и Product list.

Сега, когато потребителят се опита да отвори //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.