Portabilidade de camadas de dados e negócios do Windows Phone Silverlight para UWP

O tópico anterior foi Portabilidade para E/S, dispositivo e modelo de aplicativo.

Por trás de sua interface do usuário estão suas camadas de negócios e dados. O código nessas camadas chama APIs do sistema operacional e do .NET Framework (por exemplo, processamento em segundo plano, localização, câmera, sistema de arquivos, rede e outros acessos a dados). A grande maioria deles está disponível para um aplicativo UWP (Plataforma Universal do Windows), portanto, você pode esperar ser capaz de portar grande parte desse código sem alterações.

Métodos assíncronos

Uma das prioridades da Plataforma Universal do Windows (UWP) é permitir que você crie aplicativos que sejam verdadeira e consistentemente responsivos. As animações são sempre suaves e as interações de toque, como panorâmica e deslizamento, são instantâneas e sem atrasos, fazendo com que pareça que a interface do usuário está colada ao seu dedo. Para conseguir isso, qualquer API UWP que não possa garantir a conclusão em 50 ms foi tornada assíncrona e seu nome sufixado com Async. Seu thread de interface do usuário retornará imediatamente da chamada de um método Async e o trabalho ocorrerá em outro thread. O consumo de um método Async é muito fácil, sintaticamente, usando o operador de espera do C#, objetos de promessa JavaScript e continuações do C++. Para obter mais informações, consulte Programação assíncrona.

Processamento em segundo plano

Um aplicativo do Windows Phone Silverlight pode usar um objeto ScheduledTaskAgent gerenciado para executar uma tarefa enquanto o aplicativo não está em primeiro plano. Um aplicativo UWP usa a classe BackgroundTaskBuilder para criar e registrar uma tarefa em segundo plano de maneira semelhante. Você define uma classe que implementa o trabalho de sua tarefa em segundo plano. O sistema executa sua tarefa em segundo plano periodicamente, chamando o método Run de sua classe para executar o trabalho. Em um aplicativo UWP, lembre-se de definir a declaração de Tarefas em Segundo Plano no manifesto do pacote do aplicativo. Para obter mais informações, consulte Dar suporte ao seu aplicativo com tarefas em segundo plano.

Para transferir arquivos de dados grandes em segundo plano, um aplicativo do Windows Phone Silverlight usa a classe BackgroundTransferService . Um aplicativo UWP usa APIs no namespace Windows.Networking.BackgroundTransfer para fazer isso. Os recursos usam um padrão semelhante para iniciar transferências, mas a nova API melhorou os recursos e o desempenho. Para obter mais informações, consulte Transferindo dados em segundo plano.

Um aplicativo do Windows Phone Silverlight usa as classes gerenciadas no namespace Microsoft.Phone.BackgroundAudio para reproduzir áudio enquanto o aplicativo não está em primeiro plano. A UWP usa o modelo de aplicativo da Loja do Windows Phone, consulte Áudio em segundo plano e Exemplo de áudio em segundo plano.

Serviços em nuvem, redes e bancos de dados

A hospedagem de dados e serviços de aplicativos na nuvem é possível usando o Azure. Consulte Introdução aos Serviços Móveis. Para soluções que exigem dados online e offline, consulte: Usando a sincronização de dados offline nos Serviços Móveis.

A UWP tem suporte parcial para a classe System.Net.HttpWebRequest, mas não há suporte para a classe System.Net.WebClient. A alternativa recomendada e voltada para o futuro é a classe Windows.Web.Http.HttpClient (ou System.Net.Http.HttpClient se você precisar que seu código seja portátil para outras plataformas que dão suporte ao .NET). Essas APIs usam System.Net.Http.HttpRequestMessage para representar uma solicitação HTTP.

Atualmente, os aplicativos UWP não incluem suporte interno para cenários com uso intensivo de dados, como cenários de LOB (linha de negócios). No entanto, você pode usar o SQLite para serviços de banco de dados transacionais locais. Para obter mais informações, consulte SQLite.

Passe URIs absolutos, não URIs relativos, para tipos do Tempo de Execução do Windows. Consulte Passando um URI para o Tempo de Execução do Windows.

Lançadores e seletores

Com Iniciadores e Seletores (encontrados no namespace Microsoft.Phone.Tasks ), um aplicativo do Windows Phone Silverlight pode interagir com o sistema operacional para executar operações comuns, como redigir um email, escolher uma foto ou compartilhar determinados tipos de dados com outro aplicativo. Pesquise Microsoft.Phone.Tasks no tópico Windows Phone Silverlight para namespace do Windows 10 e mapeamentos de classe para encontrar o tipo UWP equivalente. Eles variam de mecanismos semelhantes, chamados de lançadores e seletores, à implementação de um contrato para compartilhamento de dados entre aplicativos.

Um aplicativo do Windows Phone Silverlight pode ser colocado em um estado inativo ou até mesmo marcado para exclusão ao usar, por exemplo, a tarefa Seletor de fotos. Um aplicativo UWP permanece ativo e em execução ao usar a classe FileOpenPicker.

Monetização (modo de teste e compras no aplicativo)

Um aplicativo do Windows Phone Silverlight pode usar a classe UWP CurrentApp para a maior parte de seu modo de avaliação e funcionalidade de compra no aplicativo, para que o código não precise ser portado. Mas, um aplicativo do Windows Phone Silverlight chama MarketplaceDetailTask.Show para oferecer o aplicativo para compra:

    private void Buy()
    {
        MarketplaceDetailTask marketplaceDetailTask = new MarketplaceDetailTask();
        marketplaceDetailTask.ContentType = MarketplaceContentType.Applications;
        marketplaceDetailTask.Show();
    }

Porte esse código para chamar o método UWP RequestAppPurchaseAsync :

    private async void Buy()
    {
        await Windows.ApplicationModel.Store.CurrentApp.RequestAppPurchaseAsync(false);
    }

Se você tiver um código que simule a compra do aplicativo e os recursos de compra no aplicativo para fins de teste, poderá portá-lo para usar a classe CurrentAppSimulator.

Notificações para atualizações de bloco ou notificação do sistema

As notificações são uma extensão do modelo de notificação por push para aplicativos do Windows Phone Silverlight. Ao receber uma notificação do WNS (Serviço de Notificação por Push do Windows), você pode exibir as informações para a interface do usuário com uma atualização de bloco ou com uma notificação do sistema. Para portar o lado da interface do usuário de seus recursos de notificação, consulte Blocos e notificações do sistema.

Para obter mais detalhes sobre o uso de notificações em um aplicativo UWP, consulte Enviando notificações do sistema.

Para obter informações e tutoriais sobre como usar blocos, notificações do sistema, selos, faixas e notificações em um aplicativo do Tempo de Execução do Windows em C++, C# ou Visual Basic, consulte Trabalhando com blocos, selos e notificações do sistema.

Armazenamento (acesso a arquivos)

O código do Windows Phone Silverlight que armazena configurações de aplicativo como pares de chave-valor no armazenamento isolado é facilmente transferido. Aqui está um exemplo de antes e depois, primeiro a versão do Windows Phone Silverlight:

    var propertySet = IsolatedStorageSettings.ApplicationSettings;
    const string key = "favoriteAuthor";
    propertySet[key] = "Charles Dickens";
    propertySet.Save();
    string myFavoriteAuthor = propertySet.Contains(key) ? (string)propertySet[key] : "<none>";

E o equivalente UWP:

    var propertySet = Windows.Storage.ApplicationData.Current.LocalSettings.Values;
    const string key = "favoriteAuthor";
    propertySet[key] = "Charles Dickens";
    string myFavoriteAuthor = propertySet.ContainsKey(key) ? (string)propertySet[key] : "<none>";

Embora um subconjunto do namespace Windows.Storage esteja disponível para eles, muitos aplicativos do Windows Phone Silverlight executam E/S de arquivo com a classe IsolatedStorageFile porque ela tem suporte há mais tempo. Supondo que IsolatedStorageFile esteja sendo usado, aqui está um exemplo de antes e depois de escrever e ler um arquivo, primeiro a versão do Windows Phone Silverlight:

    const string filename = "FavoriteAuthor.txt";
    using (var store = IsolatedStorageFile.GetUserStoreForApplication())
    {
        using (var streamWriter = new StreamWriter(store.CreateFile(filename)))
        {
            streamWriter.Write("Charles Dickens");
        }
        using (var StreamReader = new StreamReader(store.OpenFile(filename, FileMode.Open, FileAccess.Read)))
        {
            string myFavoriteAuthor = StreamReader.ReadToEnd();
        }
    }

E a mesma funcionalidade usando a UWP:

    const string filename = "FavoriteAuthor.txt";
    var store = Windows.Storage.ApplicationData.Current.LocalFolder;
    Windows.Storage.StorageFile file = await store.CreateFileAsync(filename, Windows.Storage.CreationCollisionOption.ReplaceExisting);
    await Windows.Storage.FileIO.WriteTextAsync(file, "Charles Dickens");
    file = await store.GetFileAsync(filename);
    string myFavoriteAuthor = await Windows.Storage.FileIO.ReadTextAsync(file);

Um aplicativo do Windows Phone Silverlight tem acesso somente leitura ao cartão SD opcional. Um aplicativo UWP tem acesso de leitura/gravação ao cartão SD. Para saber mais, consulte Acessar o cartão SD.

Para obter informações sobre como acessar arquivos de fotos, músicas e vídeos em um aplicativo UWP, consulte Arquivos e pastas nas bibliotecas de músicas, imagens e vídeos.

Para obter mais informações, consulte Arquivos, pastas e bibliotecas.

O próximo tópico é Portabilidade para fator forma e UX.