Compartir a través de


Tutorial: Aplicación web de BING Ads API en Java

En este ejemplo, la aplicación web java solicita el consentimiento del usuario a través de las credenciales que proporcione y, a continuación, obtiene las cuentas a las que el usuario autenticado puede acceder.

Primero debe registrar una aplicación y tomar nota del identificador de cliente (identificador de aplicación registrado), el secreto de cliente (contraseña registrada) y el URI de redirección. Para obtener más información sobre cómo registrar una aplicación y el flujo de concesión de código de autorización, consulte Autenticación con OAuth.

También necesitará el token de desarrollador de producción. Puede crear el ejemplo paso a paso como se describe a continuación o descargar más ejemplos de GitHub.

Nota:

En este ejemplo se muestra la autenticación de OAuth en producción. Para obtener información sobre cómo configurar el espacio aislado, consulte Configuración del espacio aislado.

Ejemplo de autenticación de aplicaciones web Walk-Through

  1. Abra el entorno de desarrollo de Eclipse.

  2. Cree un nuevo proyecto a través de Archivo ->Nuevo ->Proyecto ->Maven ->Maven Project y haga clic en Siguiente.

  3. En el cuadro de diálogo Nuevo proyecto de Maven , asegúrese de que la opción Crear un proyecto simple (omitir selección de arquetipo) no está seleccionada y haga clic en Siguiente. En el paso siguiente, seleccionará un arquetipo de Maven.

  4. En el cuadro de diálogo Nuevo proyecto de Maven , seleccione el arquetipo de aplicación web de Maven y haga clic en Siguiente. El id. de grupo es org.apache.maven.archetypes y el id. de artefacto es maven-archetype-webapp.

  5. En el cuadro de diálogo Nuevo proyecto de Maven , especifique los parámetros de artefacto del proyecto y, a continuación, haga clic en Finalizar. Por ejemplo, puede establecer el id. de grupo en com.microsoft.bingads.examples y el id. de artefacto en BingAdsWebApp.

  6. Agregue los servlet JAR de Javax necesarios a la biblioteca de proyectos si aún no están en la ruta de acceso de compilación de Java. En el Explorador de proyectos, haga clic con el botón derecho en el proyecto BingAdsWebApp y haga clic en Propiedades. En el cuadro de diálogo Propiedades , vaya a la pestaña Ruta de acceso de compilación de Java ->Bibliotecas , haga clic en Agregar JAR externos y, a continuación, vaya a {EclipseInstallationPath}/plugins/ y seleccione, por ejemplo , javax.servlet.jsp_2.2.0.v201112011158 y javax.servlet_3.0.0.v201112011016.

  7. Incluya los servlet JAR en el orden del proyecto y las entradas exportadas. En la pestaña Ruta de acceso de compilación de Java ->Orden y exportación , haga clic en Seleccionar todo (al menos seleccione los servlet JAR) y, a continuación, haga clic en Finalizar.

  8. Incluya los servlet JAR en el ensamblado de implementación web del proyecto. En el Explorador de proyectos, haga clic con el botón derecho en el proyecto BingAdsWebApp y seleccione Propiedades. En el cuadro de diálogo Propiedades , vaya a Ensamblado de implementación ->Agregar, seleccione Entradas de ruta de compilación de Java y haga clic en Siguiente. Seleccione todas las SOLICITUDES que agregó en los pasos anteriores, haga clic en Finalizar en el cuadro de diálogo Nueva directiva de ensamblado y, a continuación, haga clic en Aplicar en el cuadro de diálogo Propiedades .

  9. En el Explorador de proyectos, haga clic con el botón derecho en el archivo pom.xml y seleccione Abrir con ->Editor de texto. Agregue la dependencia com.microsoft.bingads como se muestra en el ejemplo siguiente y guarde pom.xml.

    Nota:

    Para obtener más información sobre la versión de dependencia del SDK más reciente, consulte el README.md de GitHub del SDK de Java de Bing Ads.

    <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. En el Explorador de proyectos, haga clic con el botón derecho en la carpeta Contenido web del proyecto BingAdsWebApp y seleccione Nuevo archivo ->JSP. Asigne al archivo el nombre index.jsp y, a continuación, haga clic en Finalizar.

  11. Abra el archivo Index.jsp y reemplace su contenido por el siguiente bloque de código. Debe editar el ejemplo siguiente con los valores ClientId, ClientSecret y RedirectionUri que se aprovisionaron cuando registró la aplicación. También tendrá que editar el ejemplo con el token de desarrollador de producción. Si usa el espacio aislado, debe seguir los pasos descritos en Configuración del espacio aislado.

    <%@ 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. La aplicación está lista para implementarse en un servidor. Por ejemplo, puede publicar una aplicación web mediante el Azure App Service. Para obtener más información, consulte Implementación de una aplicación web. Al iniciar la aplicación, se le pedirán de forma predeterminada las credenciales de la cuenta microsoft para autenticarse en producción.

Implementación de una aplicación web

Si usa Microsoft Azure para implementar la aplicación web, se requiere lo siguiente.

  • Distribución de un servidor web o servidor de aplicaciones basado en Java, como Apache Tomcat, GlassFish, JBoss Application Server, Jetty o IBM® WebSphere® Application Server Liberty Core.

  • Una suscripción de Azure, que se puede adquirir a partir de https://azure.microsoft.com/pricing/purchase-options/.

  • Opcionalmente, puede instalar el kit de herramientas de Azure para Eclipse (por Microsoft Open Technologies) e implementar la aplicación web mediante servicios en la nube de Azure. Para obtener más información, consulte Instalación del kit de herramientas de Azure para Eclipse.

Consulta también

Espacio aislado
Ejemplos de código de api de Bing Ads
Direcciones del servicio web de la API de Bing Ads