TWA: попытка сделать плавную навигацию между доменами и безуспешно
Я пытаюсь создать приложение TWA в Android Studio, которое могло бы работать со всеми нашими доменами и обеспечивать плавную навигацию между ними, но у меня закончились идеи. Проблема в том, что при просмотре в пределах одного домена все в порядке, кнопка "назад" на телефоне возвращает на ранее просмотренную страницу. Но как только вы переключаетесь на другой домен, похоже, что приложение повторно инициализируется, и кнопка "назад" не ведет обратно на страницу предыдущего домена. Вместо этого он минимизирует приложение...
Все домены содержат файлы цифровых активов в соответствующих папках, отпечатки пальцев в порядке, приложение отлично работает с каждым отдельным доменом, но продолжает действовать так же, как вы только что открыли его при попытке перейти от одного домена к другому по ссылке.
Все домены добавляются в отдельные <data>
теги в фильтре намерений с action.view
и категории DEFAULT
а также BROWSABLE
в манифесте. Пытался добавить отношения в операторы активов к каждому из них, но безуспешно добился желаемого результата.
Может у кого получилось заставить работать? Любой совет будет принят во внимание!
Спасибо!
Куски моего глупого кода newb
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 ответ
Благодаря ребятам 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-helperhttps://github.com/GoogleChrome/android-browser-helper/commit/24eefc89e69532d7f57fc83533886c9d762a41ebhttps://github.com/GoogleChrome/android-browser-helper/commit/a1507153b420da6a3191fa23c64c5a0c06036e06
UPD В новой версии android-browser-helper (1.2.0) эта проблема наконец-то исправлена, и теперь мультидомен работает должным образом (дополнительные доверенные источники проверяются правильно). Обратите внимание на изменения в вызове дополнительного массива доверенных источников, как указано в демонстрации в android-browser-helper.