使用暫時性自訂分頁,提升使用者的網頁隱私權

Android 開發人員有時需要暫時性的網頁體驗,才能滿足應用程式需求。暫時性自訂分頁是一種專屬的自訂分頁,可在應用程式中啟動完全隔離的網路瀏覽器。這類分頁可用於驗證策略,但不應將登入狀態與瀏覽器同步,也不應保留資料,例如私密瀏覽模式。

根據預設,自訂分頁會分享使用者瀏覽器的狀態和功能。在暫時性自訂分頁中,Cookie、快取檔案、瀏覽記錄、憑證和其他資料只會存在於工作階段例項的範圍內。關閉自訂分頁活動後,系統會刪除資料,且不會留下任何痕跡。

與自訂分頁一樣,您可以透過動作和 UI 主題自訂暫時性自訂分頁。如果您已使用 Auth Tab 進行驗證策略,可以將暫時性瀏覽功能加入啟動意圖,為程序增添另一層隱私保護機制。

暫時性自訂分頁可在 Chrome 130 以上版本使用,而且只要一行程式碼就能完成例項化。針對無法使用這項功能的使用者,您可以驗證是否已啟用暫時性瀏覽功能,並順暢地整合備用替代方案。

啟動暫時性工作階段

臨時性自訂分頁需要 AndroidX 瀏覽器程式庫。您可以在專案 build.gradle 檔案的依附元件區段中新增 AndroidX 瀏覽器程式庫。這些 API 可在 Alpha 版本中使用。在建構檔案中新增下列內容:

dependencies {
    implementation 'androidx.browser:browser:1.9.0-alpha01'
}

如要建立暫時性瀏覽工作階段,請使用 CustomTabsIntent 中提供的自訂 setter:

// In your activity

String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .build();

customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));

由於標準 Chrome Custom Tabs 實作項目中的意圖額外項目會觸發暫時性瀏覽功能,因此您可以像新增一般自訂分頁一樣新增自訂項目。

// Add customizations

String url = "https://developers.android.com";
CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .setUrlBarHidingEnabled(false)
    .setShareState(CustomTabsIntent.SHARE_STATE_OFF)
    .setCloseButton(BitmapFactory.decodeResource(getResources(), R.drawable.ic_back_arrow))
    .build();

customTabsIntent.launchUrl(MainActivity.this, Uri.parse(url));

如果開發人員使用 Auth 分頁,請將暫時性瀏覽設定器新增至 AuthTabIntent

// Add ephemeral browsing to Auth Tab

AuthTabIntent authTabIntent = new AuthTabIntent.Builder()
    .setEphemeralBrowsingEnabled(true)
    .build();
authTabIntent.launch(launcher, uri, redirectScheme);

部分自訂設定會在暫時性分頁中遭到修改或無法使用:

  • 系統不會在暫時性工作階段中記錄歷史記錄。
  • 使用者無法下載目前的網頁。
  • 無法長按連結,在新的 Chrome 分頁中開啟連結。
  • 使用溢位選單在預設瀏覽器中開啟目前頁面的選項,會以無痕模式啟動瀏覽器視窗。

改用先前的實作方式

並非所有使用者的裝置都能啟動暫時性自訂分頁。如要處理這些情況,開發人員可以使用 CustomTabsClient 查詢基礎瀏覽器,判斷是否支援暫時性瀏覽功能。這需要與 CustomTabsClient 建立服務連線。如要完成這項操作,請啟動新的 CustomTabsServiceConnection,以便在繫結成功後存取提供的 CustomTabsClient

// in your activity

CustomTabsServiceConnection connection = new CustomTabsServiceConnection() {
    @Override
    public void onCustomTabsServiceConnected(@NonNull ComponentName name, @NonNull CustomTabsClient client) {

        CustomTabsSession session = client.newSession(null);
        try {
            if (session.isEphemeralBrowsingSupported(Bundle.EMPTY)) {
                // launch ephemeral tab
            } else {
                // fallback
            }
        } catch (RemoteException e) {
            // fallback
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName componentName) { }
};

CustomTabsClient.bindCustomTabsService(this, "com.android.chrome", connection);

如果應用程式服務對象的使用者尚未取得暫時性自訂分頁存取權,則可使用其他方法,例如停用快取功能的 WebView。如需利用暫時性自訂分頁並改用 WebView 的實作範例,請參閱 Android 瀏覽器輔助程式程式庫。

其他資源