Back to Chromium

Identifiers in Web Apps

components/webapps/docs/identifiers.md

151.0.7878.16.2 KB
Original Source

Identifiers in Web Apps

This document clarifies the differences between various identifiers used in the context of Web Apps (PWAs, WebAPKs, and TWAs) within Chromium and on different platforms.

Core Web App Identifiers (Cross-Platform)

These identifiers are platform-independent and are defined by web standards or Chrome's core architecture.

1. Web Manifest ID

  • Scope: Web Application (PWA).
  • Type: String (defined in manifest.json via the id member).
  • Source: Provided by the web developer.
  • Definition: Uniquely identifies the PWA to the browser. It allows the browser to track the app even if the start URL or manifest URL changes.
  • Specification: W3C Web Application Manifest - ID member.
  • Chromium Representation: webapps::ManifestId (defined in manifest_id.h). It is essentially the start_url with the id member applied, and fragments stripped.

2. App ID (Chrome-specific)

  • Scope: Chromium Browser.
  • Type: 32-character alphanumeric string.
  • Source: Derived from the Web Manifest ID.
  • Definition: Used internally by Chrome (especially on Desktop) to identify the installed app in databases, preferences, and file paths.
  • Chromium Representation: webapps::AppId (defined in web_app_id.h).
  • Derivation Algorithm:
    1. Start with the ManifestId string.
    2. Hash using SHA256.
    3. Hash using SHA256 again.
    4. Hex encode into characters 0-f.
    5. Transform to only use alpha characters between a-p (inclusive) for historical compatibility.
  • Example: fedbieoalmbobgfjapopkghdmhgncnaa

3. Origin and Domain

  • Origin: The web origin (e.g., https://example.com) that the app is locked to.
  • Domain: The registrar domain (e.g., example.com), typically used for broader data clearing scopes.

Android-Specific Identifiers

On Android, web apps can be integrated with the OS as WebAPKs or TWAs, which introduces Android OS-level identifiers.

Identifiers Breakdown

IdentifierScopeSourceWebAPKStandard TWATWA Installer (Auto-Minted)
Manifest IDWeb AppWeb Developer (in manifest.json)Used to identify the PWA; influences package name.Optional in manifest; does not influence package name automatically.Used to identify the PWA; influences package name.
Package NameAndroid OSGenerated by Server/Installer or specified by Developerorg.chromium.webapk.<hash> (hash derived from Manifest ID/URL).Manually specified in Android project (e.g., com.example.app).com.android.webapp.<hash> (hash derived from Manifest ID/URL).
Android UIDAndroid OSAssigned by Android at install timeUnique per installation instance (varies by user profile).Unique per installation instance.Unique per installation instance.
Android AppIdAndroid OSAssigned by Android at install timeConstant across users for the same app package.Constant across users for the same app package.Constant across users for the same app package.
App Name / LabelUser VisibleWeb Manifest or Android ProjectDerived from name or short_name in manifest.Specified in Android project AndroidManifest.xml.Derived from name or short_name in manifest.
OriginWebWeb URLThe web origin (e.g., https://example.com) the app is locked to.The web origin the app is locked to.The web origin the app is locked to.
DomainWebDerived from OrigineTLD+1 (e.g., example.com) used for broader data clearing scopes.Used for broader data clearing scopes.Used for broader data clearing scopes.

1. Android Package Name

  • Scope: Android Operating System.
  • Definition: Uniquely identifies the application on the Android device.
  • WebAPK: Chrome requests a WebAPK from a minting server. The package name is org.chromium.webapk.<hash>, where the hash is derived from the Manifest ID.
  • Standard TWA: The developer builds their own Android app wrapper. They specify the package name in their build.gradle (e.g., com.example.app).
  • Auto-minted TWA: Chrome installs it via Android's WebAppManager. The package name is com.android.webapp.<hash>.

2. Android UID (User ID)

  • Scope: Android Operating System.
  • Type: Integer.
  • Definition: UID = UserId * 100000 + AppId.
  • Purpose: Used for process isolation, security sandboxing, and permission management.
  • Sharing: Can be shared between packages that request it (via sharedUserId in AndroidManifest.xml) and are signed by the same key.

3. Android AppId

  • Scope: Android Operating System.
  • Type: Integer.
  • Source: Part of the UID assigned by the Android system.
  • Purpose: Identifies the application within the user's space. It is NOT derived from the Web Manifest.

Summary Flow (Android)

Web Manifest ID -> (influences) -> Android Package Name -> (installed by Android) -> assigns Android UID (containing Android AppId).