Как получить доступ и передать параметры модулям Android Instant App

В обычных установленных приложениях можно использовать технику Deep Linking , чтобы не только открыть определенное приложение из URL-адреса, но и перенаправить его на определенный раздел / функцию, такую ​​как конкретная публикация Facebook или конкретные координаты на карте.

Поскольку я читал, что с Instant Apps это будет невозможно, потому что ссылки уже указывают на конкретный модуль для загрузки и запуска, как можно получить доступ не только к указанному модулю, но и передать ему некоторые параметры?

Например:

Это ссылка, с которой будет загружен модуль только для просмотра моего приложения карты: « www.myinstantappexample.com/onlyviewmap »

Если я хочу, чтобы он указывал на определенный набор координат, как бы была создана ссылка? Будет ли это так: « www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000 »?

Из того, что я смог найти, Google не охватывает этот аспект, и я действительно не могу обернуть его вокруг.

Мгновенные приложения и глубокая привязка

Мгновенные приложения полагаются на ссылки на приложения для работы, а ссылки на приложения – это всего лишь один тип глубокой ссылки. Таким образом, для Instant Apps все еще возможно глубокое связывание и на самом деле абсолютно важно, как они функционируют. Тем не менее, схема URI глубокой привязки (которая все еще очень распространена в приложениях для Android) не поддерживается.

Разница между обычным приложением и Instant App заключается в том, что устройство будет загружать только одно действие в ответ на ссылку приложения, которую пользователь нажимает, вместо того, чтобы загружать полный пакет через Play Store. Это более бесшовный опыт для пользователя, но базовая технология работает одинаково.

Передача пользовательских параметров

Если пользователь нажимает URL-адрес, связанный с приложениями, например http://www.myinstantappexample.com/onlyviewmap/?x=0.000&y=0.000 , после его открытия вы получите всю строку обратно в приложение. Вам придется самостоятельно анализировать переменные x и y , но они будут доступны вам. Что-то вроде этого:

 Uri data = this.getIntent().getData(); if (data != null && data.isHierarchical()) { String uri = this.getIntent().getDataString(); Log.i("MyApp", "Deep link clicked " + uri); } 

Вам просто нужно будет манипулировать значением uri чтобы найти то, что вам нужно.

Альтернативный подход к пользовательским параметрам

Кроме того, вы можете использовать Branch.io (полное раскрытие: я нахожусь в отделении), чтобы задействовать ваши ссылки. У нас есть полная поддержка Instant Apps , и это позволяет вам работать с гораздо более дружественным форматом данных. Мы позволяем вам создавать такие ссылки, чтобы контролировать каждую часть поведения:

 branch.link({ tags: [ 'tag1', 'tag2' ], channel: 'facebook', feature: 'dashboard', stage: 'new user', data: { x: '0.000', y: '0.000', '$desktop_url': 'http://myappwebsite.com', '$ios_url': 'http://myappwebsite.com/ios', '$ipad_url': 'http://myappwebsite.com/ipad', '$android_url': 'http://myappwebsite.com/android', '$og_app_id': '12345', '$og_title': 'My App', '$og_description': 'My app\'s description.', '$og_image_url': 'http://img.ohandroid.com/android/image.png' } }, function(err, link) { console.log(err, link); }); 

В ответ вы получаете URL-адрес, например http://myappname.app.link/iDdkwZR5hx , а затем в приложении после нажатия ссылки вы получите то, что выглядит следующим образом:

 { tags: [ 'tag1', 'tag2' ], channel: 'facebook', feature: 'dashboard', stage: 'new user', data: { x: '0.000', y: '0.000' } } 

Если я хочу, чтобы он указывал на определенный набор координат, как бы была создана ссылка?

Все зависит от вас, как включать любую дополнительную информацию в URL-адрес. Это может быть через URL-параметры или в самом пути. Например.

https://www.myinstantappexample.com/location/2/user/5 https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4

Затем вы анализируете URL-адрес в принимающей Activity . Класс Uri включает в себя ряд вспомогательных методов, таких как getQueryParameter() и getPathSegments() чтобы сделать это проще.

Например, чтобы проанализировать этот URL-адрес:

https://www.myinstantappexample.com/onlyviewmap/?x=1.2&y=3.4

Вы бы сделали что-то подобное в своей Activity :

 Uri uri = getIntent().getData(); String x; String y; if (data != null) { x = uri.getQueryParameter("x"); // x = "1.2" y = uri.getQueryParameter("y"); // y = "3.4" } if (x != null && y != null) { // do something interesting with x and y } 

Для этого вам нужно использовать «помощник ссылок на приложения» в «Инструменты» – «Помощник по связям с приложениями»

Затем проверьте свои ссылки и в селекторе путей убедитесь, что выбрана опция «pathPrefix».

Затем в нижней части метода OnCreate вашей активности (который связан с недавно отредактированной ссылкой) добавьте этот код:

 Intent appLinkIntent = getIntent(); String appLinkAction = appLinkIntent.getAction(); Uri appLinkData = appLinkIntent.getData(); // then use appLinkData.getQueryParameter("YourParameter") 

Вы можете протестировать и отладить это, используя параметр «editConfigurations», просто откройте это окно и отредактируйте свой модуль instantApp (тот, который был запущен с недавно отредактированной ссылкой), и в поле URL добавьте необходимые параметры URL. (тогда просто запустите этот модуль: D)

Надеюсь, это будет полезно.