Aggiornamento app pubblicate nello store dal codice
A partire da Windows 10, versione 1607 (build 14393), Windows 10 consente agli sviluppatori di garantire maggiori garanzie sugli aggiornamenti delle app dallo Store. Questa operazione richiede alcune API semplici, crea un'esperienza utente coerente e prevedibile e consente agli sviluppatori di concentrarsi su ciò che fanno al meglio, consentendo a Windows di eseguire il lavoro pesante.
Esistono due modi fondamentali per gestire gli aggiornamenti delle app. In entrambi i casi, il risultato netto per questi metodi è lo stesso: viene applicato l'aggiornamento. Tuttavia, in un caso, è possibile scegliere di consentire al sistema di eseguire tutto il lavoro mentre nell'altro caso potrebbe essere necessario avere un livello di controllo più approfondito sull'esperienza utente.
Aggiornamenti semplici
Prima di tutto è la semplice chiamata API che indica al sistema di verificare la disponibilità di aggiornamenti, scaricarli e quindi richiedere l'autorizzazione dell'utente per installarli. Si inizierà usando la classe StoreContext per ottenere gli oggetti StorePackageUpdate , scaricarli e installarli.
using Windows.Services.Store;
private async void GetEasyUpdates()
{
StoreContext updateManager = StoreContext.GetDefault();
IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();
if (updates.Count > 0)
{
IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> downloadOperation =
updateManager.RequestDownloadAndInstallStorePackageUpdatesAsync(updates);
StorePackageUpdateResult result = await downloadOperation.AsTask();
}
}
A questo punto l'utente dispone di due opzioni tra cui è possibile scegliere: applicare l'aggiornamento ora o rinviare l'aggiornamento. Qualsiasi scelta effettuata dall'utente verrà restituita tramite l'oggetto StorePackageUpdateResult
che consente agli sviluppatori di eseguire ulteriori azioni, ad esempio la chiusura dell'app se l'aggiornamento è necessario per continuare o semplicemente riprovare in un secondo momento.
Aggiornamenti controllati correttamente
Per gli sviluppatori che vogliono avere un'esperienza completamente personalizzata, vengono fornite API aggiuntive che consentono un maggiore controllo sul processo di aggiornamento. La piattaforma consente di eseguire le operazioni seguenti:
- Ottiene gli eventi di stato in un singolo download del pacchetto o nell'intero aggiornamento.
- Applicare gli aggiornamenti a livello di praticità dell'utente e dell'app anziché uno o l'altro.
Gli sviluppatori possono scaricare gli aggiornamenti in background (mentre l'app è in uso), quindi richiedere gli aggiornamenti di installazione dell'utente, se rifiutano, è sufficiente disabilitare le funzionalità interessate dall'aggiornamento se si sceglie.
Scaricare gli aggiornamenti
private async void DownloadUpdatesAsync()
{
StoreContext updateManager = StoreContext.GetDefault();
IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();
if (updates.Count > 0)
{
IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> downloadOperation =
updateManager.RequestDownloadStorePackageUpdatesAsync(updates);
downloadOperation.Progress = async (asyncInfo, progress) =>
{
// Show progress UI
};
StorePackageUpdateResult result = await downloadOperation.AsTask();
if (result.OverallState == StorePackageUpdateState.Completed)
{
// Update was downloaded, add logic to request install
}
}
}
Installare gli aggiornamenti
private async void InstallUpdatesAsync()
{
StoreContext updateManager = StoreContext.GetDefault();
IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();
// Save app state here
IAsyncOperationWithProgress<StorePackageUpdateResult, StorePackageUpdateStatus> installOperation =
updateManager.RequestDownloadAndInstallStorePackageUpdatesAsync(updates);
StorePackageUpdateResult result = await installOperation.AsTask();
// Under normal circumstances, app will terminate here
// Handle error cases here using StorePackageUpdateResult from above
}
Rendere obbligatori gli aggiornamenti
In alcuni casi, potrebbe essere utile avere un aggiornamento che deve essere installato nel dispositivo di un utente, rendendolo veramente obbligatorio (ad esempio una correzione critica per un'app che non può aspettare). In questi casi, è possibile adottare misure aggiuntive per rendere obbligatorio l'aggiornamento.
- Implementare la logica di aggiornamento obbligatoria nel codice dell'app (dovrebbe essere eseguita prima dell'aggiornamento obbligatorio stesso).
- Durante l'invio a Dev Center, verificare che la casella Rendi obbligatorio questo aggiornamento sia selezionata.
Implementazione del codice dell'app
Per sfruttare al meglio gli aggiornamenti obbligatori, è necessario apportare alcune piccole modifiche al codice precedente. È necessario usare l'oggetto StorePackageUpdate per determinare se l'aggiornamento è obbligatorio.
private async bool CheckForMandatoryUpdates()
{
StoreContext updateManager = StoreContext.GetDefault();
IReadOnlyList<StorePackageUpdate> updates = await updateManager.GetAppAndOptionalStorePackageUpdatesAsync();
if (updates.Count > 0)
{
foreach (StorePackageUpdate u in updates)
{
if (u.Mandatory)
return true;
}
}
return false;
}
Sarà quindi necessario creare una finestra di dialogo personalizzata nell'app per informare l'utente che è presente un aggiornamento obbligatorio e che deve installarlo per continuare a usare completamente l'app. Se l'utente rifiuta l'aggiornamento, l'app potrebbe compromettere le funzionalità (ad esempio, impedire l'accesso online) o terminare completamente (ad esempio, giochi solo online).
Centro per i partner
Per assicurarsi che StorePackageUpdate mostri true per un aggiornamento obbligatorio, è necessario contrassegnare l'aggiornamento come obbligatorio nel Centro per i partner nella pagina Pacchetti .
Un paio di cose da notare:
- Se un dispositivo torna online dopo che un aggiornamento obbligatorio è stato sostituito con un altro aggiornamento non obbligatorio, l'aggiornamento non obbligatorio verrà comunque visualizzato nel dispositivo come obbligatorio dato l'aggiornamento perso prima che fosse obbligatorio.
- Gli aggiornamenti controllati dallo sviluppatore e gli aggiornamenti obbligatori sono attualmente limitati allo Store.