发布于 2026-01-06 1 阅读
0

使用 Blazor WebAssembly 创建 PWA 的简单方法

使用 Blazor WebAssembly 创建 PWA 的简单方法

本教程将演示如何从 Blazor WebAssembly 应用轻松创建渐进式 Web 应用 (PWA)。PWA 是一种可安装的 Web 应用,支持离线使用,并且在桌面和移动设备上都享有同等的兼容性。

工作演示

在本教程中,我将带您了解我如何将我的Blazor FIRE 计算器项目转换为可安装的渐进式 Web 应用程序。

该项目的完整代码可在 GitHub 上找到

一个有用的 NuGet 包

如果您想将 Blazor 应用转换为 PWA, SQL-MisterMagoo 开发的Blazor.PWA.MSBuild将是您的最佳选择。撰写本文时,该工具刚刚发布 v1.0.0 版本,但您可以随时安装最新版本。要安装 NuGet 包,请在程序包管理器控制台中执行以下命令。

Install-Package BlazorPWA.MSBuild -Version 1.0.0

请确保已为您的项目启用该软件包。这将为您的构建过程添加一些钩子,从而生成manifest.jsonServiceWorker.js文件,这些文件是 PWA 正常运行所必需的。

就是这样!该项目开箱即用,无需任何自定义设置。当然,如果您想对 PWA 进行自定义,也有相应的方法。

自定义 PWA

更改 PWA 名称

您首先可能需要更改的是 PWA 的名称。您的应用程序将使用两个名称:短名称和长名称。短名称是 PWA 安装完成后在应用启动器中使用的名称。长名称则用于安装对话框。

要配置项目名称,您需要在项目的 .csproj 文件中设置一些属性。在我的示例中,我向BlazorFireCalculators.csproj添加了以下几行代码。

<PropertyGroup>
    <ManifestShortName>FIRE Calculator</ManifestShortName>
    <ManifestLongName>Blazor FIRE Calculator</ManifestLongName>
</PropertyGroup>

更改图标

接下来您可能需要更改的是应用图标。该图标会出现在安装对话框、加载屏幕和应用启动器中,因此您务必确保它能体现您的品牌形象。

更改图标最简单的方法是在项目的wwwroot文件夹中保存两个新的图像文件。一个应命名为icon-192.png,另一个应命名为 icon-512.png。这些文件将在构建过程中自动被发现,并填充到manifest.json 文件中。

自动更新缓存

在我的应用中,我希望强制 BlazorPWA.MSBuild 在每次构建项目时重新生成 Service Worker 的内容。这样可以确保所有必需的文件在构建时自动添加到缓存中,即使我在两次构建之间添加了新文件。

我还加入了一个版本控制系统,这样当我向上游推送更新时,我的应用程序就知道要更新远程客户端上的缓存。请将这两行代码添加到您的.csproj文件中。

<PropertyGroup>
    <ServiceWorkerCacheVersion>1</ServiceWorkerCacheVersion>
    <ServiceWorkerForce>true</ServiceWorkerForce>

    <ManifestShortName>FIRE Calculator</ManifestShortName>
    <ManifestLongName>Blazor FIRE Calculator</ManifestLongName>
</PropertyGroup>

自定义安装对话框

我还希望我的 Blazor 应用在​​我的 PWA 应用可以安装时显示安装通知。BlazorPWA.MSBuild 会自动在底部添加一个通知,允许用户安装您的应用。这种默认行为可能适合您,但我决定对其进行自定义。

要强制 Blazor 应用处理显示自定义警报而不是自动生成警报,请将以下行添加到您的.csproj文件中。

<PropertyGroup>
    <ServiceWorkerCacheVersion>2</ServiceWorkerCacheVersion>
    <ServiceWorkerForce>true</ServiceWorkerForce>

    <ServiceWorkerRegisterInstallableType>installable-blazor</ServiceWorkerRegisterInstallableType>

    <ManifestShortName>FIRE Calculator</ManifestShortName>
    <ManifestLongName>Blazor FIRE Calculator</ManifestLongName>
</PropertyGroup>

现在,打开 Shared/ MainLayout.razor文件。通过向此文件添加横幅,您可以确保无论用户访问哪个路由端点,都能选择安装您的 PWA。在这里,您需要注入一个 JavaScript 运行时辅助函数,以便与 PWA 安装过程中的钩子函数集成。

@inject IJSRuntime JSRuntime

接下来,添加HTML代码来显示某种类型的横幅。我的横幅很简单,只有文字和两个按钮。

@if (Installable)
{
    <div class="row justify-content-center">
        <div class="install-prompt col-sm-8 col-sm-offset-2 col-lg-6 col-lg-offset-3">
            <span>Install app?</span>
            <button class="installButton btn btn-primary" @onclick="@(() => InstallClicked())">Yes</button>
            <button class="cancelButton btn btn-danger" @onclick="@(()=>Installable=false)">No</button>
        </div>
    </div>
}

请注意,我还使用了以下 CSS 样式:

.install-prompt {
    background-color: #54595f;
    color: #fff;
    position: fixed;
    bottom: 0.5rem;
    padding: 0.5rem;
    display: flex;
    font-size: 1.5rem;
    border-radius: .25rem;
    z-index: 99;
}
    .install-prompt .installButton {
        margin-left: auto;
        width: 4em;
    }

    .install-prompt .cancelButton {
        margin-left: 0.3rem;
        width: 4em;
    }

回到MainLayout.razor中,你需要处理这个调用。

@code
{
    static bool Installable = false;
    static Action OnInstallable;
    protected override void OnInitialized()
    {
        OnInstallable = () => InvokeAsync(StateHasChanged);
    }
    [JSInvokable]
    public static Task PWAInstallable()
    {
        Installable = true;
        OnInstallable.Invoke();
        return Task.CompletedTask;
    }
    ValueTask InstallClicked()
    {
        Installable = false;
        return JSRuntime.InvokeVoidAsync("BlazorPWA.installPWA");
    }
}

首先,定义一个Installable布尔值,用于显示或隐藏通知。然后,定义一个代理OnInstallable,用于通知应用程序刷新用户界面。

默认情况下,BlazorPWA.MSBuild 工具会查找一个可调用的方法PWAInstallable来触发将安装对话框添加到 UI 中,所以我使用了该方法名称。

最后,我编写了一个方法来处理“安装”按钮的 OnClick 事件。此方法使用您之前注入的 JS 运行时来执行由 BlazorPWA.MSBuild 自动生成的函数,该函数定义在MainLayout.razorServerWorkerRegister.js的完整代码中,代码位于 GitHub 上

底线

将您的 Blazor WebAssembly 应用转换为功能齐全的渐进式 Web 应用 (PWA) 非常简单!本教程将帮助您设置 Service Worker 缓存,并演示一些用于处理应用中 PWA 调用的实用自定义设置。通过遵循本教程并在 Blazor 中创建 PWA,您就创建了一个可以安装到桌面或移动设备上的应用。它可以从应用启动器启动,支持离线工作,并且可以像客户端设备上的任何其他应用一样接收更新。整个项目的源代码已上传至 GitHub,并提供演示供您测试。

来源

文章来源:https://dev.to/bradwellsb/a-simple-way-to-create-a-pwa-with-blazor-web assembly-1fln