Partilhar via


Instruções: Aplicação Web da API de Anúncios do Bing em Java

Este exemplo de aplicação Web Java pede o consentimento do utilizador através das credenciais que fornecer e, em seguida, obtém as contas às quais o utilizador autenticado pode aceder.

Primeiro, tem de registar uma aplicação e anotar o ID de cliente (ID da aplicação registada), o segredo do cliente (palavra-passe registada) e o URI de redirecionamento. Para obter mais detalhes sobre o registo de uma aplicação e o fluxo de concessão de código de autorização, veja Authentication with OAuth (Autenticação com OAuth).

Também precisará do token de programador de produção. Pode criar o exemplo passo a passo, conforme descrito abaixo, ou transferir mais exemplos do GitHub.

Nota

Este exemplo demonstra a autenticação OAuth na produção. Para obter informações sobre como configurar o sandbox, consulte Configurar o Sandbox.

Exemplo de Autenticação de Aplicações Web Walk-Through

  1. Abra o ambiente de desenvolvimento do Eclipse.

  2. Crie um novo projeto através de Ficheiro ->Novo ->Projeto ->Maven ->Maven Project e clique em Seguinte.

  3. Na caixa de diálogo Novo Projeto Maven , certifique-se de que a opção Criar um projeto simples (ignorar seleção de arquétipo) não está selecionada e clique em Seguinte. Irá selecionar um arquétipo maven no próximo passo.

  4. Na caixa de diálogo Novo Projeto Maven , selecione o arquétipo da aplicação Web maven e clique em Seguinte. O ID de Grupo é org.apache.maven.archetypes e o ID do Artefacto é maven-archetype-webapp.

  5. Na caixa de diálogo Novo Projeto Maven , especifique os parâmetros do artefacto do projeto e, em seguida, clique em Concluir. Por exemplo, pode definir o ID de Grupo como com.microsoft.bingads.examples e O ID do Artefacto como BingAdsWebApp.

  6. Adicione os JARs de servlet javax necessários à biblioteca de projetos se ainda não estiverem no caminho de compilação java. No Explorador de Projetos, clique com o botão direito do rato no projeto BingAdsWebApp e clique em Propriedades. Na caixa de diálogo Propriedades , aceda ao separador Caminho da Compilação ->Bibliotecas do Java, clique em Adicionar JARs Externos e, em seguida, navegue para {EclipseInstallationPath}/plugins/ e selecione, por exemplo , javax.servlet.jsp_2.2.0.v201112011158 e javax.servlet_3.0.0.v201112011016.

  7. Inclua os JARs de servlet na ordem do projeto e as entradas exportadas. No separador Caminho de Compilação ->Order e Exportação de Java, clique em Selecionar Tudo (pelo menos, selecione os JARs do servlet) e, em seguida, clique em Concluir.

  8. Inclua os JARs de servlet na Assemblagem de Implementação Web do projeto. No Explorador de Projetos, clique com o botão direito do rato no projeto BingAdsWebApp e selecione Propriedades. Na caixa de diálogo Propriedades , aceda a Assemblagem de Implementação ->Adicionar, selecione Entradas de Caminho de Compilação Java e clique em Seguinte. Selecione todos os JARs que adicionou nos passos anteriores, clique em Concluir na caixa de diálogo Nova Diretiva de Assemblagem e, em seguida, clique em Aplicar na caixa de diálogo Propriedades .

  9. No Explorador de Projetos, clique com o botão direito do rato no ficheiro pom.xml e selecione Abrir Com ->Editor de Texto. Adicione a dependência com.microsoft.bingads , conforme mostrado no exemplo seguinte, e guarde pom.xml.

    Nota

    Para obter detalhes sobre a versão de dependência do SDK mais recente, veja o gitHub do SDK Java do Bing Ads README.md.

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.microsoft.bingads.examples</groupId>
      <artifactId>BingAdsWebApp</artifactId>
      <packaging>war</packaging>
      <version>0.0.1-SNAPSHOT</version>
      <name>BingAdsWebApp Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.microsoft.bingads</groupId>
          <artifactId>microsoft.bingads</artifactId>
          <version>13.0.17</version>
        </dependency>
      </dependencies>
      <build>
        <finalName>BingAdsWebApp</finalName>
      </build>
    </project>
    
  10. No Explorador de Projetos, clique com o botão direito do rato na pasta Conteúdo Web do projeto BingAdsWebApp e selecione Novo Ficheiro ->JSP. Atribua o nome index.jsp ao ficheiro e, em seguida, clique em Concluir.

  11. Abra o ficheiro Index.jsp e substitua o respetivo conteúdo pelo seguinte bloco de código. Tem de editar o exemplo abaixo com o ClientId, ClientSecret e RedirectionUri que foram aprovisionados quando registou a sua aplicação. Também terá de editar o exemplo com o token de programador de produção. Se estiver a utilizar o sandbox, tem de seguir os passos em Configurar o Sandbox.

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
    <%@ page import="java.net.URL" %>
    <%@ page import="com.microsoft.bingads.*" %>
    <%@ page import="com.microsoft.bingads.v13.customermanagement.*" %>
    
    <%! 
    	static AuthorizationData authorizationData;
    	static ServiceClient<ICustomerManagementService> CustomerService; 
    
    	private static java.lang.String DeveloperToken = "<DeveloperTokenGoesHere>";
    	private static java.lang.String ClientId = "<ClientIdGoesHere>";
    	private static java.lang.String ClientSecret = "<ClientSecretGoesHere>";
        private static java.lang.String RedirectUri = "<RedirectUriGoesHere>";
    
    	static long accountsCount = 0;
     %>
    
     <%! 
    	//Gets a User object by the specified Microsoft Advertising user identifier.
    
    	 static User getUser(java.lang.Long userId) throws Exception
    	 {
    	     GetUserRequest request = new GetUserRequest();
    
    	     request.setUserId(userId);
    
    	     return CustomerService.getService().getUser(request).getUser();
    	 }
    
    	 // Searches by UserId for accounts that the user can manage.
    
    	 static ArrayOfAdvertiserAccount searchAccountsByUserId(java.lang.Long userId) throws AdApiFaultDetail_Exception, ApiFault_Exception{       
    
    	     ArrayOfPredicate predicates = new ArrayOfPredicate();
    	     Predicate predicate = new Predicate();
    	     predicate.setField("UserId");
    	     predicate.setOperator(PredicateOperator.EQUALS);
    	     predicate.setValue("" + userId);
    	     predicates.getPredicates().add(predicate);
    
    	     Paging paging = new Paging();
    	     paging.setIndex(0);
    	     paging.setSize(10);
    
    	     final SearchAccountsRequest searchAccountsRequest = new SearchAccountsRequest();
    	     searchAccountsRequest.setPredicates(predicates);
    	     searchAccountsRequest.setPageInfo(paging);
    
    	     return CustomerService.getService().searchAccounts(searchAccountsRequest).getAccounts();
    	 }
    
    	 // Outputs the account and parent customer identifiers for the specified accounts.
    
    	 static void printAccounts(ArrayOfAdvertiserAccount accounts) throws Exception
    	 {
    	     for (Account account : accounts.getAccounts())
    	     {
    	     	System.out.printf("AccountId: %d\n", account.getId());
    	     	System.out.printf("CustomerId: %d\n", account.getParentCustomerId());
    	     }
    	 }
     %>
    
    <%
    	// Main execution  
    
      try {
    
          	OAuthWebAuthCodeGrant oAuthWebAuthCodeGrant = new OAuthWebAuthCodeGrant(
    			ClientId, 
    			ClientSecret, 
    			new URL(RedirectUri)
            );
    
          	oAuthWebAuthCodeGrant.setNewTokensListener(new NewOAuthTokensReceivedListener() {
                @Override
                public void onNewOAuthTokensReceived(OAuthTokens newTokens) {
                       java.lang.String newAccessToken = newTokens.getAccessToken();
                       java.lang.String newRefreshToken = newTokens.getRefreshToken();
                       java.lang.String refreshTime = new java.text.SimpleDateFormat(
                    		   "MM/dd/yyyy HH:mm:ss").format(new java.util.Date());
    
                       System.out.printf("Token refresh time: %s\n", refreshTime);
                       System.out.printf("New access token: %s\n", newAccessToken);
                       System.out.printf("You should securely store this new refresh token: %s\n", newRefreshToken);
    
                }
            });
    
          	if (authorizationData == null) {
              	if (request.getParameter("code") == null) {				
    				URL authorizationUrl = oAuthWebAuthCodeGrant.getAuthorizationEndpoint();
    				response.sendRedirect(authorizationUrl.toString());
    				return;
    			} else {		
    				OAuthTokens tokens = oAuthWebAuthCodeGrant.requestAccessAndRefreshTokens(
    					new URL(request.getRequestURL() + "?" + request.getQueryString()));
    
    				authorizationData = new AuthorizationData();
    				authorizationData.setDeveloperToken(DeveloperToken);
    				authorizationData.setAuthentication(oAuthWebAuthCodeGrant);
    			}
    		}
    
    		CustomerService = new ServiceClient<ICustomerManagementService>(
    			authorizationData, 
    			ICustomerManagementService.class);
    
    		User user = getUser(null);
    
          // Search for the accounts that the user can access.
    
          ArrayOfAdvertiserAccount accounts = searchAccountsByUserId(user.getId());
          accountsCount = accounts.getAccounts().size();
    
          System.out.println("The user can access the following Microsoft Advertising accounts: \n");
          printAccounts(accounts);
    
    	// Customer Management service operations can throw AdApiFaultDetail.
        } catch (AdApiFaultDetail_Exception ex) {
            System.out.println("The operation failed with the following faults:\n");
    
            for (AdApiError error : ex.getFaultInfo().getErrors().getAdApiErrors())
            {
                System.out.printf("AdApiError\n");
                System.out.printf("Code: %d\nError Code: %s\nMessage: %s\n\n", 
                    error.getCode(), error.getErrorCode(), error.getMessage()
                );
            }
    
        // Customer Management service operations can throw ApiFault.
        } catch (ApiFault_Exception ex) {
            System.out.println("The operation failed with the following faults:\n");
    
            for (OperationError error : ex.getFaultInfo().getOperationErrors().getOperationErrors())
            {
                System.out.printf("OperationError\n");
                System.out.printf("Code: %d\nMessage: %s\n\n", 
                    error.getCode(), error.getMessage()
                );
            }
        } catch (Exception ex) {
            // Ignore fault exceptions that we already caught.
    
            if (ex.getCause() instanceof AdApiFaultDetail_Exception ||
                ex.getCause() instanceof ApiFault_Exception )
            {
                ;
            }
            else
            {
                System.out.println("Error encountered: ");
                System.out.println(ex.getMessage());
                ex.printStackTrace();
            }
        }	
    %>
    
    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-type" content="text/html; charset=utf-8">
        <title>Microsoft Advertising Web Application Example</title>
        <link rel="stylesheet" href="styles/styles.css" type="text/css" media="screen">
    </head>
    <body>
        <div id="content" class="container">
        	<div>
        		<br/>   		    		
        		<b>You have <%= accountsCount %> accounts</b>    		
    
        	</div> 
        </div>
    </body>
    </html>
    
  12. A aplicação está pronta para ser implementada num servidor. Por exemplo, pode publicar uma Aplicação Web com o Serviço de Aplicações do Azure. Para obter mais informações, veja Implementar uma Aplicação Web. Quando iniciar a aplicação, ser-lhe-ão pedidas, por predefinição, as credenciais da conta Microsoft para se autenticarem na produção.

Implementar uma Aplicação Web

Se estiver a utilizar o Microsoft Azure para implementar a sua aplicação Web, é necessário o seguinte.

  • Uma distribuição de um servidor Web ou servidor de aplicações baseado em Java, como Apache Tomcat, GlassFish, JBoss Application Server, Jetty ou IBM® WebSphere® Application Server Liberty Core.

  • Uma subscrição do Azure, que pode ser adquirida a partir de https://azure.microsoft.com/pricing/purchase-options/.

  • Opcionalmente, pode instalar o Azure Toolkit for Eclipse (pela Microsoft Open Technologies) e implementar a sua aplicação Web com os serviços cloud do Azure. Para obter mais informações, veja Instalar o Azure Toolkit for Eclipse.

See Also

Sandbox
Exemplos de Código da API de Anúncios do Bing
Endereços do Serviço Web da API de Anúncios do Bing