Condividi tramite


Procedura dettagliata: Applicazione Web dell'API Bing Ads in Java

In questo esempio l'applicazione Web Java richiede il consenso dell'utente tramite le credenziali specificate e quindi ottiene gli account a cui l'utente autenticato può accedere.

È innanzitutto necessario registrare un'applicazione e prendere nota dell'ID client (ID applicazione registrato), del segreto client (password registrata) e dell'URI di reindirizzamento. Per altre informazioni sulla registrazione di un'applicazione e sul flusso di concessione del codice di autorizzazione, vedere Autenticazione con OAuth.

Sarà necessario anche il token per sviluppatori di produzione. È possibile creare l'esempio passo dopo passo come descritto di seguito o scaricare altri esempi da GitHub.

Nota

Questo esempio illustra l'autenticazione OAuth nell'ambiente di produzione. Per informazioni sulla configurazione della sandbox, vedere Configurazione della sandbox.

Esempio di autenticazione dell'applicazione Web Walk-Through

  1. Aprire l'ambiente di sviluppo Eclipse.

  2. Creare un nuovo progetto tramite File ->New ->Project ->Maven ->Maven Project e fare clic su Avanti.

  3. Nella finestra di dialogo Nuovo progetto Maven verificare che l'opzione Crea un progetto semplice (ignora selezione archetipo) non sia selezionata e fare clic su Avanti. Nel passaggio successivo si selezionerà un archetipo Maven.

  4. Nella finestra di dialogo Nuovo progetto Maven selezionare l'archetipo dell'app Web Maven e fare clic su Avanti. L'ID gruppo è org.apache.maven.archetypes e l'ID artefatto è maven-archetype-webapp.

  5. Nella finestra di dialogo Nuovo progetto Maven specificare i parametri dell'artefatto del progetto e quindi fare clic su Fine. Ad esempio, è possibile impostare l'ID gruppo su com.microsoft.bingads.examples e l'ID artefatto su BingAdsWebApp.

  6. Aggiungere i file JAR servlet servlet necessari alla libreria di progetti se non sono già presenti nel percorso di compilazione Java. In Esplora progetti fare clic con il pulsante destro del mouse sul progetto BingAdsWebApp e scegliere Proprietà. Nella finestra di dialogo Proprietà passare alla scheda Percorso di compilazione ->Librerie Java, fare clic su Aggiungi JAR esterni, quindi passare a {EclipseInstallationPath}/plugins/ e selezionare, ad esempio , sia javax.servlet.jsp_2.2.0.v201112011158 che javax.servlet_3.0.0.v201112011016.

  7. Includere i file JAR servlet nell'ordine del progetto e le voci esportate. Nella scheda Percorso di compilazione Java ->Ordine ed esportazione fare clic su Seleziona tutto (selezionare almeno i file JAR servlet) e quindi fare clic su Fine.

  8. Includere i file JAR servlet nell'assembly di distribuzione Web del progetto. In Esplora progetti fare clic con il pulsante destro del mouse sul progetto BingAdsWebApp e scegliere Proprietà. Nella finestra di dialogo Proprietà passare a Assembly di distribuzione ->Aggiungi, selezionare Voci del percorso di compilazione Java e fare clic su Avanti. Selezionare tutti i file JAR aggiunti nei passaggi precedenti, fare clic su Fine nella finestra di dialogo Nuova direttiva assembly e quindi fare clic su Applica nella finestra di dialogo Proprietà .

  9. In Esplora progetti fare clic con il pulsante destro del mouse sul file pom.xml e scegliere Apri con ->Editor di testo. Aggiungere la dipendenza com.microsoft.bingads come illustrato nell'esempio seguente e salvare pom.xml.

    Nota

    Per informazioni dettagliate sulla versione più recente delle dipendenze dell'SDK, vedere l'README.md GitHub di Bing Ads Java SDK.

    <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. In Esplora progetti fare clic con il pulsante destro del mouse sulla cartella Contenuto Web del progetto BingAdsWebApp e scegliere Nuovofile JSP>. Assegnare al file il nome index.jsp e quindi fare clic su Fine.

  11. Aprire il file Index.jsp e sostituirlo con il blocco di codice seguente. È necessario modificare l'esempio seguente con ClientId, ClientSecret e RedirectionUri di cui è stato effettuato il provisioning durante la registrazione dell'applicazione. Sarà anche necessario modificare l'esempio con il token di sviluppo di produzione. Se si usa la sandbox, è necessario seguire la procedura descritta in Configurazione della 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. L'applicazione è pronta per essere distribuita in un server. Ad esempio, è possibile pubblicare un'app Web usando il Servizio app di Azure. Per altre informazioni, vedere Distribuzione di un'applicazione Web. Quando si avvia l'applicazione, per impostazione predefinita verranno richieste le credenziali dell'account Microsoft per l'autenticazione nell'ambiente di produzione.

Distribuzione di un'applicazione Web

Se si usa Microsoft Azure per distribuire l'applicazione Web, sono necessari gli elementi seguenti.

  • Distribuzione di un server Web o di un server applicazioni basato su Java, ad esempio Apache Tomcat, GlassFish, JBoss Application Server, Jetty o IBM® WebSphere® Application Server Liberty Core.

  • Sottoscrizione di Azure che può essere acquisita da https://azure.microsoft.com/pricing/purchase-options/.

  • Facoltativamente, è possibile installare Azure Toolkit for Eclipse (by Microsoft Open Technologies) e distribuire l'applicazione Web usando i servizi cloud di Azure. Per altre informazioni, vedere Installazione di Azure Toolkit for Eclipse.

Vedere anche

Sandbox
Esempi di codice API Bing Ads
Indirizzi del servizio Web dell'API Bing Ads