Google 모바일 광고 SDK는 검색 광고 맞춤 스타일도 지원합니다. 앱이 에서 이미 Google 모바일 광고 SDK를 사용 중인 경우 AFSMA SDK 버전 하세요.
18.1.0 이하에서 버전 19.0.0 이상으로 업그레이드하는 경우 이전 가이드를 참고하세요.
기본 요건
이 구현 가이드에서는 다음 사항에 익숙하다고 가정합니다.
- 애드센스 맞춤 검색 광고 검색 광고 맞춤 스타일 사용
- Android 앱 개발
AFS 네이티브 SDK 가져오기
SDK 추가
앱에 AFS 네이티브 SDK를 추가하는 방법은 다음과 같습니다.
애플리케이션 모듈 디렉터리 내에서 build.gradle
파일을 엽니다.
최신 버전의 SDK를 위해 dependencies
에 새 빌드 규칙을 추가합니다.
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
최상위 수준 build.gradle
에 google()
참조가 포함되어 있는지 확인합니다.
저장소 또는 maven { url "https://maven.google.com" }
에 복사합니다.
이 안내를 따르세요.
를 사용하여 프로젝트에 Google Play 독립형 버전 일치자 플러그인을 포함합니다.
이 플러그인을 적용하면 AFS Native SDK가
Google Play 서비스의 호환되지 않는 버전과 함께 사용하도록 허용하는 대신
런타임 비정상 종료를 일으킬 수 있습니다. 또는
failOnVersionConflict()
ResolutionStrategy
를 프로젝트에 추가하여 호환되지 않는 버전의 Google Play에서 빌드 오류를 일으킵니다.
서비스는 프로젝트에서 사용됩니다.
변경사항을 저장하고 Sync Project with Gradle Files를 클릭하여
있습니다.
Android 지원 라이브러리 대신 AndroidX 사용
SDK 버전 17.0.0
부터 앱에서 Jetpack (AndroidX)을 사용해야 합니다.
Android 지원 라이브러리 대신 라이브러리 호환성 요구사항:
com.android.tools.build:gradle
를 v3.2.1 이상으로 설정합니다.compileSdkVersion
를 28 이상으로 설정합니다.- Jetpack (AndroidX)을 사용하도록 앱을 업데이트합니다. 다음 페이지의 안내를 따르세요. AndroidX로 이전
클래스
앱에 AFS 네이티브 광고를 게재하려면 다음 클래스를 구현하세요.
- 이 클래스는 비동기식으로 광고 요청, 캐싱 및 광고를 검색하고 렌더링합니다.
- 각 광고 컨텍스트에는 별도의
SearchAdController
가 필요합니다. 예를 들어 검색결과 목록과 함께 광고를 보여주는 화면과 광고가 특정 제품의 세부정보 옆에 게재되는 경우 각 케이스에 하나씩 개별SearchAdController
인스턴스 두 개를 만듭니다. - 생성자는 웹 속성 코드 (게시자 ID)를 제공해야 합니다.
적용할 스타일 ID
반환된 광고 및
SearchAdOptions
입니다. 생성자에 제공된Context
SearchAdController
가 포함된Activity
여야 하며View
광고가 게재됩니다. loadAds
를 호출하여 신규 사용자 검색을 나타내고 비동기 광고를 시작합니다. 요청을 수행합니다.loadAds
에 대한 이전 호출에서 로드된 모든 광고가 다음에서 삭제됩니다. 내부 광고 캐시에 저장됩니다.createAdView
로View
를 만들어 광고 소재를 표시합니다.- 광고가 로드되면 이전에 생성된
View
를 사용하여populateAdView
를 호출합니다.createAdView
를 사용하여 캐시된 광고를 해당View
에 렌더링합니다. 'API 약관'의 채워질View
는adKey
를 제공합니다. 광고를 고유하게 식별할 수 있습니다. 이렇게 하면 해당adKey
가 있는 캐시, 따라서 동일한adKey
가 향후 호출에 전달될 때populateAdView
로 변경하면 동일한 광고가 반환됩니다. 예를 들어populateAdView
가adKey="keyA"
로 처음 호출되고 하이킹 부츠에 대한 광고, 이후populateAdView
에 호출될 때마다adKey="keyA"
은 하이킹 부츠에 대해 동일한 광고를 채웁니다. (loadAds
는 캐시된 광고 및 연결된 광고 키를 모두 지웁니다.)
- 이 객체를
SearchAdController
생성자에 전달하여 광고 게재 방식 맞춤설정 요청 및 표시됩니다SearchAdOptions.Builder
에서build()
를 호출하여 다음을 수행합니다.SearchAdOptions
객체를 만듭니다.
View
createAdView()
를 호출하여 광고를 보류할View
객체를 만듭니다.SearchAdController
입니다. 한 번에 최대 하나의 광고를 표시하지만 동일한View
가 표시할 수 있습니다. 시간이 지남에 따라 다른 광고를 표시하기 위해 재활용할 수 있습니다.
SearchAdRequest
를 사용하여SearchAdController
에서loadAds
메서드 호출 비동기 광고 요청을 시작할 수 있습니다 다음 번호에서build()
에 전화:SearchAdRequest.Builder
:SearchAdRequest
객체를 만듭니다.
- 이 인터페이스를 구현하여
SearchAdController
생성자에 전달 여러 상태에 대한 콜백을 등록할 수 있습니다. - 참고:
AdListener
콜백은 취소된 요청( 첫 번째 호출 이전에loadAds
호출로 선점된loadAds
에게 통화를 종료함).
구현 예
아래 예는 샘플에서 SearchAdController
를 만드는 방법을 보여줍니다.
Activity
입니다.
// MainActivity.java implementation
// (MainActivity is a subclass of Activity)
SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;
protected void onCreate(Bundle bundle){
super.onCreate(bundle);
adContainer = (ViewGroup) findViewById(...);
// Specify ad options (not required).
SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
adOptionsBuilder.setPrefetch(true);
adOptionsBuilder.setNumAdsRequested(3);
// Provide a callback to trigger when ads are loaded.
AdListener adListener = new AdListener() {
public void onAdLoaded() {
createAndShowAd();
}
};
// Instantiate the SearchAdController.
adController = new SearchAdController(this, "your-client-id", "your-style-id",
adOptionsBuilder.build(), adListener);
}
사용자가 쿼리를 시작하면 SearchAdRequest
를 만들고 loadAds
를 호출합니다.
SearchAdController
를 호출하여 비동기 광고 요청을 시작합니다.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
onAdLoaded
콜백을 구현하여 로드된 광고를 광고 보기에 채웁니다.
private void createAndShowAd() {
// Create a new view that will contain the ad.
View adView = adController.createAdView();
// Attach the new view to the view hierarchy.
adContainer.addView(adView);
// Display the ad inside the adView. We need to provide an adKey to
// indicate which ad is to be displayed in the adView. In this example,
// since we only have one ad, we can provide any constant string. However,
// if you intend to display multiple ads, each ad you wish to display
// should be given a unique adKey of your choosing.
adController.populateAdView(adView, "demoAd");
}
이제 지정된 검색어와 관련된 광고가 adView
에 표시됩니다.
오류 조사
SearchAdController
에는 onAdLoaded()
가 있는 AdListener
객체가 필요합니다.
메서드를 사용하여 광고를 표시할 준비가 되었음을 앱에 알릴 수 있습니다. 또한
onAdFailedToLoad()
메서드를 구현하여 오류를 감지하고 수정할 수 있습니다.
예를 들어 다음 AdListener
를 사용하여
구현:
AdListener adListener = new AdListener() {
public void onAdLoaded() {
// Called when an ad is loaded.
Toast.makeText(MainActivity.this, "Ad Loaded",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
}
public void onAdLeftApplication() {
// Called when an ad leaves the application
// (to go to the browser for example).
Toast.makeText(MainActivity.this, "Ad Left Application",
Toast.LENGTH_SHORT).show();
Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
}
@Override
public void onAdFailedToLoad(int errorCode) {
// Called when an ad request failed.
Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
Toast.LENGTH_SHORT).show();
Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
errorCode);
}
};
onAdFailedToLoad()
콜백 메서드에 사용되는 상수
AdListener에 정의되어 있습니다.