Procedura dettagliata: applicazione Web API di Bing Ads in Java

In questo esempio di applicazione Web Java viene richiesto il consenso dell'utente tramite le credenziali fornite dall'utente e quindi vengono ottenuti gli account a cui l'utente autenticato può accedere.

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

È 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 dimostra 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 di Eclipse.

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

  3. Nella finestra di dialogo Nuovo progetto Maven , assicurati che l'opzione Crea un progetto semplice (salta la selezione dell'archetipo) non sia selezionata e fai clic su Avanti. Nel passaggio successivo selezionerai un archetipo Maven.

  4. Nella finestra di dialogo Nuovo progetto Maven , seleziona l'archetipo dell'app Web Maven e fai 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 degli artefatti 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 JAR del servlet javax necessari alla libreria del progetto, 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 compilazione Java ->Librerie , 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. Includi i JAR del servlet nell'ordine del progetto e nelle voci esportate. Nella scheda Percorso di compilazione Java ->Ordine ed esporta, fare clic su Seleziona tutto (selezionare almeno i JAR del servlet), quindi fare clic su Fine.

  8. Includere i 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à (Properties ) andate a Deployment Assembly ->Add, selezionate Java Build Path Entries e fate clic su Next (Avanti). Selezionare tutti i file JAR aggiunti nei passaggi precedenti, fare clic su Fine nella finestra di dialogo Nuova direttiva assembly , 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. Aggiungi la dipendenza com.microsoft.bingads come illustrato nell'esempio seguente e salva pom.xml.

    Nota

    Per informazioni dettagliate sulla versione più recente della dipendenza dell'SDK, consultare l'README.md GitHub Java SDK di 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. In Esplora progetti fare clic con il pulsante destro del mouse sulla cartella Contenuto Web del progetto BingAdsWebApp e scegliere Nuovo file JSP>. Assegnare un nome al file index.jsp quindi fare clic su Fine.

  11. Aprire il file Index.jsp e sostituirne il contenuto con il blocco di codice seguente. È necessario modificare l'esempio seguente con ClientId, ClientSecret e RedirectionUri di cui è stato eseguito il provisioning al momento della registrazione dell'applicazione. Dovrai anche modificare l'esempio con il token di sviluppatore di produzione. Se utilizzi la sandbox, devi seguire i passaggi descritti 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 ulteriori informazioni, vedere Distribuzione di un'applicazione Web. All'avvio dell'applicazione, per impostazione predefinita verranno richieste le credenziali dell'account Microsoft per eseguire l'autenticazione in produzione.

Distribuzione di un'applicazione Web

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

  • Una 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.

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

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

Vedere anche

Sandbox
Esempi di codice API di Microsoft Advertising
Indirizzi dei servizi Web dell'API di Microsoft Advertising