Freigeben über


Exemplarische Vorgehensweise: Bing Ads-API-Webanwendung in Java

Diese Java-Beispielwebanwendung fordert über die von Ihnen angegebenen Anmeldeinformationen zur Benutzereinwilligung auf und ruft dann die Konten ab, auf die der authentifizierte Benutzer zugreifen kann.

Sie müssen zunächst eine Anwendung registrieren und sich die Client-ID (registrierte Anwendungs-ID), den geheimen Clientschlüssel (registriertes Kennwort) und den Umleitungs-URI notieren. Weitere Informationen zum Registrieren einer Anwendung und zum Autorisierungscodegenehmigungsflow finden Sie unter Authentifizierung mit OAuth.

Sie benötigen auch Ihr Entwicklertoken für die Produktion. Sie können das Beispiel wie unten beschrieben Schritt für Schritt erstellen oder weitere Beispiele von GitHub herunterladen.

Hinweis

In diesem Beispiel wird die OAuth-Authentifizierung in der Produktion veranschaulicht. Informationen zum Konfigurieren der Sandbox finden Sie unter Konfigurieren der Sandbox.

Beispiel für die Webanwendungsauthentifizierung Walk-Through

  1. Öffnen Sie die Eclipse-Entwicklungsumgebung.

  2. Erstellen Sie über File ->New ->Project ->Maven ->Maven Project ein neues Projekt, und klicken Sie auf Weiter.

  3. Stellen Sie im Dialogfeld Neues Maven-Projekt sicher, dass die Option Einfaches Projekt erstellen (Auswahl des Archetyps überspringen) nicht ausgewählt ist, und klicken Sie auf Weiter. Im nächsten Schritt wählen Sie einen Maven-Archetyp aus.

  4. Wählen Sie im Dialogfeld Neues Maven-Projekt den Archetyp Maven-Web-App aus, und klicken Sie auf Weiter. Die Gruppen-ID lautet org.apache.maven.archetypes, und die Artefakt-ID lautet maven-archetype-webapp.

  5. Geben Sie im Dialogfeld Neues Maven-Projekt die Artefaktparameter Ihres Projekts an, und klicken Sie dann auf Fertig stellen. Beispielsweise können Sie die Gruppen-ID auf com.microsoft.bingads.examples und die Artefakt-ID auf BingAdsWebApp festlegen.

  6. Fügen Sie der Projektbibliothek die erforderlichen Javax-Servlet-JARs hinzu, wenn sie sich noch nicht in Ihrem Java-Buildpfad befinden. Klicken Sie in Project Explorer mit der rechten Maustaste auf das Projekt BingAdsWebApp, und klicken Sie auf Eigenschaften. Wechseln Sie im Dialogfeld Eigenschaften zur Registerkarte Java-Buildpfad ->Bibliotheken , klicken Sie auf Externe JARs hinzufügen, navigieren Sie dann zu {EclipseInstallationPath}/plugins/ , und wählen Sie z. B. javax.servlet.jsp_2.2.0.v20111201158 und javax.servlet_3.0.0.v201112011016 aus.

  7. Fügen Sie die Servlet-JARs in die Reihenfolge des Projekts und exportierte Einträge ein. Klicken Sie auf der Registerkarte Java Build Path -Order and Export (Java Build Path ->Order and Export ) auf Select All (wählen Sie mindestens die Servlet-JARs aus), und klicken Sie dann auf Fertig stellen.

  8. Schließen Sie die Servlet-JARs in die Webbereitstellungsassembly des Projekts ein. Klicken Sie in Project Explorer mit der rechten Maustaste auf das Projekt BingAdsWebApp, und wählen Sie Eigenschaften aus. Wechseln Sie im Dialogfeld Eigenschaften zu Bereitstellungsassembly ->Hinzufügen, wählen Sie Java-Buildpfadeinträge aus, und klicken Sie auf Weiter. Wählen Sie alle JARs aus, die Sie in den vorherigen Schritten hinzugefügt haben, klicken Sie im Dialogfeld Neue Assemblydirektive auf Fertig stellen, und klicken Sie dann im Dialogfeld Eigenschaften auf Übernehmen.

  9. Klicken Sie in Project Explorer mit der rechten Maustaste auf die pom.xml Datei, und wählen Sie MitText-Editor> öffnen aus. Fügen Sie die com.microsoft.bingads-Abhängigkeit wie im folgenden Beispiel gezeigt hinzu, und speichern Sie pom.xml.

    Hinweis

    Ausführliche Informationen zur neuesten SDK-Abhängigkeitsversion finden Sie im GitHub-README.md für das 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. Klicken Sie in Project Explorer mit der rechten Maustaste auf den Ordner Webinhalt Ihres BingAdsWebApp-Projekts, und wählen Sie Neu ->JSP-Datei aus. Nennen Sie die Datei index.jsp , und klicken Sie dann auf Fertig stellen.

  11. Öffnen Sie die Datei Index.jsp, und ersetzen Sie deren Inhalt durch den folgenden Codeblock. Sie müssen das folgende Beispiel mit clientID, ClientSecret und RedirectionUri bearbeiten, die bei der Registrierung Ihrer Anwendung bereitgestellt wurden. Außerdem müssen Sie das Beispiel mit Ihrem Produktionsentwicklertoken bearbeiten. Wenn Sie Sandbox verwenden, müssen Sie die Schritte unter Konfigurieren der Sandbox ausführen.

    <%@ 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. Die Anwendung kann auf einem Server bereitgestellt werden. Sie können beispielsweise eine Web-App mit dem Azure App Service veröffentlichen. Weitere Informationen finden Sie unter Bereitstellen einer Webanwendung. Wenn Sie die Anwendung starten, werden Sie standardmäßig zur Authentifizierung von Microsoft-Kontoanmeldeinformationen in der Produktion aufgefordert.

Bereitstellen einer Webanwendung

Wenn Sie Microsoft Azure zum Bereitstellen Ihrer Webanwendung verwenden, ist Folgendes erforderlich.

  • Eine Verteilung eines Java-basierten Webservers oder Anwendungsservers, z. B. Apache Tomcat, GlassFish, JBoss Application Server, Jetty oder IBM® WebSphere® Application Server Liberty Core.

  • Ein Azure-Abonnement, das über https://azure.microsoft.com/pricing/purchase-options/erworben werden kann.

  • Optional können Sie das Azure-Toolkit für Eclipse (von Microsoft Open Technologies) installieren und Ihre Webanwendung mithilfe von Azure-Clouddiensten bereitstellen. Weitere Informationen finden Sie unter Installieren des Azure-Toolkits für Eclipse.

Siehe auch

Sandbox
Codebeispiele für die Bing Ads-API
Adressen des Bing Ads-API-Webdiensts