Разрешить PWA, созданный в UWP, не быть неактивным при сворачивании - PullRequest
1 голос
/ 11 марта 2019

Несколько лет назад в рамках проекта Windows Bridges я создал UWP, который просто загружает мой сайт.

Бывает, что на моем сайте есть setInterval (5 минут), который отправляет POST на URL, указывая, что пользователь вошел в систему. Оказывается, поведение UWP по умолчанию - приостановить приложение, когда оно сворачивается, поэтому мое приложение не отправляет POST через некоторое время.

Я читал на нескольких сайтах, что я должен использовать ExtendedExecutionSession Class , чтобы минимизировать его работу, однако все примеры приведены на C #, и я понятия не имею, что мне действительно следует создавать и как использовать это.

Это все файлы, которые содержит мой проект:

  • изображения (папка)
  • msapp-error.css
  • msapp-error.html
  • msapp-error.js
  • Package.appxmanifest

Это мой Package.appxmanifest

<?xml version="1.0" encoding="utf-8"?>
<Package
 xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
 xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest"
 xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
 IgnorableNamespaces="uap mp">
            <Identity Name="APP-NAME" Publisher="PUBLISHER" Version="1.0.0.0" />
        <mp:PhoneIdentity PhoneProductId="PhoneProductId" PhonePublisherId="PhonePublisherId"/>
    <Properties>
        <DisplayName>AppName</DisplayName>
        <PublisherDisplayName>AppName</PublisherDisplayName>
        <Logo>images\StoreLogo.png</Logo>
    </Properties>
    <Dependencies>
        <TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" />
    </Dependencies>
    <Resources>
        <Resource Language="x-generate"/>
    </Resources>
    <Applications>
        <Application Id="App" StartPage="https://dashboard.example.com/">
            <uap:VisualElements DisplayName="AppName"
             Description="My App Description."
             BackgroundColor="#ffffff"
             Square150x150Logo="images\Square150x150Logo.png"
             Square44x44Logo="images\Square44x44Logo.png">
                <uap:SplashScreen Image="images\SplashScreen.png" BackgroundColor="#ffffff" />
                <uap:DefaultTile Wide310x150Logo="images\Wide310x150Logo.png" Square310x310Logo="images\Square310x310Logo.png">
                    <uap:ShowNameOnTiles>
                        <uap:ShowOn Tile="wide310x150Logo"/>
                        <uap:ShowOn Tile="square310x310Logo" />
                    </uap:ShowNameOnTiles>
                </uap:DefaultTile>
                <uap:InitialRotationPreference>
                    <uap:Rotation Preference="landscape"/>
                </uap:InitialRotationPreference>
            </uap:VisualElements>
            <uap:ApplicationContentUriRules>
                <uap:Rule Type="include" Match="https://dashboard.example.com/" WindowsRuntimeAccess="all"/>
            </uap:ApplicationContentUriRules>
        </Application>
    </Applications>
    <Capabilities>
        <Capability Name="internetClient" />


    </Capabilities>
</Package>

Что мне действительно делать?

1 Ответ

0 голосов
/ 12 мая 2019

Упрощенная версия JavaScript из документа API выглядит следующим образом:

var session = new Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionSession();
session.reason = Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionReason.unspecified;
session.description = 'Allow background execution';
session.addEventListener('revoked', () => {
    // Extended execution revoked ...
});

session.requestExtensionAsync().then(result => {
    if (result !== Windows.ApplicationModel.ExtendedExecution.ExtendedExecutionResult.allowed) {
        session.close();
        // Extended execution denied.
    }
});

Я успешно запускаю это в UWP PWA.

Убедитесь, что вы находитесь в контексте UWP, проверив, доступно ли Windows:

if (window.Windows) {
    // ...
}
...