Zaufane działania w internecie nastawione na tworzenie offline

Za pierwszym razem, gdy użytkownik uruchomi progresywną aplikację internetową (PWA) przez Trusted Web aktywność, mechanizm Service Worker nie będzie jeszcze dostępny od procesu rejestracji jeszcze nie miała miejsca. Ponadto, jeśli użytkownik nie będzie miał połączenia w trakcie pierwszej aplikacji zamiast niestandardowego środowiska offline, strona błędu sieci to wyświetlane.

Przykładem tego może być sytuacja, gdy użytkownik pobierze aplikację PWA. w Sklepie Play. Jeśli użytkownik nie ma połączenia podczas próby otwarcia pierwszy raz, mechanizm Service Worker nie będzie jeszcze dostępny do wyświetlenia stronę zastępczą offline. Wyświetli się standardowa strona błędu, co źle wpływa na wrażenia użytkowników.

TWA offline: standardowa strona offline

Z tego przewodnika dowiesz się, jak w takiej sytuacji pokazać swoją aktywność przez sprawdza stan sieci przed uruchomieniem zaufanej aktywności internetowej.

Tworzenie niestandardowej aktywności LauncherActivity

Pierwszym krokiem jest utworzenie niestandardowego działania programu uruchamiającego. To urządzenie (Activity) który będzie zawierać ekran trybu offline, informujący o braku połączenia. przy pierwszym uruchomieniu aplikacji przez użytkownika.

Wywołaj aktywność OfflineFirstTWALauncherActivity i zwiększ jej zakres: com.google.androidbrowserhelper.trusted.LauncherActivity

import com.google.androidbrowserhelper.trusted.LauncherActivity;

public class OfflineFirstTWALauncherActivity extends LauncherActivity {

}

Następnie zarejestruj aktywność w usłudze AndroidManifest.xml:

<activity android:name=".OfflineFirstTWALauncherActivity" android:theme="@style/Theme.Design.NoActionBar">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <!-- Edit android:value to change the url opened by the Trusted Web Activity -->
    <meta-data android:name="android.support.customtabs.trusted.DEFAULT_URL" android:value="https://airhorner.com" />
    <!-- This intent-filter adds the Trusted Web Activity to the Android Launcher -->
    <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:host="airhorner.com" android:scheme="https" />
    </intent-filter>
</activity>

Poprzedni kod rejestruje aplikację OfflineFirstTWALauncherActivity jako program uruchamiający activity i definiuje https://airhorner.com jako adres URL. zostanie otwarta po uruchomieniu TWA.

Obsługa scenariuszy offline

Najpierw w sekcji Aktywność zastąp metodę shouldLaunchImmediately() i ustaw zwracanie wartości false, by usługa Trusted Web Activity nie była uruchamiana natychmiast. Przed aktualizacją możesz też przeprowadzić dodatkową kontrolę:

@Override
protected boolean shouldLaunchImmediately() {
    // launchImmediately() returns `false` so we can check connection
    // and then render a fallback page or launch the Trusted Web Activity with `launchTwa()`.
    return false;
}

Zastąp metodę onCreate(), aby sprawdzić stan sieci przed TWA nowych funkcji. Dodaj wywołanie do metody tryLaunchTwa(), metody pomocniczej, która będzie zawierać to logika:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    tryLaunchTwa();
}

Następnie zaimplementuj tryLaunchTwa():

private void tryLaunchTwa() {
    // If TWA has already launched successfully, launch TWA immediately.
    // Otherwise, check connection status. If online, launch the Trusted Web Activity with `launchTwa()`.
    // Otherwise, if offline, render the offline fallback screen.
    if (hasTwaLaunchedSuccessfully()) {
        launchTwa();
    } else if (isOnline()) {
        firstTimeLaunchTwa();
    } else {
        renderOfflineFallback();
    }
}

Poprzedni kod uwzględnia 3 scenariusze:

  • Jeśli TWA została wcześniej uruchomiona, skrypt service worker a aplikacja PWA będzie mogła odpowiedzieć offline. W takim przypadku wywołaj launchTwa(), zdefiniowane w klasie nadrzędnej, aby uruchomić polecenie bezpośrednio zaufana aktywność internetowa.
  • Jeśli TWA nie została jeszcze uruchomiona, a użytkownik jest online, uruchom zaufaną aktywność w internecie po raz pierwszy przy użyciu firstTimeLaunchTwa() który wdrożysz później.
  • Jeśli TWA nie została jeszcze uruchomiona, a użytkownik jest offline, wyrenderuj natywny awaryjnego ekranu offline.

Wdrażanie metod pomocniczych

Ostatnim krokiem jest wdrożenie metod pomocniczych wywoływanych przez poprzedni kod. Oto kod do sprawdzania stanu offline isOnline():

private boolean isOnline() {
    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
    return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}

Następnie zaimplementuj hasTwaLaunchedSuccessfully(), który sprawdza, czy TWA uruchomiono co najmniej raz:

private boolean hasTwaLaunchedSuccessfully() {
    // Return `true` if the preference "twa_launched_successfully" has already been set.
    SharedPreferences sharedPref = getSharedPreferences(getString(R.string.twa_offline_first_preferences_file_key), Context.MODE_PRIVATE);
    return sharedPref.getBoolean(getString(R.string.twa_launched_successfully), false);
}

Poprzedni kod wywołuje launchTWA() z klasy nadrzędnej i zapisuje twa_launched_successfully w udostępnianych preferencjach. Oznacza to, że TWA udało się uruchomić przynajmniej raz.

Pozostała metoda pomocnicza, tj. renderOfflineFallback(), renderuje Androida ekranu offline.

private void renderOfflineFallback() {
    setContentView(R.layout.activity_offline_first_twa);

    Button retryBtn = this.findViewById(R.id.retry_btn);
    retryBtn.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // Check connection status. If online, launch the Trusted Web Activity for the first time.
            if (isOnline()) firstTimeLaunchTwa();
        }
    });
}

Definiowaliśmy układ activity_offline_first_twa, zawiera przycisk umożliwiający ponowienie próby, który z czasem uruchomi firstTimeLaunchTwa() po sprawdzeniu połączenia.

twa offline – niestandardowy ekran offline

Podsumowanie

  • Za pierwszym razem, gdy użytkownik uruchomi progresywną aplikację internetową (PWA) przez Trusted Web Aktywność, mechanizm Service Worker nie będzie jeszcze dostępny.
  • Aby uniknąć wyświetlania standardowego ekranu offline, gdy użytkownik nie ma połączenia, możesz wykryć warunek offline i wyświetlić zastępczy ekran offline .
  • W tym przewodniku pokazaliśmy, jak wdrożyć tę strategię. Jeśli jesteś chcesz sprawdzić kod użyty w tym przewodniku, znajdziesz kompleksowe rozwiązanie znajdziesz w przewodniku offline First TWA (w języku angielskim).