Как отправить данные из моего веб-приложения TWA в мое приложение? - PullRequest
0 голосов
/ 27 августа 2018

В Crosswalk у меня был очень удобный интерфейс javascript-to-app, поэтому я мог вызывать функцию java из javascript и обмениваться данными из моего веб-приложения с моим приложением для Android .

Как мне добиться этого с помощью пользовательских вкладок (или Trusted Web Activity)?

Кажется, нет никакого пути. Должно быть, особенно когда мое приложение и моя игра / веб-приложение принадлежат одному и тому же автору.

Например, я не доверяю LocalStorage, особенно теперь с пользовательскими вкладками, он может быть очищен, или пользователь может удалить браузер и установить другой, так что сохраненные данные будут потеряны, и пользователь будет рассержен на приложение для потери сохраненных данных, даже не понимая, что данные были в браузере, а не в приложении. Поэтому я использовал, чтобы мои веб-приложения вызывали приложение для сохранения данных.

Еще один пример, когда пользовательская вкладка использует Firefox вместо Chrome, тогда синтез речи будет недоступен. Я могу легко обнаружить это в моем веб-приложении. Но я хочу, чтобы мое веб-приложение вызывало приложение и отправляло ему слова для произношения. Это то, что я делал с Crosswalk, поскольку он также не поддерживал речь.

Я понимаю, что веб-просмотры больше подходят для моего использования, чем настраиваемые вкладки, но когда веб-просмотр нельзя использовать на устройстве (особенно на Android <5), у моего приложения не так много других вариантов, кроме открытия Пользовательская вкладка (или Trusted Web Activity, если она доступна). Я больше не могу использовать Crosswalk, он снят с производства и все еще полон серьезных ошибок. А другие решения, такие как GeckoView или Alibaba Gcanvas, не готовы. </p>

редактирование:

В этой статье о Trusted Web Activity https://developers.google.com/web/updates/2017/10/using-twa Я прочитал

Тем не менее, вы можете координировать с веб-контентом, передавая данные на и страницу в URL (например, через параметры запроса, пользовательские Заголовки HTTP и целевые URI.)

редактирование:

Я читал много страниц. Мне все еще непонятны намерения и глубокие ссылки, но я попробовал вот что.

Я добавил фильтр намерений для настраиваемого действия:

<receiver android:name=".OutgoingReceiver" android:enabled="true">
    <intent-filter>
        <action android:name="custom_tabs_js_interface" />
    </intent-filter>
</receiver>

Я создал класс для этого получателя:

public class OutgoingReceiver extends BroadcastReceiver {

    public static final String CUSTOM_INTENT = "custom_tabs_js_interface";

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "received" , Toast.LENGTH_SHORT).show();
    }

и я называю это в javascript с

location.href="intent:#Intent;action=custom_tabs_js_interface;end";

Пока я даже не передаю данные, я просто пытаюсь вызвать их. но ничего не происходит ...

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Поддержка более старых версий Android рекомендуется по мере возможности. Дистрибуция версий платформы (https://developer.android.com/about/dashboards/) на момент написания этого поста говорится, что вы потеряете около 12,7% устройств, если откажетесь от поддержки версии 4.

Подумайте о повышении минимальной версии до Lollipop, где WebView был перемещен в APK, и используйте его. Вы получите время и простоту реализации, поскольку сможете вызывать @JavascriptInterface аннотированные методы, сохраняя при этом своих пользователей вовлеченными в ваше приложение (https://developer.android.com/guide/webapps/webview_.

0 голосов
/ 07 сентября 2018

Вы можете использовать гибридное решение:

  1. Используйте пользовательские вкладки, как вы хотите для игры.

  2. Ваш сервер может вызывать ваше приложение, когда это необходимо, используя программирование сокетов или push-уведомления, чтобы получить данные, которые необходимо сохранить в вашем приложении.

Также, если отправка данных в ваше приложение не удалась, ваша игра может предупредить пользователя в браузере во время игры.

...