SDK quảng cáo trên thiết bị di động của Google cũng hỗ trợ các kiểu quảng cáo đi kèm kết quả tìm kiếm tùy chỉnh. Nếu ứng dụng của bạn đã sử dụng SDK Quảng cáo của Google trên thiết bị di động, bạn nên sử dụng phiên bản AFSMA SDK.
Nếu bạn đang nâng cấp từ phiên bản 18.1.0 trở xuống lên phiên bản 19.0.0 trở xuống, vui lòng xem hướng dẫn di chuyển của chúng tôi.
Điều kiện tiên quyết
Hướng dẫn triển khai này giả định bạn đã quen thuộc với những điều sau:
- Quảng cáo đi kèm kết quả tìm kiếm tùy chỉnh AdSense với kiểu tìm kiếm tùy chỉnh
- Phát triển ứng dụng Android
Nhập SDK gốc AFS
Thêm SDK
Để thêm SDK gốc của AFS vào ứng dụng của bạn, hãy làm như sau:
Mở tệp build.gradle
bên trong thư mục mô-đun ứng dụng của bạn.
Thêm quy tắc bản dựng mới trong dependencies
cho phiên bản SDK mới nhất:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Đảm bảo rằng build.gradle
cấp cao nhất chứa tham chiếu đến kho lưu trữ google()
hoặc maven { url "https://maven.google.com" }
.
Hãy làm theo các hướng dẫn này để đưa Trình bổ trợ Trình so khớp phiên bản độc lập của Google Play vào dự án của bạn.
Việc áp dụng trình bổ trợ này sẽ gây ra lỗi bản dựng gradle khi SDK gốc AFS được sử dụng với một phiên bản không tương thích của Dịch vụ Google Play thay vì cho phép ứng dụng tạo nhưng có thể gây ra sự cố trong thời gian chạy. Hoặc áp dụng failOnVersionConflict()
ResolutionStrategy cho dự án của bạn để gây ra lỗi bản dựng khi sử dụng các phiên bản không tương thích của Dịch vụ Google Play trong dự án.
Lưu các thay đổi và nhấp vào Sync Project with Gradle Files (Đồng bộ hoá dự án với tệp Gradle) trên thanh công cụ.
Sử dụng AndroidX thay vì Thư viện hỗ trợ Android
Kể từ phiên bản 17.0.0
của SDK, ứng dụng phải sử dụng Thư viện Jetpack (AndroidX) thay vì Thư viện hỗ trợ Android. Yêu cầu về khả năng tương thích:
- Thiết lập
com.android.tools.build:gradle
thành phiên bản 3.2.1 trở lên. - Đặt
compileSdkVersion
thành 28 trở lên. - Cập nhật ứng dụng để sử dụng Jetpack (AndroidX); làm theo hướng dẫn trong bài viết Di chuyển sang AndroidX.
Lớp
Để phân phát quảng cáo gốc AFS trong ứng dụng của bạn, hãy triển khai các lớp sau:
- Lớp này chịu trách nhiệm yêu cầu quảng cáo một cách không đồng bộ, lưu vào bộ nhớ đệm và truy xuất quảng cáo cũng như hiển thị quảng cáo.
- Mỗi ngữ cảnh quảng cáo cần một
SearchAdController
riêng biệt; ví dụ: nếu bạn có một màn hình hiển thị quảng cáo cùng với danh sách kết quả tìm kiếm và một màn hình khác hiển thị quảng cáo cùng với thông tin chi tiết về một sản phẩm cụ thể, bạn nên tạo hai phiên bảnSearchAdController
riêng biệt, mỗi màn hình cho một trường hợp. - Hàm khởi tạo cần được cung cấp mã thuộc tính web (mã nhà xuất bản), mã nhận dạng kiểu để áp dụng cho các quảng cáo trả về và
SearchAdOptions
.Context
được cung cấp trong hàm khởi tạo phải làActivity
chứaSearchAdController
và là nơi bạn sẽ đặt quảng cáoView
. - Gọi
loadAds
để cho biết hoạt động tìm kiếm mới của người dùng và bắt đầu một yêu cầu quảng cáo không đồng bộ. Mọi quảng cáo đã tải từ các lệnh gọi trước đó đếnloadAds
sẽ bị xoá khỏi bộ nhớ đệm quảng cáo nội bộ khi thực hiện lệnh gọi mới. - Tạo
View
bằngcreateAdView
để hiển thị mẫu quảng cáo. - Sau khi quảng cáo tải xong, hãy gọi
populateAdView
bằngView
được tạo trước đó bằngcreateAdView
để hiển thị quảng cáo được lưu vào bộ nhớ đệm vàoView
đó. NgoàiView
sẽ được điền sẵn, hãy cung cấp mộtadKey
. Đây là một chuỗi tuỳ ý để xác định duy nhất quảng cáo. Thao tác này liên kết mẫu quảng cáo cụ thể được trả về từ bộ nhớ đệm vớiadKey
đó, vì vậy, khi cùng mộtadKey
được chuyển đến lệnh gọi trong tương lai đếnpopulateAdView
, quảng cáo đó sẽ được trả về. Ví dụ: nếupopulateAdView
được gọi lần đầu tiên bằngadKey="keyA"
và hiển thị một quảng cáo cho giày đi bộ đường dài, thì mỗi lệnh gọi tiếp theo đếnpopulateAdView
cóadKey="keyA"
sẽ điền cùng một quảng cáo cho giày đi bộ đường dài. (Việc thực hiện lệnh gọi mới đếnloadAds
sẽ xoá tất cả quảng cáo được lưu vào bộ nhớ đệm và khoá quảng cáo được liên kết.)
- Truyền đối tượng này đến hàm khởi tạo
SearchAdController
để tuỳ chỉnh cách yêu cầu và hiển thị quảng cáo. Gọibuild()
trênSearchAdOptions.Builder
để tạo đối tượngSearchAdOptions
.
View
- Tạo đối tượng
View
để giữ quảng cáo bằng cách gọicreateAdView()
trênSearchAdController
. Hiển thị tối đa một quảng cáo tại một thời điểm, nhưng cùng mộtView
có thể được sử dụng lại để hiển thị các quảng cáo khác nhau theo thời gian.
- Hãy gọi phương thức
loadAds
trênSearchAdController
bằngSearchAdRequest
để bắt đầu một yêu cầu quảng cáo không đồng bộ. Gọibuild()
trênSearchAdRequest.Builder
để tạo đối tượngSearchAdRequest
.
- Hãy triển khai và truyền giao diện này đến hàm khởi tạo
SearchAdController
để đăng ký lệnh gọi lại cho một số trạng thái. - Lưu ý: Các lệnh gọi lại
AdListener
sẽ không được gọi trên yêu cầu đã huỷ (lệnh gọi đếnloadAds
bị giành trước bởi một lệnh gọi khác đếnloadAds
trước khi lệnh gọi đầu tiên được giải quyết).
Cách triển khai mẫu
Ví dụ bên dưới minh hoạ việc tạo SearchAdController
trong một Activity
mẫu.
// 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);
}
Khi người dùng bắt đầu một truy vấn, hãy tạo SearchAdRequest
và gọi loadAds
trên SearchAdController
để bắt đầu một yêu cầu quảng cáo không đồng bộ.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Triển khai lệnh gọi lại onAdLoaded
để điền quảng cáo được tải vào chế độ xem quảng cáo.
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");
}
Giờ đây, một quảng cáo liên quan đến cụm từ tìm kiếm đã cho sẽ xuất hiện trong adView
.
Điều tra lỗi
SearchAdController
yêu cầu đối tượng AdListener
có phương thức onAdLoaded()
để thông báo cho ứng dụng của bạn rằng quảng cáo đã sẵn sàng hiển thị. Bạn cũng nên triển khai phương thức onAdFailedToLoad()
để có thể phát hiện và sửa lỗi.
Ví dụ: bạn có thể sử dụng AdListener
sau để gỡ lỗi cho phương thức triển khai:
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);
}
};
Các hằng số dùng trong phương thức gọi lại onAdFailedToLoad()
được xác định trong AdListener.