Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este tópico descreve como ajudar os usuários a retomar o que estavam fazendo em seu aplicativo no computador e em todos os dispositivos.
Observação
A partir de julho de 2021, os usuários que tiverem o histórico de atividades sincronizado em seus dispositivos Windows por meio de sua CONTA da Microsoft (MSA) não terão mais a opção de carregar novas atividades na Linha do Tempo. Eles ainda poderão usar a Linha do Tempo e ver o histórico de atividades (informações sobre aplicativos, sites e arquivos recentes) em seu computador local. As contas conectadas ao AAD não serão afetadas.
Atividades do usuário e linha do tempo
Nosso tempo todos os dias é distribuído em vários dispositivos. Podemos usar nosso telefone enquanto estiver no ônibus, um computador durante o dia, depois um telefone ou tablet à noite. A partir do Windows 10 Build 1803 ou posterior, a criação de uma atividade do usuário faz com que essa atividade apareça na Linha do Tempo do Windows e no recurso da Cortana 'Continuar de onde parei'. A linha do tempo é uma visão de tarefas enriquecida que aproveita as Atividades do Usuário para apresentar uma visão cronológica do que você vem trabalhando. Ele também pode incluir o que você estava trabalhando em todos os dispositivos.
Da mesma forma, vincular seu telefone ao computador Windows permite que você continue o que estava fazendo anteriormente em seu dispositivo iOS ou Android.
Pense em uma UserActivity como algo específico em que o usuário estava trabalhando em seu aplicativo. Por exemplo, se você estiver usando um leitor de RSS, uma UserActivity poderá ser o feed que você está lendo. Se você estiver jogando um jogo, a UserActivity poderá ser o nível que você está jogando. Se você estiver ouvindo um aplicativo de música, a UserActivity pode ser a playlist que você está ouvindo. Se você estiver trabalhando em um documento, a UserActivity poderá estar onde você parou de trabalhar nele e assim por diante. Em suma, uma UserActivity representa um destino em seu aplicativo, de modo que permite que o usuário retome o que estava fazendo.
Quando você interage com um UserActivity chamando UserActivity.CreateSession, o sistema cria um registro de histórico indicando o tempo de início e término desse UserActivity. À medida que você se reenga com esse UserActivity ao longo do tempo, vários registros de histórico são registrados para ele.
Adicionar atividades do usuário ao seu aplicativo
Um UserActivity é a unidade de engajamento do usuário no Windows. Ele tem três partes: um URI usado para ativar o aplicativo ao qual a atividade pertence, visuais e metadados que descrevem a atividade.
- O ActivationUri é usado para retomar o aplicativo com um contexto específico. Normalmente, esse link assume a forma de manipulador de protocolo para um esquema (por exemplo, "my-app://page2?action=edit") ou de um AppUriHandler (por exemplo,
http://contoso.com/page2?action=edit
). - O VisualElements expõe uma classe que permite que o usuário identifique visualmente uma atividade com um título, uma descrição ou elementos de Cartão Adaptável.
- Por fim, Conteúdo é onde você pode armazenar metadados para a atividade, que podem ser usados para agrupar e recuperar atividades em um contexto específico. Muitas vezes, isso se apresenta na forma de dados https://schema.org.
Para adicionar um UserActivity ao seu aplicativo:
- Gere objetos UserActivity quando o contexto do usuário for alterado dentro do aplicativo (como navegação de página, novo nível de jogo etc.)
- Preencha objetos UserActivity com o conjunto mínimo de campos necessários: ActivityId, ActivationUrie UserActivity.VisualElements.DisplayText.
- Adicione um manipulador de esquema personalizado ao seu aplicativo para que ele possa ser reativado por uma UserActivity
.
Uma UserActivity pode ser integrada a um aplicativo com apenas algumas linhas de código. Por exemplo, imagine esse código em MainPage.xaml.cs, dentro da classe MainPage (observação: pressupõe using Windows.ApplicationModel.UserActivities;
):
UserActivitySession _currentActivity;
private async Task GenerateActivityAsync()
{
// Get the default UserActivityChannel and query it for our UserActivity. If the activity doesn't exist, one is created.
UserActivityChannel channel = UserActivityChannel.GetDefault();
UserActivity userActivity = await channel.GetOrCreateUserActivityAsync("MainPage");
// Populate required properties
userActivity.VisualElements.DisplayText = "Hello Activities";
userActivity.ActivationUri = new Uri("my-app://page2?action=edit");
//Save
await userActivity.SaveAsync(); //save the new metadata
// Dispose of any current UserActivitySession, and create a new one.
_currentActivity?.Dispose();
_currentActivity = userActivity.CreateSession();
}
A primeira linha do método MainPage
.
- Seu aplicativo deve nomear atividades de forma que a mesma ID seja gerada sempre que o usuário estiver em um local específico no aplicativo. Por exemplo, se o seu aplicativo for baseado em páginas, use um identificador para a página; se for baseado em documentos, use o nome do documento (ou uma hash do nome).
- Se houver uma atividade existente no feed com o mesmo ID, essa atividade será retornada do canal, com
UserActivity.State
configurado como Publicado). Se não houver nenhuma atividade com esse nome e a nova atividade for retornada comUserActivity.State
definida como Nova. - As atividades são limitadas ao seu aplicativo. Você não precisa se preocupar com sua ID de atividade colidindo com IDs em outros aplicativos.
Depois de obter ou criar o UserActivity, especifique os outros dois campos obrigatórios: UserActivity.VisualElements.DisplayText
e UserActivity.ActivationUri
.
Em seguida, salve os metadados UserActivity utilizando a chamada SaveAsynce, finalmente, CreateSession, que retorna uma UserActivitySession. O UserActivitySession é o objeto que podemos usar para gerenciar quando o usuário está realmente envolvido com o UserActivity. Por exemplo, devemos chamar Dispose()
na UserActivitySession quando o usuário sair da página. No exemplo acima, também chamamos Dispose()
em _currentActivity
antes de chamar CreateSession()
. Isso ocorre porque criamos _currentActivity
um campo membro de nossa página e queremos interromper qualquer atividade existente antes de iniciarmos a nova (observação: é o ?
operador condicional nulo que testa nulo antes de executar o acesso do membro).
Como, nesse caso, o ActivationUri
esquema é personalizado, também precisamos registrar o protocolo no manifesto do aplicativo. Isso é feito no arquivo XML Package.appmanifest ou usando o designer.
Para efetuar a alteração com o designer, clique duas vezes no arquivo Package.appmanifest em seu projeto para abrir o designer, selecione a guia Declarações e adicione uma definição de Protocolo . A única propriedade que precisa ser preenchida, por enquanto, é Nome. Ele deve corresponder ao URI especificado acima. my-app
Agora, precisamos escrever algum código para informar ao aplicativo o que fazer quando ele for ativado por um protocolo. Substituiremos o método OnActivated
em App.xaml.cs para passar o URI para a página principal, da seguinte maneira:
protected override void OnActivated(IActivatedEventArgs e)
{
if (e.Kind == ActivationKind.Protocol)
{
var uriArgs = e as ProtocolActivatedEventArgs;
if (uriArgs != null)
{
if (uriArgs.Uri.Host == "page2")
{
// Navigate to the 2nd page of the app
}
}
}
Window.Current.Activate();
}
O que esse código faz é detectar se o aplicativo foi ativado por meio de um protocolo. Se foi, então verifica o que o aplicativo deve fazer para retomar a tarefa para a qual foi ativado. Sendo um aplicativo simples, a única atividade que este aplicativo retoma é colocá-lo na página secundária quando o aplicativo aparece.
Usar Cartões Adaptáveis para melhorar a experiência da Linha do Tempo
As atividades do usuário aparecem na Cortana e na Linha do Tempo. Quando as atividades aparecem na Linha do Tempo, nós as exibimos usando o framework do Cartão Adaptável . Se você não fornecer um cartão adaptável para cada atividade, a Linha do Tempo criará automaticamente um cartão de atividade simples com base no nome do aplicativo e no ícone, no campo de título e no campo de descrição opcional. Veja abaixo um exemplo de payload do Adaptive Card e o cartão que ele produz.
]
Exemplo de cadeia de caracteres JSON de conteúdo de cartão adaptável:
{
"$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
"type": "AdaptiveCard",
"version": "1.0",
"backgroundImage": "https://winblogs.azureedge.net/win/2017/11/eb5d872c743f8f54b957ff3f5ef3066b.jpg",
"body": [
{
"type": "Container",
"items": [
{
"type": "TextBlock",
"text": "Windows Blog",
"weight": "bolder",
"size": "large",
"wrap": true,
"maxLines": 3
},
{
"type": "TextBlock",
"text": "Training Haiti’s radiologists: St. Louis doctor takes her teaching global",
"size": "default",
"wrap": true,
"maxLines": 3
}
]
}
]
}
Adicione o payload de Cartões Adaptáveis como uma cadeia de caracteres JSON à Atividade do Usuário desta forma:
activity.VisualElements.Content =
Windows.UI.Shell.AdaptiveCardBuilder.CreateAdaptiveCardFromJson(jsonCardText); // where jsonCardText is a JSON string that represents the card
Integração entre plataformas e entre serviços
Se seu aplicativo executar multiplataforma (por exemplo, no Android e no iOS) ou manter o estado do usuário na nuvem, você poderá publicar UserActivities por meio de do Microsoft Graph. Depois que seu aplicativo ou serviço é autenticado com uma conta da Microsoft, ele apenas usa duas chamadas REST simples para gerar objetos de Atividade e Histórico , usando os mesmos dados descritos acima.
Resumo
Você pode usar a API UserActivity para fazer seu aplicativo aparecer na Timeline e na Cortana.
- Saiba mais sobre a UserActivity API
- Confira o código de exemplo .
- Veja cartões adaptáveis mais sofisticados.
- Publique um UserActivity do iOS, Android ou por meio do seu serviço Web via do Microsoft Graph.
- Saiba mais sobre o Project Rome no GitHub.