Hướng dẫn này dành cho các mạng quảng cáo đang tìm cách tạo bộ chuyển đổi dàn xếp. Nếu bạn là nhà xuất bản, hãy xem hướng dẫn dàn xếp dành cho nhà xuất bản.
Bộ chuyển đổi dàn xếp là lớp giao tiếp giữa mạng quảng cáo của bạn và tính năng
Dàn xếp quảng cáo trên thiết bị di động của Google. Bộ điều hợp phân phát quảng cáo từ mạng quảng cáo của bạn trong khi
chuyển tiếp các sự kiện quảng cáo có liên quan đến AdMob. Bộ chuyển đổi chịu trách nhiệm
triển khai giao thức GADMAdNetworkAdapter
để đảm bảo giao thức đó cung cấp
các tính năng cần thiết.
Điều kiện tiên quyết
- Xcode 15.3 trở lên
- Mục tiêu triển khai từ 8.0 trở lên
- Các tiêu đề bổ sung từ thư mục Bộ điều hợp dàn xếp của mục tải xuống SDK quảng cáo trên thiết bị di động của Google dành cho iOS
Mạng quảng cáo của bạn phải có mối quan hệ làm việc đã thiết lập với Google để tạo bộ chuyển đổi dàn xếp.
Mạng quảng cáo mẫu
Hướng dẫn này trình bày cách tạo bộ chuyển đổi cho Mạng quảng cáo mẫu. SDK mạng quảng cáo mẫu chứa các lớp đại diện cho các lớp được hầu hết các mạng quảng cáo cung cấp:
@interface SampleBanner : UILabel
@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleBannerAdDelegate> delegate;
- (void)fetchAd:(SampleAdRequest *)request;
@end
typedef NS_ENUM(NSInteger, SampleErrorCode) {
SampleErrorCodeBadRequest = 0,
SampleErrorCodeUnknown = 1,
SampleErrorCodeNetworkError = 2,
SampleErrorCodeNoInventory = 3,
};
@interface SampleAdRequest : NSObject
@property(nonatomic, assign) BOOL testMode;
@property(nonatomic, copy) NSArray *keywords;
@end
@interface SampleInterstitial : NSObject
@property(nonatomic, copy) NSString *adUnit;
@property(nonatomic, weak) id<SampleInterstitialAdDelegate> delegate;
@property(nonatomic, assign, getter=isInterstitialLoaded) BOOL interstitialLoaded;
- (void)fetchAd:(SampleAdRequest *)request;
- (void)show;
@end
@protocol SampleBannerAdDelegate
- (void)bannerDidLoad:(SampleBanner *)banner;
- (void)banner:(SampleBanner *)banner didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)bannerWillLeaveApplication:(SampleBanner *)banner;
@end
@protocol SampleInterstitialAdDelegate<NSObject>
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial;
- (void)interstitial:(SampleInterstitial *)interstitial
didFailToLoadAdWithError:(SampleErrorCode)error;
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial;
- (void)interstitialWillLeaveApplication:(SampleInterstitial *)interstitial;
@end
Xem quy trình triển khai SDK mẫu hoàn chỉnh để biết thêm thông tin về các lớp này.
Trình kết nối
Bộ chuyển đổi dàn xếp tương tác với SDK quảng cáo trên thiết bị di động của Google bằng cách sử dụng một đối tượng
sẽ triển khai giao thức GADMAdNetworkConnector
. Từ đây trở đi, chúng tôi sẽ gọi đối tượng này
là trình kết nối. Trình kết nối hiển thị thông tin cần thiết cho các yêu cầu quảng cáo, đồng thời cung cấp một phương thức để gọi lại tính năng dàn xếp cho các sự kiện quảng cáo và hoạt động tương tác của người dùng. Trình kết nối được cung cấp cho bộ chuyển đổi dàn xếp tại thời điểm khởi chạy. Thiết lập bộ chuyển đổi để lưu trữ trình kết nối trong một biến mẫu:
- (id)initWithGADMAdNetworkConnector:(id<GADMAdNetworkConnector>)c {
if ((self = [super init])) {
_connector = c;
}
return self;
}
Tham số máy chủ
Mạng quảng cáo của bạn có thể cần(các) giá trị nhận dạng để xác định một nhà xuất bản. Ví dụ: Mạng quảng cáo
mẫu yêu cầu một đơn vị quảng cáo. Các thông số máy chủ bắt buộc này
được cung cấp cho bộ chuyển đổi thông qua phương thức credentials
. Phương thức này sẽ trả về
NSDictionary
gồm(các) giá trị nhận dạng và các giá trị tương ứng. Dòng mã sau đây truy xuất thông số máy chủ có tên là ad_unit
cho Mạng quảng cáo mẫu từ trình kết nối:
self.interstitialAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];
Thiết lập mạng dàn xếp
Mạng quảng cáo phải thông báo cho AdMob về các thông số máy chủ bắt buộc cho mạng của chúng. Điều này cho phép AdMob định cấu hình mạng của bạn trong giao diện người dùng.
Khi bật mạng cho tính năng dàn xếp trong giao diện người dùng, AdMob yêu cầu bạn nhập các giá trị cần thiết để tạo thực thể cho bộ chuyển đổi. Ảnh chụp màn hình dưới đây cho thấy rằng bắt buộc phải có Giá trị nhận dạng vị trí ứng dụng (APID) cho Millennial Media và bắt buộc phải có ID ứng dụng cho NavHost.
Hãy xem bài viết này để biết thêm thông tin về cách định cấu hình mạng quảng cáo dàn xếp.
Tạo yêu cầu quảng cáo trong quy trình dàn xếp
Yêu cầu quảng cáo biểu ngữ
Đối với các yêu cầu biểu ngữ dàn xếp, phương thức getBannerWithSize
được gọi
ngay sau khi bộ chuyển đổi được tạo thực thể. Phương thức này không trả về bất kỳ giá trị nào. Phương thức này sẽ báo hiệu cho bộ chuyển đổi để bắt đầu tìm nạp quảng cáo không đồng bộ trên mạng. Yêu cầu bộ chuyển đổi theo dõi các lệnh gọi lại cho SDK của bạn. Nếu SDK của bạn không
hỗ trợ kích thước quảng cáo nhất định hoặc không hỗ trợ quảng cáo biểu ngữ, hãy gọi phương thức
adapter:didFailAd:
trên trình kết nối.
Hoạt động triển khai getBannerWithSize
cho Mạng quảng cáo mẫu
sẽ có dạng như sau:
- (void)getBannerWithSize:(GADAdSize)adSize {
//The adapter should fail immediately if the adSize is not supported
if (!GADAdSizeEqualToSize(adSize, GADAdSizeBanner) &&
!GADAdSizeEqualToSize(adSize, GADAdSizeMediumRectangle) &&
!GADAdSizeEqualToSize(adSize, GADAdSizeFullBanner) &&
!GADAdSizeEqualToSize(adSize, GADAdSizeLeaderboard)) {
NSString *errorDesc =
[NSString stringWithFormat:@"Invalid ad type %@, not going to get ad.",
NSStringFromGADAdSize(adSize)];
NSDictionary *errorInfo = [NSDictionary
dictionaryWithObjectsAndKeys:errorDesc, NSLocalizedDescriptionKey, nil];
NSError *error = [NSError errorWithDomain:GADErrorDomain
code:GADErrorMediationInvalidAdSize
userInfo:errorInfo];
[self.connector adapter:self didFailAd:error];
return;
}
self.bannerAd = [[SampleBanner alloc]
initWithFrame:CGRectMake(0, 0, adSize.size.width, adSize.size.height)];
self.bannerAd.delegate = self;
self.bannerAd.adUnit = [[self.connector credentials] objectForKey:@"ad_unit"];
// Setup request parameters.
SampleAdRequest *request = [[SampleAdRequest alloc] init];
request.testMode = self.connector.testMode;
request.keywords = self.connector.userKeywords;
[self.bannerAd fetchAd:request];
NSLog(@"Requesting banner from Sample Ad Network");
}
Thông số nhắm mục tiêu bổ sung
Trình kết nối chứa một số thông tin nhắm mục tiêu phổ biến mà bạn có thể tham khảo để nhắm mục tiêu quảng cáo:
userKeywords
testMode
childDirectedTreatment
Phần phụ dàn xếp
Phần phụ dàn xếp cho phép mạng quảng cáo của bạn hỗ trợ các mục nhập hoặc thông số nhắm mục tiêu phụ không được bao gồm bởi các thông số yêu cầu bổ sung do trình kết nối cung cấp. Chức năng này có thể được cung cấp thông qua một lớp triển khai giao thức GADAdNetworkExtras
. Dưới đây là ví dụ về lớp SampleAdNetworkExtras
:
@interface SampleAdNetworkExtras : NSObject <GADAdNetworkExtras>
/// Should ad volume audio be muted.
@property(nonatomic, assign) BOOL muteAudio;
@end
Nhà xuất bản phải chuyển một bản sao của lớp con GADAdNetworkExtras
khi
đưa ra yêu cầu quảng cáo. Bạn có thể truy cập vào thực thể lớp con này của GADAdNetworkExtras
thông qua trình kết nối. Dưới đây là cách bạn có thể sử dụng phần phụ dàn xếp khi
tạo yêu cầu quảng cáo cho mạng của mình:
SampleAdRequest *request = [[SampleAdRequest alloc] init];
SampleAdNetworkExtras *myAdNetworkExtras = [self.connector networkExtras];
request.muteAudio = myAdNetworkExtras.muteAudio;
[self.bannerAd fetchAd:request];
Để đảm bảo có thể truy cập lớp con GADAdNetworkExtras
thông qua trình kết nối, hãy triển khai networkExtrasClass
và trả về lớp con GADAdNetworkExtras
:
+ (Class<GADAdNetworkExtras>)networkExtrasClass {
return [SampleAdNetworkExtras class];
}
Nếu bộ chuyển đổi của bạn không sử dụng phần phụ dàn xếp, phương thức networkExtrasClass
sẽ trả về Nil
.
Thông báo cho tính năng dàn xếp
Yêu cầu bộ chuyển đổi triển khai trình nghe quảng cáo cho mạng của bạn và chuyển tiếp các lệnh gọi lại sự kiện quảng cáo có liên quan thông qua trình kết nối. Bảng dưới đây giải thích thời điểm nên gọi từng phương thức đại biểu:
Phương thức | Thời gian gọi |
---|---|
adapter:didReceiveAdView: |
Đã yêu cầu quảng cáo biểu ngữ thành công. |
adapter:didFailAd: |
Yêu cầu quảng cáo biểu ngữ không thành công. |
adapterDidGetAdClick: |
Đã nhấp vào biểu ngữ. |
adapterWillPresentFullScreenModal: |
Quảng cáo biểu ngữ sẽ hiển thị một lớp phủ trong ứng dụng. |
adapterWillDismissFullScreenModal: |
Lớp phủ trong ứng dụng sẽ đóng. |
adapterDidDismissFullScreenModal: |
Đã đóng lớp phủ trong ứng dụng. |
adapterWillLeaveApplication: |
Ứng dụng sẽ được đặt ở chế độ nền hoặc chấm dứt vì người dùng đã nhấp vào một quảng cáo sẽ khởi chạy một ứng dụng khác. |
Ví dụ sau sẽ triển khai giao diện SampleBannerAdDelegate
từ
Mạng quảng cáo mẫu để chuyển tiếp các thông báo lỗi và trạng thái:
- (void)bannerDidLoad:(SampleBanner *)banner {
[self.connector adapter:self didReceiveAdView:banner];
}
- (void)banner:(SampleBanner *)banner didFailWithError:(SampleErrorCode)error {
[self.connector adapter:self
didFailAd:[NSError errorWithDomain:@"Ad request failed"
code:error
userInfo:nil]];
}
- (void)bannerWillLeaveApplication:(SampleBanner *)banner {
[self.connector adapterDidGetAdClick:self];
[self.connector adapterWillLeaveApplication:self];
}
Khởi chạy lớp phủ trong ứng dụng so với ứng dụng bên ngoài
Khi người dùng nhấp vào một biểu ngữ, quảng cáo có thể mở lớp phủ toàn màn hình hoặc một ứng dụng bên ngoài (chẳng hạn như Safari hoặc cửa hàng ứng dụng). Các lệnh gọi lại của trình kết nối để gọi trong 2 trường hợp này là khác nhau.
Nếu lượt nhấp vào biểu ngữ mở ra lớp phủ toàn màn hình, hãy gọi
adapterWillPresentFullScreenModal:
khi trình bày lớp phủ đó. Khi lớp phủ đóng, hãy gọi cả adapterWillDismissFullScreenModal:
và adapterDidDismissFullScreenModal:
.
Nếu lượt nhấp vào quảng cáo biểu ngữ (hoặc lượt nhấp vào lớp phủ toàn màn hình) khiến người dùng rời khỏi
ứng dụng, hãy thực hiện lệnh gọi lại adapterWillLeaveApplication:
.
Bây giờ, bạn đã có một bộ chuyển đổi dàn xếp đang hoạt động cho quảng cáo biểu ngữ. Để tham khảo, bạn có thể xem
hoạt động triển khai đầy đủ của SampleAdapter
trên
GitHub.
Triển khai bộ chuyển đổi quảng cáo xen kẽ
Việc triển khai bộ chuyển đổi cho quảng cáo xen kẽ tương tự như quảng cáo biểu ngữ. Phương thức
getInterstitial
được gọi ngay sau khi bộ chuyển đổi
được tạo. Phương thức này không trả về bất cứ giá trị nào. Bộ chuyển đổi dự kiến sẽ bắt đầu
tìm nạp quảng cáo không đồng bộ trên mạng. Hãy làm cho bộ chuyển đổi hoạt động như một uỷ quyền cho SDK để theo dõi các lệnh gọi lại. Nếu SDK của bạn không hỗ trợ
quảng cáo xen kẽ, hãy gọi phương thức adapter:didFailAd:
của trình kết nối như sau:
- (void)getInterstitial {
self.interstitialAd = [[SampleInterstitial alloc] init];
self.interstitialAd.delegate = self;
self.interstitialAd.adUnit =
[[self.connector credentials] objectForKey:@"ad_unit"];
SampleAdRequest *request = [[SampleAdRequest alloc] init];
// Setup request parameters.
request.testMode = self.connector.testMode;
request.keywords = self.connector.userKeywords;
[self.interstitialAd fetchAd:request];
NSLog(@"Requesting interstitial from Sample Ad Network");
}
Giống như với MediationBannerAdapter
, bạn có thể nhận mã nhận dạng nhà xuất bản
và thông tin nhắm mục tiêu quảng cáo từ trình kết nối.
Thông báo cho tính năng dàn xếp
Yêu cầu bộ chuyển đổi triển khai đại biểu quảng cáo cho mạng của bạn và chuyển tiếp các lệnh gọi lại sự kiện quảng cáo có liên quan thông qua trình kết nối. Bảng dưới đây giải thích thời điểm nên gọi từng phương thức uỷ quyền:
Phương thức | Thời gian gọi |
---|---|
adapterDidReceiveInterstitial: |
Yêu cầu quảng cáo xen kẽ thành công. |
adapter:didFailInterstitial: |
Yêu cầu quảng cáo xen kẽ không thành công. |
adapterDidGetAdClick: |
Đã nhấp vào quảng cáo xen kẽ. |
adapterWillPresentInterstitial: |
Quảng cáo xen kẽ sẽ được hiển thị. |
adapterWillDismissInterstitial: |
Quảng cáo xen kẽ sẽ bị loại bỏ. |
adapterDidDismissInterstitial: |
Quảng cáo xen kẽ đã bị loại bỏ. |
adapterWillLeaveApplication: |
Ứng dụng sẽ chạy ở chế độ nền hoặc chấm dứt vì người dùng đã nhấp vào một quảng cáo sẽ khởi chạy một ứng dụng khác. |
Ví dụ sau sẽ triển khai giao diện SampleInterstitialAdDelegate
của
Mạng quảng cáo mẫu để chuyển tiếp các thông báo lỗi và trạng thái:
- (void)interstitialDidLoad:(SampleInterstitial *)interstitial {
[self.connector adapterDidReceiveInterstitial:self];
}
- (void)interstitial:(SampleInterstitial *)interstitial
didFailWithError:(SampleErrorCode)error {
[self.connector adapter:self
didFailInterstitial:[NSError errorWithDomain:@"Ad request failed"
code:error
userInfo:nil]];
}
- (void)interstitialWillPresentScreen:(SampleInterstitial *)interstitial {
[self.connector adapterWillPresentInterstitial:self];
}
- (void)interstitialWillDismissScreen:(SampleInterstitial *)interstitial {
[self.connector adapterWillDismissInterstitial:self];
}
- (void)interstitialDidDismissScreen:(SampleInterstitial *)interstitial {
[self.connector adapterDidDismissInterstitial:self];
}
Hiển thị quảng cáo xen kẽ
Sau khi bộ chuyển đổi gọi adapterDidReceiveInterstitial
, hãy đợi hiển thị
quảng cáo xen kẽ cho đến khi presentInterstitialFromRootViewController
được gọi. Nhà phát triển
ứng dụng sẽ quyết định thời điểm hiển thị quảng cáo xen kẽ, có thể là vài
phút sau khi nhận được.
Dưới đây là hoạt động triển khai presentInterstitialFromRootViewController:
cho Mạng quảng cáo mẫu:
- (void)presentInterstitialFromRootViewController:
(UIViewController *)rootViewController {
if ([self.interstitialAd isLoaded]) {
[self.interstitialAd show];
}
}
Bộ chuyển đổi dàn xếp của bạn đã sẵn sàng để xử lý quảng cáo xen kẽ. Để tham khảo, bạn có thể xem
hoạt động triển khai đầy đủ của SampleAdapter
trên
GitHub.
Câu hỏi thường gặp
- Tôi nên đưa bộ chuyển đổi vào như một phần của thư viện SDK hay dưới dạng một thư viện riêng?
- Bạn nên đưa bộ chuyển đổi vào thư viện SDK để nhà phát triển chỉ cần tham chiếu một thư viện để kết hợp mạng của bạn.
- Tôi phải làm gì nếu bộ chuyển đổi của tôi chỉ hỗ trợ quảng cáo biểu ngữ?
Nếu bộ chuyển đổi của bạn chỉ hỗ trợ quảng cáo biểu ngữ, hãy chuyển tiếp một sự kiện lỗi đến hoạt động dàn xếp cho các yêu cầu quảng cáo xen kẽ:
- (void)getInterstitial { NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" }; NSError *error = [NSError errorWithDomain:GADErrorDomain code:GADErrorInvalidRequest userInfo:errorInfo]; [self.connector adapter:self didFailInterstitial:error]; return; }
- Tôi phải làm gì nếu bộ chuyển đổi của tôi chỉ hỗ trợ quảng cáo xen kẽ?
Nếu bộ chuyển đổi của bạn chỉ hỗ trợ quảng cáo xen kẽ, hãy chuyển tiếp sự kiện lỗi đến nền tảng dàn xếp cho các yêu cầu quảng cáo biểu ngữ:
- (void)getBannerWithSize:(GADAdSize)adSize { NSDictionary *errorInfo = @{ NSLocalizedDescriptionKey : @"Some error" }; NSError *error = [NSError errorWithDomain:GADErrorDomain code:GADErrorInvalidRequest userInfo:errorInfo]; [self.connector adapter:self didFailAd:error]; return; }