1. 소개
이 Codelab에서는 Shopping용 Content API 및 Google Ads API를 사용하는 기본사항을 알아보고 둘 다 사용하는 애플리케이션을 빌드합니다. 특히 Google Ads 계정과 판매자 센터 계정을 만들고 연결하는 명령줄 애플리케이션을 빌드합니다.
학습할 내용
- 관리자 계정에서 관리하는 Google Ads 계정을 만드는 방법
- 멀티 클라이언트 계정에서 관리하는 판매자 센터 계정을 만드는 방법
- 판매자 센터 계정에서 Google Ads 계정으로 연결을 요청하는 방법
- Google Ads 계정에서 대기 중인 판매자 센터 링크를 수락하는 방법
필요한 항목
- Google Ads 관리자 계정
- 판매자 센터 멀티 클라이언트 계정
- Java 7 이상
- Maven
- 샘플 코드
- 텍스트 편집기 (Eclipse 또는 IntelliJ와 같은 Maven 프로젝트를 이해하는 IDE 권장)
2. 설정
코드 다운로드
다음 링크를 클릭하면 이 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. 인증 설정
이 단계에서는 코드를 작성하지 않고 Google Ads API 및 Shopping용 Content API에 적절한 인증 토큰이 포함된 파일을 설정합니다.
Google Ads API authentication 설정
이 Codelab은 클라이언트 라이브러리와 동일한 사용자 인증 정보 로드를 사용하므로 관리자 계정으로 자바용 Google Ads API 클라이언트 라이브러리를 이미 사용한 경우 이미 설정되어 있어야 합니다. 그렇지 않은 경우 자바용 Google Ads API 클라이언트 라이브러리 시작하기의 1~3단계를 따르세요.
Content API authentication 설정
서비스 계정 키가 아직 없는 경우 다음 단계를 따르세요.
- 멀티 클라이언트 계정의 판매자 센터로 이동하고 더보기 메뉴에서 Content API를 선택합니다.

- 인증을 선택한 다음 파란색 + 버튼을 클릭합니다.

- Google Cloud Platform 및 Google API 서비스 약관에 동의하면 브라우저에서 새 서비스 계정 키가 포함된 JSON 파일을 자동으로 다운로드합니다.
이제 서비스 계정으로 Shopping 샘플의 인증을 설정하는 안내를 따르세요. 즉, 서비스 계정 키의 사본은 홈 디렉터리의 다음 경로에 있어야 합니다. 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 객체를 통해 원하는 옵션을 설정하는 방법을 보여줍니다.
Google Ads API 세션 객체 만들기
마찬가지로 AdWordsSession.Builder 객체를 빌드하기 위한 AdWordsSession 클래스가 있습니다. 여기서의 주요 차이점은 빌더에서 직접 구성 옵션을 설정하는 대신 fromFile() 메서드를 사용하여 이전 단계에서 설정한 ads.properties 파일에서 구성 옵션을 로드한다는 것입니다.
SolutionRunner.java
// TODO(sessions): Create a AdWordsSession object using AdWordsSession.Builder.
adWordsSession =
new AdWordsSession.Builder()
.fromFile()
.withOAuth2Credential(adwordsOAuth2Credential)
.build();
테스트
명령줄에서 실행하는 경우 이전 섹션과 동일한 명령어를 사용하여 Maven 프로젝트를 다시 빌드하고 실행합니다.
mvn compile
mvn exec:java -Dexec.mainClass="SolutionRunner"
이번에는 흥미로운 출력이 표시되지는 않지만 오류가 전혀 표시되지 않습니다. 새 계정을 만들고 연결하기 위해 API를 호출할 때 이를 추가합니다.
5. 새 관리 Google Ads 계정 만들기
이제 API 세션 객체를 만들었으므로 연결할 계정을 만들겠습니다. Google Ads부터 시작하여 관리자 계정에서 테스트 계정을 만듭니다.
ManagedCustomerService 액세스
Google Ads 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);
여기서는 지정된 관리자 계정에서 Google Ads "고객" (계정)을 관리할 수 있는 ManagedCustomerService에 액세스합니다.
새 계정 설정 지정
먼저 새 계정의 설정이 포함된 ManagedCustomer 객체를 만듭니다. 이 Codelab의 테스트 계정을 만들고 통화를 USD로, 시간대를 미국 서부 해안과 동일하게 설정합니다.
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 목록이 포함된 값입니다. 여기서는 고객 한 명, 즉 Google에서 만든 새 계정이 포함된 목록입니다. 향후 사용을 위해 새 계정의 ID를 가져오고 솔루션 출력의 일부로 볼 수 있도록 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"
모든 것이 제대로 진행되면 오류가 표시되지 않으며 이번에는 Google에서 만든 새 Google Ads 계정의 ID가 표시됩니다. 관리자 계정의 AdWords 사이트를 확인하면 새 계정이 나열되어 있습니다.
6. 새 판매자 센터 하위 계정 만들기
이 단계에서는 이전 단계에서 만든 Google Ads 계정에 연결할 판매자 센터 하위 계정을 만듭니다. 하위 계정을 만든 후 링크를 별도로 요청하는 대신 해당 Google Ads 계정의 ID가 이미 있으므로 생성 중에 링크를 요청할 수 있습니다.
새 하위 계정 설정 지정
Google Ads API와 달리 Account 모델 클래스의 setter는 객체를 반환하므로 새 Account 객체에서 setter에 대한 호출을 연결할 수 있습니다. 새 판매자 센터 계정의 이름에도 Google Ads 계정 생성 중에 생성한 임의의 숫자를 사용합니다.
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")));
이 단계의 소개에서 언급했듯이 새 관리 계정의 Google Ads ID가 이미 있으므로 이제 새 하위 계정의 AdwordsLinks 목록에 해당 ID를 추가할 수 있습니다. 새 하위 계정이 생성되면 이 링크가 자동으로 요청되고 Google Ads 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"
모든 것이 제대로 진행되면 오류가 표시되지 않으며 이번에는 새 Google Ads 계정과 새 판매자 센터 계정의 ID가 모두 표시됩니다. 멀티 클라이언트 계정의 판매자 센터에서 새 하위 계정을 확인하세요.
7. Google Ads 계정의 링크 수락
마지막 단계에서는 새 판매자 센터 하위 계정을 만들고 동시에 새 Google Ads 계정에 대한 링크를 요청했습니다. 이 단계에서는 Google Ads API를 사용하여 요청된 링크를 수락하여 프로세스를 완료합니다.
CustomerService 액세스
이전과 마찬가지로 AdWordsServices 클래스를 사용하여 CustomerService의 클라이언트를 가져옵니다. 하지만 클라이언트를 만들기 전에 먼저 Google Ads 세션 객체를 변경하여 향후 사용 시 관리자 계정 대신 새 관리 계정에서 작동하도록 합니다. 결국 판매자 센터 계정은 관리자 계정이 아닌 관리 계정에 대한 링크를 요청했습니다.
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);
요청된 링크 지정
새 Google Ads 계정을 만들 때와 마찬가지로 링크 설정이 포함된 ServiceLink 객체와 원하는 작업을 설명하는 ServiceLinkOperation 객체를 만듭니다. 여기서는 MERCHANT_CENTER 계정에 대한 대기 중인 서비스 링크를 가져와 ACTIVE로 SET하려고 합니다. serviceLinkId 설정의 경우 Google Ads의 서비스 링크 ID에 사용되므로 Google에서 방금 만든 판매자 센터 계정의 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을 완료하신 것을 축하드립니다. 이제 완전히 작동하는 솔루션이 있으므로 이 Codelab에서 본 API를 더 많이 사용하도록 솔루션을 수정하거나 확장하는 방법을 몇 가지 예로 살펴보겠습니다.
추가 과제: Google Ads 링크를 요청하도록 기존 판매자 센터 계정 업데이트
이 Codelab에서는 판매자 센터 계정을 만들 때 Google Ads 계정의 정보를 사용하여 링크를 요청할 수 있도록 먼저 Google Ads 계정을 만들었습니다. 하지만 판매자 센터 계정이 이미 있는 경우 대신 구성을 업데이트해야 합니다. 코드를 변경하여 먼저 판매자 센터 계정을 만든 다음 Google Ads 계정을 만든 후 다시 돌아가서 구성을 업데이트하여 링크를 요청해 보세요.
추가 과제: Google Ads 및 판매자 센터 계정 정보를 가져와 링크 생성 확인
현재 애플리케이션은 API 호출에서 오류가 없는 경우에만 성공으로 간주합니다. 예를 확장하여 새 판매자 센터 및 Google Ads 계정의 링크 정보를 확인하고 링크가 실제로 활성 상태인지 확인해 보세요.
무엇이든 가능합니다
다른 변경사항이 생각나면 시도해 보세요. 아이디어에 대한 참조 코드가 필요한 경우 Google Shopping 샘플과 examples 디렉터리에서 Google Ads 자바 클라이언트 라이브러리 소스를 확인하세요.