I am trying to open a TWA inside my app and have researched for 2 days.
I've already managed to create a single TWA app, no fuss, just edit the manifest and a few things more.
Now I need to have my own app - let's say the app has a splash screen activity at first which then opens the TWA inside the app. Can I launch a TWA inside my app through a simple splash screen activity, for example?
I did try to use CustomTabs
way, but it says it is deprecated and to use TrustedWebActivityIntentBuilder
instead, but there is 0, I repeat, ZERO documentation on how to use that!
Android development documentation is horrible. Among other things, the documentation pointers are out-dated. (Read videos on their channel linking to guides that are no longer valid for what is discussed in the video itself)
The closest thing I found was this sample project. This uses a shocking number of deprecated things rendering the adaptation of that method into my app completely useless. It also makes use of a countless number of custom Classes/Helpers created just for that project, leading me to a never ending marathon of copy-pasting each one of them just to find out that inside that one there are more that need to be copied over to the project.
What the heck is TWA: Trusted Web Activities are a new way to integrate your web-app content with your Android app using a protocol based on Custom Tabs.
you don't have to maintain the app, everything you have to do is updating the code on your PWA site. in order to build a simple TWA, you need to install android studio, create a project, build an APK android bundle file, you can check this link to get the sense with TWA.
When launching the Trusted Web Activity from an existing Activity, the recommended approach is using TwaLauncher
, from android-browser-helper
. There's a demo for this use-case, but the implementation would be:
android-browser-helper
in the build.gradle
:dependencies {
...
implementation 'com.google.androidbrowserhelper:androidbrowserhelper:2.0.0'
}
public void launchTwa(Uri uri) {
TrustedWebActivityIntentBuilder builder = new TrustedWebActivityIntentBuilder(uri)
.setNavigationBarColor(Color.RED) // Use the builder to customise.
.setToolbarColor(Color.BLUE);
TwaLauncher launcher = new TwaLauncher(this);
launcher.launch(builder, null, null);
}
Comparing to other approaches:
Using LauncherActivity
: Using LauncherActivity
adds an extra level of indirection, which will introduce delays when launching the Trusted Web Activity from an existing Activity (eg: Activity X starts the LauncherActivity, which in turn starts the Trusted Web Activity).
Using androidx.browser
directly: There's nothing wrong with this approach, but TwaLauncher
encapsulates almost everything needed to handle that already.
To my opinion there is a simpler approach.
First: declare your TWA activity in AndroidManifest.xml like shown below. Note that it won't start by default because it doesn't handle the android.intent.action.MAIN intent, so you can implement your own main activity.
<activity
android:name="com.google.androidbrowserhelper.trusted.LauncherActivity">
<!-- Edit android:value to change the url opened by the TWA -->
<meta-data
android:name="android.support.customtabs.trusted.DEFAULT_URL"
android:value="https://YOUR_SITE_URL" />
<!--
This intent-filter allows the TWA to handle Intents to open
YOUR_SITE_URL
-->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<!-- Edit android:host to handle links to the target URL-->
<data
android:scheme="https"
android:host="YOUR_SITE_URL"/>
</intent-filter>
</activity>
Second: somewhere in your code start the TWA activity with the intent like this. You can also pass site url in the intent if you wish.
Intent intent = new Intent(this, com.google.androidbrowserhelper.trusted.LauncherActivity.class);
intent.setData(Uri.parse("ANOTHER_SITE_URL"));
startActivity(intent);
Also note the dependencies required to use TWA with AndroidX:
implementation 'androidx.browser:browser:1.0.0'
implementation 'com.github.GoogleChrome:android-browser-helper:ff8dfc4ed3d4133aacc837673c88d090d3628ec8'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With