Доверенная веб-активность / данный CustomTabsIntent должен быть связан с действительным CustomTabsSession
Я включил Trusted Web Activity в свое приложение для Android, при запуске TwaLauncherActivity в качестве основного Activity отображается пустой белый экран. Я перешел по ссылке ниже GitHub. https://github.com/GoogleChrome/custom-tabs-client/tree/master/svgomg. Пожалуйста, предложите какое-то решение, заранее спасибо,
TwaLauncherActivity.java
package com.therightdoctors.dpmdoctor;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.support.v7.app.AppCompatActivity;
public class TwaLauncherActivity extends AppCompatActivity
implements TwaSessionHelper.TwaSessionCallback {
private static final String TWA_ORIGIN = "https://dpm.therightdoctors.com";
private static final String TARGET_URL = TWA_ORIGIN;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twa_launcher);
Uri originUri = Uri.parse(TWA_ORIGIN);
TwaSessionHelper twaSessionHelper = TwaSessionHelper.getInstance();
twaSessionHelper.setTwaSessionCallback(this);
twaSessionHelper.bindService(this, originUri);
/* TwaSessionHelper.TwaSessionCallback twaSessionCallback = twaSessionHelper.mTwaSessionCallback.get();
if (twaSessionCallback != null) twaSessionCallback.onTwaSessionReady();*/
// Set an empty transition from TwaLauncherActivity to the splash screen.
CustomTabsIntent customTabsIntent = twaSessionHelper.createIntentBuilder()
.setStartAnimations(this, 0, 0)
.build();
Uri openUri = Uri.parse(TARGET_URL);
twaSessionHelper.openTwa(this, customTabsIntent, openUri);
}
@Override
protected void onDestroy() {
super.onDestroy();
TwaSessionHelper twaSessionHelper = TwaSessionHelper.getInstance();
twaSessionHelper.setTwaSessionCallback(null);
}
public void openTwa() {
TwaSessionHelper twaSessionHelper = TwaSessionHelper.getInstance();
// Set an empty transition from TwaLauncherActivity to the TWA splash screen.
CustomTabsIntent customTabsIntent = twaSessionHelper.createIntentBuilder()
.setStartAnimations(this, 0, 0)
.build();
Uri openUri = Uri.parse(TARGET_URL);
twaSessionHelper.openTwa(this, customTabsIntent, openUri);
}
@Override
public void onTwaSessionReady() {
openTwa();
}
@Override
public void onTwaSessionDestroyed() {
}
@Override
public void onTwaOpened() {
/*finishAndRemoveTask();*/
}
}
Каталог отладки показывает ниже исключения,
java.lang.RuntimeException: Невозможно запустить действие ComponentInfo{com.therightdoctors.dpmdoctor/com.therightdoctors.dpmdoctor.TwaLauncherActivity}: java.lang.IllegalArgumentException: данный CustomTabsIntent должен быть связан с действительным CustomTabsSAccessAntAapp.Aper.App. (ActivityThread.java:2646)
1 ответ
TWA требуют подключения к CustomTabsService
должен быть установлен, и код пытается открыть TWA, прежде чем это будет сделано.
На onCreate
метод, код вызывает bindService
и пытается открыть TWA сразу после этого вызова, до того, как соединение будет установлено и сеанс будет готов (что происходит асинхронно).
Правильнее всего открыть CustomTab из onTwaSessionReady
обратный вызов, чтобы убедиться, что соединение установлено до открытия CustomTab.
Код должен выглядеть следующим образом:
package com.therightdoctors.dpmdoctor;
import android.net.Uri;
import android.os.Bundle;
import android.support.customtabs.CustomTabsIntent;
import android.support.v7.app.AppCompatActivity;
public class TwaLauncherActivity extends AppCompatActivity
implements TwaSessionHelper.TwaSessionCallback {
private static final String TWA_ORIGIN = "https://dpm.therightdoctors.com";
private static final String TARGET_URL = TWA_ORIGIN;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_twa_launcher);
Uri originUri = Uri.parse(TWA_ORIGIN);
TwaSessionHelper twaSessionHelper = TwaSessionHelper.getInstance();
twaSessionHelper.setTwaSessionCallback(this);
twaSessionHelper.bindService(this, originUri);
}
@Override
protected void onDestroy() {
super.onDestroy();
TwaSessionHelper twaSessionHelper = TwaSessionHelper.getInstance();
twaSessionHelper.setTwaSessionCallback(null);
}
/**
* This method is defined on the `TwaSessionHelper.TwaSessionCallback`
* interface, which is implemented by the Activity.
*/
@Override
public void onTwaSessionReady() {
TwaSessionHelper twaSessionHelper = TwaSessionHelper.getInstance();
// Set an empty transition from TwaLauncherActivity to the splash screen.
CustomTabsIntent customTabsIntent = twaSessionHelper.createIntentBuilder()
.setStartAnimations(this, 0, 0)
.build();
Uri openUri = Uri.parse(TARGET_URL);
twaSessionHelper.openTwa(this, customTabsIntent, openUri);
openTwa();
}
@Override
public void onTwaSessionDestroyed() {
}
@Override
public void onTwaOpened() {
// call the below if you want the launcher activity to be
// removed from the task stack (eg: back button doesn't go back to it)
/*finishAndRemoveTask();*/
}
}