Nền tảng trung gian nội bộ không được cung cấp công khai
Phương thức đặt giá thầu nội bộ với Audience Network hiện đang ở giai đoạn Beta kín và chưa được cung cấp công khai. Chúng tôi sẽ cung cấp thêm thông tin mới khi có thay đổi.
Thay vào đó, bạn có thể truy cập phương thức Đặt giá thầu trên Audience Network thông qua một trong các nền tảng trung gian mà chúng tôi hợp tác.
Hướng dẫn này mô tả cách bạn có thể xây dựng Ứng dụng khách iOS. Trong hướng dẫn từng bước bên dưới, chúng tôi sẽ sử dụng ví dụ về cách gửi Yêu cầu đấu giá đến Máy chủ đấu giá của bạn trên quảng cáo chèn giữa. Hãy đảm bảo rằng bạn đã quen sử dụng quảng cáo chèn giữa trên Audience Network. Phương thức đặt giá thầu cũng hỗ trợ các định dạng quảng cáo Tự nhiên, Biểu ngữ, Chèn giữa, Video trong luồng và Video kèm phần thưởng. Khi sử dụng các định dạng quảng cáo khác với định dạng chèn giữa, bạn có thể thay đổi Cài đặt máy chủ.
Ở phía máy khách, chúng tôi cần thu thập các thông số bắt buộc cho yêu cầu đấu giá và gửi yêu cầu đó đến máy chủ đấu giá thông qua yêu cầu HTTP. Dưới đây là ví dụ về cách triển khai trong iOS để tạo yêu cầu đấu giá được chỉ định theo định dạng ở trên:
- (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; }
Dưới đây là đoạn mã mẫu của một hàm tĩnh gửi yêu cầu đấu giá đến máy chủ và gọi các phương thức gọi lại với phản hồi của máy chủ:
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];
Trên ứng dụng khách, dựa vào thông số phản hồi, chúng tôi có thể biết nền tảng nào đã thắng phiên đấu giá cũng như tải quảng cáo. Nếu phiên đấu giá thành công và Audience Network đã thắng phiên đấu giá, thông số phản hồi sẽ chứa chuỗi phần tải dữ liệu để chúng tôi có thể tải quảng cáo từ đó. Chúng tôi có thể gọi phương thức loadAdWithBidPayload
trong đúng lớp định dạng quảng cáo để tải quảng cáo. Dưới đây là phương thức gọi lại yêu cầu đấu giá đã triển khai:
- (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]; }
Kết quả là ứng dụng mẫu sẽ tải quảng cáo nếu Audience Network thắng thầu hoặc hiển thị thông báo lỗi nhận được từ máy chủ đấu giá.