Guia de início rápido: manipulando ações de contato (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Nos namespaces Windows.UI.WebUI e Windows.ApplicationModel.Activation, você pode fornecer dados a um aplicativo quando ele é ativado em diversas ações de contato (Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs). Aqui, mostraremos como lidar com a ativação do aplicativo quando um usuário tenta fazer uma chamada para um contato, enviar uma mensagem para um contato ou obter o mapa do endereço de um contato. Essas ações de ativação de aplicativo podem ocorrer por meio de um cartão de contato recuperado da experiência do Windows Search ou de um aplicativo. Um cartão de contato pode ser exibido de dentro de um aplicativo com os métodos ContactManager.ShowContactCard e ContactManager.ShowDelayLoadedContactCard. Há suporte para lidar com a ativação de aplicativos em ações de contato a partir do Windows 8.1.

Aqui, fazemos referência ao Exemplo de manipulação de ações de contato. Este exemplo demonstra como manipular a ativação de aplicativos em ações de contato por meio da API do namespace Windows.UI.WebUI em aplicativos da Windows Store.

O exemplo fornece três cenários:

  1. Manipulando uma ativação para fazer uma chamada (ContactLaunchActionVerbs.call)
  2. Manipulando uma ativação para enviar uma mensagem (ContactLaunchActionVerbs.message)
  3. Manipulando uma ativação para mapear um endereço (ContactLaunchActionVerbs.map)

Pré-requisitos

  • Recomendamos que você se familiarize com o Microsoft Visual Studio e com os modelos a ele associados.
  • Recomendamos que você se familiarize com o desenvolvimento em JavaScript.

Incluir registros de manifesto para cada ação à qual o aplicativo deve dar suporte

No arquivo AppxManifest.xml ou Package.appxmanifest, atualize o elemento Package para aceitar o esquema de manifesto do Windows 8.1 e incluir os registros de manifesto para cada ação à qual o aplicativo precisa dar suporte. Esses registros permitem que o aplicativo seja iniciado quando qualquer uma das ações de contato ou esquemas de protocolo ocorrer.

<Package xmlns="https://schemas.microsoft.com/appx/2010/manifest" xmlns:m2="https://schemas.microsoft.com/appx/2013/manifest">
.
.
      <Extensions>
        <Extension Category="windows.protocol">
          <Protocol Name="tel"/>
        </Extension>        
        <m2:Extension Category="windows.contact">
          <m2:Contact>
            <m2:ContactLaunchActions>
              <m2:LaunchAction Verb="call">
                <m2:ServiceId>telephone</m2:ServiceId>
              </m2:LaunchAction>
              <m2:LaunchAction Verb="message">
                <m2:ServiceId>skype.com</m2:ServiceId>
              </m2:LaunchAction>            
              <m2:LaunchAction Verb="map"/>
            </m2:ContactLaunchActions>
          </m2:Contact>
        </m2:Extension>
      </Extensions>      

Determinar o cenário de atuação

O aplicativo é iniciado quando o tipo de ativação contact ou protocol Windows.ApplicationModel.Activation.ActivationKind ocorre.

O cenário de atuação é determinado pela ação de contato ação que é realizada. Por exemplo, se o usuário clicar em Chamar no número de telefone de um contato, a ação do evento será ContactLaunchActionVerbs.call, e o cenário de atuação será S1-Call.

Como recomendamos que os aplicativos que implementam a ação Windows.Contact.call também implementem suporte para o protocolo , você também precisará atuar no cenário S1-Call quando protocol Windows.ApplicationModel.Activation.ActivationKind for detectado.

    function activated(eventObject) {
        var url = null;
        var arg = null;

        if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.contact) {
            // If activated for a contact, launch the appropriate action handling scenario.
            arg = eventObject.detail;
            if (eventObject.detail.verb === Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs.call) {
                url = scenarios[0].url;
            } else if (eventObject.detail.verb === Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs.message) {
                url = scenarios[1].url;
            } else if (eventObject.detail.verb === Windows.ApplicationModel.Contacts.ContactLaunchActionVerbs.map) {
                url = scenarios[2].url;
            } else {
                WinJS.log && WinJS.log("This app can't handle the contact action verb it was activated for.", "sample", "error");
                return;
            }
        } else if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.protocol) {
            // If activated for a protocol, launch the call scenario
            arg = eventObject.detail;
            url = scenarios[0].url;
        } else if (eventObject.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
            // Otherise, navigate to either the first scenario or to the last running scenario
            // before suspension or termination.
            url = WinJS.Application.sessionState.lastUrl || scenarios[0].url;
        }

        if (url !== null) {
            // Use setPromise to indicate to the system that the splash screen must not be torn down
            // until after processAll and navigate complete asynchronously.
            eventObject.setPromise(WinJS.UI.processAll().then(function () {
                return WinJS.Navigation.navigate(url, arg);
            }));
        }
    }

    WinJS.Navigation.addEventListener("navigated", function (eventObject) {
        var url = eventObject.detail.location;
        var host = document.getElementById("contentHost");
        // Call unload method on current scenario, if there is one
        host.winControl && host.winControl.unload && host.winControl.unload();
        WinJS.Utilities.empty(host);
        eventObject.detail.setPromise(WinJS.UI.Pages.render(url, host, eventObject.detail.state).then(function () {
            WinJS.Application.sessionState.lastUrl = url;
        }));
    });

Fornecer dados ao aplicativo quando ele for ativado com uma chamada

Determine se estamos recebendo um evento de chamada de contato ou um evento de chamada de protocolo .

Os dados transmitidos aqui para o evento de chamada de contato são ServiceId e ServiceUserId. O exemplo usa o número de telefone do contato selecionado e registra, por exemplo, "Ativação por chamada recebida. O número de telefone a ser chamado é (555) 555-0100".

Os dados transmitidos aqui para o evento de chamada de protocolo são URI schemeName e path. O exemplo usa o número de telefone do contato selecionado e registra, por exemplo, "Telefone: ativação recebida. O número de telefone a ser chamado é (555) 555-0100".

(function () {
    "use strict";
    var page = WinJS.UI.Pages.define("/html/S1-Call.html", {
        processed: function (element, callArgs) {
            // callArgs is the parameter passed to navigation in the activated event handler.
            if (callArgs) {
                if (callArgs.serviceId) {
                    if (callArgs.serviceId === "telephone") {
                        WinJS.log && WinJS.log("Call activation was received. The phone number to call is " + callArgs.serviceUserId + ".", "sample", "status");
                    } else {
                        WinJS.log && WinJS.log("This app doesn't support calling by using the " + callArgs.serviceId + " service.", "sample", "error");
                    }
                } else if (callArgs.uri) {
                    if (callArgs.uri.schemeName === "tel") {
                        WinJS.log && WinJS.log("Tel: activation was received. The phone number to call is " + callArgs.uri.path + ".", "sample", "status");
                    } else {
                        WinJS.log && WinJS.log("This app doesn't support the " + callArgs.uri.schemeName + " protocol.", "sample", "error");
                    }
                }
            }
        },
        ready: function (element, options) {
        }
    });
})();

Fornecer dados ao aplicativo quando ele for ativado com o envio de uma mensagem

Os dados transmitidos aqui para o evento de envio de mensagem de contato são ServiceId e ServiceUserId. O exemplo usa a ID de usuário do contato para o serviço em particular e registra, por exemplo, "Ativação por envio de mensagem recebida. O serviço a ser usado é contoso.com. A ID de usuário para enviar a mensagem é userid10".

(function () {
    "use strict";
    var page = WinJS.UI.Pages.define("/html/S2-Send-Message.html", {
        processed: function (element, messageArgs) {
            // messageArgs is the parameter passed to navigation in the activated event handler.
            if (messageArgs) {
                WinJS.log && WinJS.log("Send message activation was received. The service to use is " + messageArgs.serviceId + ". The user ID to message is " + 
                messageArgs.serviceUserId + ".", "sample", "status");
            }
        },
        ready: function (element, options) {
        }
    });
})();

Fornecer dados ao aplicativo quando ele for ativado com uma solicitação de mapa

Os dados transmitidos aqui para o evento de solicitação de mapa de contato são ContactAddress. O exemplo usa o endereço físico do contato e registra, por exemplo, "Ativação por endereço de mapa recebida. O endereço a ser mapeado é One Microsoft Way".

(function () {
    "use strict";
    var page = WinJS.UI.Pages.define("/html/S3-Map-Address.html", {
        processed: function (element, mapArgs) {
            // mapArgs is the parameter passed to navigation in the activated event handler.
            if (mapArgs) {
                var address = mapArgs.address;
                WinJS.log && WinJS.log("Map address activation was received. The street address to map is " +
                    (address.streetAddress ? address.streetAddress : "unspecified") + ".", "sample", "status");
            }
        },
        ready: function (element, options) {
        }
    });
})();

Resumo e próximas etapas

Agora, você já conhece as noções básicas de como lidar com a ativação de aplicativos em ações de contato. Baixe o Exemplo de manipulação de ações de contato na galeria de códigos para ver o exemplo completo de como manipular a ativação de aplicativos em ações de contato.

Tópicos relacionados

Exemplo de manipulação de ações de contato