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

Я пытаюсь создать приложение TWA в Android Studio, которое могло бы работать со всеми нашими доменами и обеспечивать плавную навигацию между ними, но без идей. Проблема в том, что при просмотре в пределах одного домена все в порядке, кнопка «Назад» на телефоне возвращает к ранее просмотренной странице. Но как только вы переключаетесь на другой домен, похоже, что приложение реинициализируется, и кнопка «назад» не возвращает на страницу предыдущего домена. Вместо этого оно минимизирует приложение ...

Все домены содержат файлы цифровых активов в соответствующих папках, отпечатки пальцев в порядке, приложение отлично работает с каждым отдельным доменом, но продолжает действовать, как вы только что открыли его при попытке передатьиз одного домена в другой по ссылке.

Все домены добавляются в отдельные теги <data> в фильтр намерений с action.view и категориями DEFAULT и BROWSABLE в манифесте. Попытка добавления отношений в отчетах об активах к каждому из них, но безуспешно, чтобы получить желаемый результат.

Может быть, кто-то может заставить его работать? Будем благодарны за любые советы!

Спасибо!

Куски моего глупого кода новичка

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ru.domain.newsapp">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true">

        <meta-data
            android:name="asset_statements"
            android:resource="@string/asset_statements" />

        <activity
            android:name="android.support.customtabs.trusted.LauncherActivity"
            android:theme="@style/Theme.LauncherActivity"
            android:label="@string/app_name">


            <meta-data
                android:name="android.support.customtabs.trusted.DEFAULT_URL"
                android:value="https://sub1.domain.ru/" />

            <meta-data
                android:name="android.support.customtabs.trusted.STATUS_BAR_COLOR"
                android:resource="@color/colorPrimary" />


            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>


            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW"/>
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE"/>
                <data android:scheme="https" android:host="sub1.domain.ru"/>
                <data android:scheme="https" android:host="sub2.domain.ru"/>
                <data android:scheme="https" android:host="sub3.domain.ru"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

res \ values ​​\ strings. xml

<resources>
    <string name="app_name">MyApp</string>
    <string name="asset_statements">
        [{
            \"relation\": [\"delegate_permission/common.handle_all_urls\"],
            \"target\": {
                \"namespace\": \"web\",
                \"site\": \"https://sub1.domain.ru\"}
        },{
            \"relation\": [\"delegate_permission/common.handle_all_urls\"],
            \"target\": {
                \"namespace\": \"web\",
                \"site\": \"https://sub2.domain.ru\"}
        },{
            \"relation\": [\"delegate_permission/common.handle_all_urls\"],
            \"target\": {
                \"namespace\": \"web\",
                \"site\": \"https://sub3.domain.ru\"}
        }]
    </string>
</resources>

res \ values ​​\ styles.xml

<resources>

    <!-- Base application theme. -->
    <style name="Theme.LauncherActivity" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowAnimationStyle">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionModeOverlay">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>
</resources>

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28

    defaultConfig {
        applicationId "ru.domain.newsapp"
        minSdkVersion 16
        targetSdkVersion 28
        versionCode 2
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        signingConfig signingConfigs.release
    }
    buildTypes {
        release {
            minifyEnabled false
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {
    implementation 'com.android.support:appcompat-v7:+'
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.github.GoogleChrome.custom-tabs-client:customtabs:91b4a1270b'
}

UPD Добавлен код из файлов

Также кажется, что это поведение, о котором я говорил, - это не повторная инициализация, а наложение с другим содержимым субдомена по умолчанию, которое открыто, но без панели действий, как в установленном PWA, и это приводит к проблеме, что это наложение не может быть закрыто для возврата кпредыдущий домен ... И я очень надеялся, что это может действовать как обычная вкладка браузера и открывать каждую ссылку в том же окне ...

1 Ответ

0 голосов
/ 15 ноября 2019

Благодаря ребятам из Google проблема была решена.

Чтобы иметь возможность открывать ссылки на другие доверенные домены в окне приложения TWA и как плавный переход на одной вкладке (без дополнительного наложения), мне нужно было использоватьandroid.support.customtabs.trusted.ADDITIONAL_TRUSTED_ORIGINS и передать массив строк с требуемым дополнительным доверенным доменом, а также сохранить только основной из них с

<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>

Существует еще ошибка, которую необходимо устранить, поскольку дополнительные доверенные источники все еще существуютпоказать строку URL, но я надеюсь, что это произойдет в ближайшее время.

Ссылка на это в github android-browser-helper's https://github.com/GoogleChrome/android-browser-helper/commit/24eefc89e69532d7f57fc83533886c9d762a41eb https://github.com/GoogleChrome/android-browser-helper/commit/a1507153b420da6a3191fa23c64c5a0c06036e06

...