애드워즈 계정과 판매자 센터 하위 계정 생성 및 연결하기

1. 소개

이 Codelab에서는 쇼핑용 Content APIAdWords API를 사용하는 기본사항을 알아보고 두 API를 모두 사용하는 애플리케이션을 빌드합니다. 특히 AdWords 계정과 판매자 센터 계정을 만들고 연결하는 명령줄 애플리케이션을 빌드합니다.

학습할 내용

  • 관리자 계정에서 관리하는 애드워즈 계정을 만드는 방법
  • 멀티 클라이언트 계정으로 관리되는 판매자 센터 계정을 만드는 방법
  • 판매자 센터 계정을 애드워즈 계정에 연결하도록 요청하는 방법
  • 애드워즈 계정에서 대기 중인 판매자 센터 연결을 수락하는 방법

필요한 항목

2. 설정

code 다운로드

다음 링크를 클릭하면 이 Codelab의 모든 코드를 다운로드할 수 있습니다.

다운로드한 ZIP 파일의 압축을 해제합니다. 그러면 Maven 프로젝트와 필요한 모든 리소스가 포함된 루트 폴더 (shopping-account-linking-master)가 압축 해제됩니다. 다음 하위 디렉터리는 특히 중요합니다.

  • src/main/java는 Maven 프로젝트의 소스 루트이며 작업할 코드 스켈레톤이 포함되어 있습니다.
  • src/main/java/solution에는 완성된 솔루션이 포함되어 있습니다.

필수 패키지 설치 및 빌드

Eclipse 또는 IntelliJ와 같은 Maven 인식 IDE를 사용하는 경우 추출된 폴더를 Maven 프로젝트로 가져온 다음 프로젝트를 정상적으로 컴파일할 수 있습니다.

명령줄에서 Maven을 사용하는 경우 다음 명령어를 실행하여 필요한 패키지를 가져오고 압축을 푼 프로젝트 (shopping-account-linking-master)의 루트 폴더에서 프로젝트를 컴파일할 수 있습니다.

mvn compile

3. 인증 설정

이 단계에서는 코딩을 하지 않고 쇼핑용 AdWords API 및 Content API에 적절한 인증 토큰이 포함된 파일을 설정합니다.

애드워즈 API 인증 설정

이 Codelab에서는 클라이언트 라이브러리와 동일한 사용자 인증 정보 로드를 사용하므로 관리자 계정으로 이미 Java용 Google Ads API 클라이언트 라이브러리를 사용했다면 이미 설정되어 있을 것입니다. 그렇지 않은 경우 Java용 Google Ads API 클라이언트 라이브러리를 시작하는 단계 1~3을 따르세요.

Content API 인증 설정

아직 서비스 계정 키가 없는 경우 다음 단계를 따르세요.

  1. 멀티 클라이언트 계정의 판매자 센터로 이동하여 오버플로 메뉴에서 Content API를 선택합니다. 89507d635c51a3dc.png
  2. 인증을 선택한 다음 파란색 + 버튼을 클릭합니다. c465d8dc314ec158.png
  3. Google Cloud Platform 및 Google API 서비스 약관에 동의하면 브라우저에서 새 서비스 계정 키가 포함된 JSON 파일을 자동으로 다운로드합니다.

이제 서비스 계정으로 쇼핑 샘플의 인증을 설정하는 안내를 따릅니다. 즉, 서비스 계정 키 사본은 홈 디렉터리의 다음 경로(shopping-samples/content/service-account.json)에 있어야 합니다. 이 Codelab을 완료한 후 샘플을 사용해 보려는 것이 아니라면 샘플 구성을 설정할 필요가 없습니다.

테스트

이제 인증 토큰이 적절한 위치에 있으므로 샘플을 실행해 보세요. 명령줄에서 Maven을 사용하는 경우 다음 명령어를 실행합니다.

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

세션 객체가 제공되지 않는다는 오류 메시지가 표시되면 인증 토큰이 제대로 작동하고 있는 것입니다. 그렇지 않으면 표시되는 오류 메시지에서 작동하지 않는 사용자 인증 정보와 수정해야 할 파일을 알 수 있습니다.

4. API에 연결

이제 사용할 두 API의 유효한 인증 토큰이 있으므로 실제 코드를 작성해 보겠습니다. 먼저 인증 토큰을 사용하여 세션 객체를 만듭니다. 이후 단계에서는 이러한 세션 객체를 사용하여 각 API가 제공하는 다양한 서비스와 메서드에 액세스합니다.

Content API 세션 객체 만들기

Content API 세션을 만들려면 ShoppingContent.Builder 객체를 생성한 다음 이를 사용하여 적절한 ShoppingContent 객체를 빌드합니다. 다행히 전자를 구성하는 데 필요한 모든 것은 이미 코드 스켈레톤에서 사용할 수 있으므로 다음과 같이 가져오기만 하면 됩니다.

SolutionRunner.java

// TODO(sessions): Create a ShoppingContent object using ShoppingContent.Builder.
contentApiSession =
    new ShoppingContent.Builder(httpTransport, jsonFactory, contentApiCredential)
        .setApplicationName("Linking AdWords and Merchant Center Accounts Codelab")
        .build();

애플리케이션 이름을 설정하는 것은 필수는 아니지만 build() 메서드를 호출하기 전에 ShoppingContent.Builder 객체를 통해 원하는 옵션을 설정하는 방법을 보여줍니다.

AdWords API 세션 객체 만들기

마찬가지로 AdWordsSession 객체를 빌드하기 위한 AdWordsSession.Builder 클래스도 있습니다. 여기서 주된 차이점은 빌더에서 구성 옵션을 직접 설정하는 대신 fromFile() 메서드를 사용하여 이전 단계에서 설정한 ads.properties 파일에서 로드한다는 점입니다.

SolutionRunner.java

// TODO(sessions): Create a AdWordsSession object using AdWordsSession.Builder.
adWordsSession =
    new AdWordsSession.Builder()
        .fromFile()
        .withOAuth2Credential(adwordsOAuth2Credential)
        .build();

테스트

명령줄에서 Maven 프로젝트를 실행하는 경우 마지막 섹션과 동일한 명령어를 사용하여 Maven 프로젝트를 다시 빌드하고 실행합니다.

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

이번에는 오류가 전혀 발생하지 않지만 흥미로운 출력도 없습니다. API를 호출하여 새 계정을 만들고 연결할 때 추가합니다.

5. 새 관리형 애드워즈 계정 만들기

이제 API 세션 객체를 만들었으므로 연결할 계정을 살펴보고 만들어 보겠습니다. 먼저 애드워즈에서 관리자 계정 아래에 테스트 계정을 만듭니다.

ManagedCustomerService에 액세스

AdWords API에서는 먼저 정적 getInstance() 메서드를 사용하여 AdWordsServices 클래스의 인스턴스를 가져와서 사용 가능한 다양한 서비스에 액세스합니다. 이 인스턴스를 사용하여 get() 메서드를 통해 이러한 서비스의 클라이언트를 만들 수 있습니다. 이 메서드는 클라이언트를 만들 세션과 원하는 서비스의 인터페이스라는 두 가지 인수를 사용합니다.

SolutionRunner.java

// TODO(newAWaccount): Using the ManagedCustomerService, create a new testing AdWords account
// under the given manager account.

AdWordsServicesInterface adWordsServices = AdWordsServices.getInstance();

ManagedCustomerServiceInterface managedCustomerService =
    adWordsServices.get(adWordsSession, ManagedCustomerServiceInterface.class);

여기서는 지정된 관리자 계정에서 애드워즈 '고객' (계정)을 관리할 수 있는 ManagedCustomerService에 액세스합니다.

새 계정 설정 지정하기

먼저 새 계정의 설정이 포함된 ManagedCustomer 객체를 만듭니다. 이 Codelab에서는 통화를 미국 달러로, 시간대를 미국 서부 해안과 동일하게 설정하여 테스트 계정을 만듭니다.

SolutionRunner.java

Random rand = new Random();
long run = rand.nextLong();

ManagedCustomer newAdWordsAccount = new ManagedCustomer();
newAdWordsAccount.setName(String.format("AdWords Account Created by Run %d", run));
newAdWordsAccount.setTestAccount(true);
newAdWordsAccount.setCurrencyCode("USD");
newAdWordsAccount.setDateTimeZone("America/Los_Angeles");

또한 계정 이름에 포함할 임의의 숫자도 만듭니다. 이는 여기에서 만들 Google Ads 계정을 나중에 만들 판매자 센터 계정과 일치시켜 솔루션이 완료되면 두 계정을 시각적으로 검사하고 실제로 연결되었는지 확인할 수 있도록 하기 위함입니다.

새 관리 계정 만들기

새 계정을 실제로 만들려면 ManagedCustomerOperation을 사용하여 ADD 작업을 지정합니다.

SolutionRunner.java

ManagedCustomerOperation operation = new ManagedCustomerOperation();
operation.setOperand(newAdWordsAccount);
operation.setOperator(Operator.ADD);

그런 다음 ManagedCustomerService 객체의 mutate() 메서드를 사용하여 작업을 실행합니다. 이 메서드는 실행할 작업 배열을 취하지만 여기서는 단일 작업만 실행하려고 합니다. mutate() 메서드의 결과는 ManagedCustomer 목록을 포함하는 값입니다. 여기서는 우리가 만든 새 계정인 고객 1명을 포함하는 목록입니다. 나중에 사용할 수 있도록 새 계정의 ID를 가져오고 솔루션 출력의 일부로 볼 수 있도록 출력합니다.

SolutionRunner.java

ManagedCustomerReturnValue result =
    managedCustomerService.mutate(new ManagedCustomerOperation[] {operation});
Long adWordsId = result.getValue()[0].getCustomerId();
System.out.printf("Created new AdWords account %d%n", adWordsId);

테스트

이전과 같이 솔루션을 실행해 보세요. 명령줄에서 Maven을 사용하는 경우:

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

문제가 없다면 여전히 오류가 표시되지 않으며 이번에는 새로 만든 애드워즈 계정의 ID가 표시됩니다. 관리자 계정의 AdWords 사이트를 확인하면 새 계정도 표시됩니다.

6. 새 판매자 센터 하위 계정 만들기

이 단계에서는 지난 단계에서 만든 애드워즈 계정에 연결할 판매자 센터 하위 계정을 만듭니다. 하위 계정을 만든 후 별도로 연결을 요청하는 대신, 상응하는 애드워즈 계정의 ID가 이미 있으므로 생성 중에 연결을 요청할 수 있습니다.

새 하위 계정의 설정 지정하기

AdWords API와 달리 Account 모델 클래스의 setter는 객체를 반환하므로 새 Account 객체에서 setter를 호출할 수 있습니다. 애드워즈 계정을 만들 때 생성한 랜덤 숫자를 새 판매자 센터 계정의 이름에도 사용합니다.

SolutionRunner.java

Account newMcAccount = new Account()
    .setName(String.format("Merchant Center Account Created by Run %d", run))
    .setAdwordsLinks(
        ImmutableList.of(
            new AccountAdwordsLink()
                .setAdwordsId(BigInteger.valueOf(adWordsId))
                .setStatus("active")));

이 단계의 시작 부분에서 언급했듯이 새 관리 계정의 애드워즈 ID가 이미 있으므로 이제 새 하위 계정의 AdwordsLinks 목록에 이 ID를 추가할 수 있습니다. 새 하위 계정이 생성되면 이 연결이 자동으로 요청되고 AdWords API에서 사용할 수 있습니다.

새 하위 계정 만들기

Content API에서는 세션 객체의 accounts() 메서드를 호출하여 Accounts 서비스에 액세스한 다음 작업 객체를 설정하는 대신 insert() 메서드를 직접 호출합니다. 이 메서드는 새 하위 계정을 만들 하위 계정 계정의 ID와 원하는 설정이 포함된 Account 객체라는 두 가지 인수를 사용합니다.

SolutionRunner.java

newMcAccount = contentApiSession.accounts().insert(mcaId, newMcAccount).execute();

System.out.printf("Created new Merchant Center account %s%n", newMcAccount.getId());

insert() 메서드는 새 하위 계정의 설정이 포함된 Account 객체를 반환합니다. 반환된 버전에 중요한 정보인 새 하위 계정의 ID가 포함되어 있으므로 원래 Account 객체를 덮어씁니다. 솔루션을 실행한 후 판매자 센터에 새 하위 계정이 있는지 확인할 수 있도록 솔루션의 출력에 이를 출력합니다.

테스트

이전과 같이 솔루션을 실행해 보세요. 명령줄에서 Maven을 사용하는 경우:

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

문제가 없다면 여전히 오류가 표시되지 않으며 이번에는 새 애드워즈 계정과 새 판매자 센터 계정의 ID가 모두 표시됩니다. 멀티 클라이언트 계정의 판매자 센터에서 새 하위 계정을 확인합니다.

7. 애드워즈 계정에서 연결 수락

마지막 단계에서 새 판매자 센터 하위 계정을 만들고 동시에 새 애드워즈 계정에 대한 연결을 요청했습니다. 이 단계에서는 AdWords API를 사용하여 요청된 연결을 수락하여 프로세스를 완료합니다.

CustomerService에 액세스합니다.

이전과 마찬가지로 AdWordsServices 클래스를 사용하여 CustomerService의 클라이언트를 가져옵니다. 하지만 클라이언트를 만들기 전에 먼저 AdWords 세션 객체를 변경하여 향후 사용 시 관리자 계정 대신 새 관리 계정에서 작동하도록 합니다. 판매자 센터 계정에서 관리자 계정이 아닌 관리 대상 계정에 대한 연결을 요청했기 때문입니다.

SolutionRunner.java

// TODO(acceptLink): Using the mutateServiceLinks method in CustomerService, accept the
// proposed link between the new AdWords account and the new Merchant Center account.

adWordsSession.setClientCustomerId(adWordsId.toString());

CustomerServiceInterface customerService =
    adWordsServices.get(adWordsSession, CustomerServiceInterface.class);

새 AdWords 계정을 만들 때와 마찬가지로 연결 설정이 포함된 ServiceLink 객체를 만든 다음 원하는 작업을 설명하는 ServiceLinkOperation 객체를 만듭니다. 여기서는 대기 중인 서비스 연결을 MERCHANT_CENTER 계정으로 가져와 ACTIVESET합니다. serviceLinkId 설정의 경우 방금 만든 판매자 센터 계정의 ID를 사용합니다. 이 ID는 애드워즈의 서비스 링크 ID에 사용됩니다.

SolutionRunner.java

ServiceLink serviceLink = new ServiceLink();
serviceLink.setServiceLinkId(newMcAccount.getId().longValue());
serviceLink.setLinkStatus(ServiceLinkLinkStatus.ACTIVE);
serviceLink.setServiceType(ServiceType.MERCHANT_CENTER);

ServiceLinkOperation op = new ServiceLinkOperation();
op.setOperator(Operator.SET);
op.setOperand(serviceLink);

마지막으로 CustomerService 객체의 mutateServiceLinks() 메서드를 호출하여 작업을 실행합니다. 이전과 마찬가지로 서비스 링크 작업 배열을 사용합니다. 이번에는 메서드가 변경되었을 수 있는 서비스 링크 목록을 직접 반환하므로 이 목록을 반복하여 솔루션의 결과를 출력하기만 하면 됩니다. 물론 단일 작업만 지정했으므로 출력에 단일 링크만 출력됩니다.

SolutionRunner.java

ServiceLink[] mutatedServiceLinks =
    customerService.mutateServiceLinks(new ServiceLinkOperation[] {op});
for (ServiceLink mutatedServiceLink : mutatedServiceLinks) {
  System.out.printf(
      "Service link with service link ID %d, type '%s' updated to status: %s.%n",
      mutatedServiceLink.getServiceLinkId(),
      mutatedServiceLink.getServiceType(),
      mutatedServiceLink.getLinkStatus());
}

테스트

이전과 같이 솔루션을 실행해 보세요. 명령줄에서 Maven을 사용하는 경우:

mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"

문제가 없다면 여전히 오류가 표시되지 않으며 이번에는 서비스 링크가 활성 상태로 업데이트되었다는 메모도 표시됩니다. AdWords판매자 센터를 확인하고 계정이 실제로 연결되었는지 다시 확인합니다.

8. 주제에 따른 변형

코드랩을 완료하신 것을 축하합니다. 이제 완전히 작동하는 솔루션이 있으므로 이 Codelab에서 살펴본 API를 더 많이 사용하도록 솔루션을 수정하거나 확장하는 방법의 예를 살펴보겠습니다.

이 Codelab에서는 판매자 센터 계정을 만들 때 애드워즈 계정의 정보를 사용하여 연결을 요청할 수 있도록 먼저 애드워즈 계정을 만들었습니다. 하지만 판매자 센터 계정이 이미 있는 경우 대신 구성을 업데이트해야 합니다. 코드를 변경하여 먼저 판매자 센터 계정을 만든 다음 애드워즈 계정을 만든 후 돌아가서 연결을 요청하도록 구성을 업데이트해 보세요.

현재 애플리케이션은 API 호출에서 오류가 없는 경우에만 성공으로 간주합니다. 예시를 확장하여 새 판매자 센터 계정과 애드워즈 계정의 연결 정보를 확인하고 연결이 실제로 활성 상태인지 확인하세요.

세상은 당신의 것

다른 변경사항을 생각해 냈다면 시도해 보세요. 아이디어에 대한 참조 코드가 필요한 경우 Google 쇼핑 샘플Google Ads Java 클라이언트 라이브러리 소스examples 디렉터리를 확인하세요.