내부 미디에이션은 공개적으로 제공되지 않습니다.
현재 Audience Network를 사용한 내부 입찰은 비공개 베타이고 공개적으로 제공되지 않습니다. 변경 사항이 있을 경우 추가적인 업데이트를 제공하겠습니다.
또는 Facebook과 파트너를 맺은 미디에이션 플랫폼 중 하나를 통해 Audience Network Bidding에 액세스할 수 있습니다.
이 가이드에서는 iOS 클라이언트 앱을 구축하는 방법을 설명합니다. 아래의 단계별 가이드에서는 전면 광고에서 경매 서버에 경매 요청을 전송하는 예시를 사용합니다. Audience Network 전면 광고에 대해 이미 잘 알고 있는지 확인하세요. 입찰은 네이티브, 배너, 전면, 인스트림 동영상 및 보상형 동영상 형식도 지원합니다. 전면 광고 형식 외에 광고 형식을 사용하면 서버 설정을 변경할 수 있습니다.
클라이언트 측에서 경매 요청에 필요한 매개변수를 수집하고 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];
클라이언트 앱에서 응답 매개변수를 사용하면 어느 플랫폼이 경매에 낙찰되었고 광고를 읽어들이는지 알 수 있습니다. 경매가 성공하고 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가 입찰에 성공하면 광고를 읽어들입니다. 그렇지 않은 경우 경매 서버에서 수신한 오류 메시지를 표시합니다.