伺服器對伺服器:iOS 用戶端設定指南

內部中介服務尚未對公眾開放使用

Audience Network 的內部出價功能目前為不公開測試版,尚未對公眾開放使用。如有任何變更,我們將會公佈最新消息。

您可以考慮改為透過與我們合作的其中一個中介服務平台使用 Audience Network 出價功能。

本指南將為您講解如何建立 iOS 用戶端應用程式。在以下指南的詳細步驟中,我們將會使用在插頁廣告中向您的競投伺服器傳送競投要求的範例。請確保您已熟悉 Audience Network 插頁廣告的使用方法。出價功能亦支援原生廣告、橫額廣告、插頁廣告、插播影片和獎勵式影片廣告格式。使用廣告格式(插頁廣告除外)時,您可以變更伺服器設定

必要條件

iOS 用戶端設定步驟

第 1 步:從 iOS 用戶端作出競投要求

第 2 步:從 iOS 用戶端的出價回應載入廣告

iOS 用戶端設定步驟

第 1 步:從 iOS 用戶端作出競投要求

我們需要在用戶端收集競投要求的所需參數,然後使用 HTTP 要求將競投要求傳送至競投伺服器。以下執行範例將示範如何在 iOS 使用上述格式作出競投要求:

- (NSMutableURLRequest *)getRequest {

NSURL *url = [NSURL URLWithString:@"${AUCTION_SERVER_ENDPOINT}"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSDictionary *buyerToken = @{@"audience_network": [FBAdSettings bidderToken]};
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
NSString *bundleVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleVersion"];
NSString *idfa = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
int32_t dnt = [[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled] ? 0 : 1;
NSDictionary *bodyDict = @{@"app_id": @"101",
@"placement_id": @"1",
@"bundle": bundleIdentifier,
@"bundle_version": bundleVersion,
@"ifa": idfa,
@"coppa": @0,
@"dnt": [NSNumber numberWithInt:dnt],
@"buyer_tokens": buyerToken,
@"test": @1};
NSData *bodyData = [NSJSONSerialization dataWithJSONObject:bodyDict options:0 error:nil];
[request setHTTPBody:bodyData];
[request setHTTPMethod:@"POST"];
return request;
}

此為靜態函數的程式碼片段範例,此函數可向伺服器傳送競投要求,並使用伺服器回應觸發回呼方法:

NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithRequest: self.getRequest
completionHandler:^(NSData *data,
NSURLResponse *response,
NSError *error) {
if (!error) {
NSMutableDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
if (json) {
self.placementId = json[@"placement_id"];
self.adFormat = json[@"ad_format"];
self.platformName = json[@"platform_name"];
self.platformPlacementId = json[@"platform_placement_id"];
self.payload = json[@"bid_payload"];
dispatch_async(dispatch_get_main_queue(), ^{
self.statusLabel.text = @"Ad is available";
});
} else {
NSLog(@"Requesting Error: unknow error.");
dispatch_async(dispatch_get_main_queue(), ^{
self.statusLabel.text = @"Ad is NOT available";
});
}
} else {
NSLog(@"Requesting Error: %@", error.localizedDescription);
self.placementId = nil;
self.adFormat = nil;
self.platformName = nil;
self.platformPlacementId = nil;
self.payload = nil;
dispatch_async(dispatch_get_main_queue(), ^{
self.statusLabel.text = @"Ad is NOT available";
});
}
}] resume];

第 2 步:從 iOS 用戶端的出價回應載入廣告

透過在用戶端應用程式使用回應參數,我們可以判斷哪個平台贏得了競投,並載入廣告。如果競投成功,而且 Audience Network 贏得了競投,則回應參數會包含一個我們可以從中載入廣告的裝載字串。我們可以在正確的廣告格式類別中呼叫 loadAdWithBidPayload 方法以載入廣告。以下是我們採用的競投要求回呼方法:

- (IBAction)didShow:(UIButton *)sender {

if ([self.statusLabel.text isEqualToString:@"Ad is NOT available"]) {
return;
}
if (![self.platformName isEqualToString:@"audience_network"] ||
![self.adFormat isEqualToString:@"interstitial"] ||
!self.platformPlacementId) {
self.statusLabel.text = @"Ad is NOT available";
return;
}
self.interstitialAd = [[FBInterstitialAd alloc] initWithPlacementID:self.platformPlacementId];
self.interstitialAd.delegate = self;
[self.interstitialAd loadAdWithBidPayload:self.payload];
}

因此,如果 Audience Network 成功得標,應用程式範例就會載入廣告,否則便會顯示來自競投伺服器的錯誤訊息。

下一步:用戶端逐步整合