Tài liệu này đã được cập nhật.
Bản dịch sang Tiếng Việt chưa hoàn tất.
Cập nhật bằng tiếng Anh: 2 tháng 4, 2022

Thêm quảng cáo video kèm phần thưởng vào ứng dụng iOS

Quảng cáo video kèm phần thưởng là trải nghiệm toàn màn hình, trong đó người dùng chọn xem quảng cáo video để đổi lấy thứ gì đó có giá trị, chẳng hạn như tiền ảo, vật phẩm trong ứng dụng, nội dung độc quyền, v.v. Trải nghiệm quảng cáo gồm 15 đến 30 giây quảng cáo không thể bỏ qua và một thẻ cuối có nút kêu gọi hành động. Sau khi người dùng xem xong toàn bộ video, bạn sẽ nhận được lệnh gọi lại yêu cầu trao phần thưởng đề xuất cho người dùng.

Dưới đây là thông tin chi tiết về cách triển khai quảng cáo video kèm phần thưởng từ Audience Network trên iOS.

Lưu ý rằng chúng tôi chỉ hỗ trợ Video kèm phần thưởng cho iOS 9 trở lên.

Thiết lập SDK

SDK công khai hiện đã có định dạng Video kèm phần thưởng trên Audience Network. Video kèm phần thưởng sẽ sớm có trên tất cả các ứng dụng chơi game. Nếu bạn không nhìn thấy Video kèm phần thưởng trong Trình quản lý kiếm tiền và bạn đang sử dụng phiên bản SDK mới nhất, hãy đăng ký ngay.

Đảm bảo bạn đã hoàn tất hướng dẫn Bắt đầuBắt đầu dành cho iOS với Audience Network trước khi tiếp tục.

Triển khai

Lúc này, trong file tiêu đề Trình kiểm soát chế độ xem (hoặc file Swift nếu bạn là người dùng Swift), hãy nhập FBAudienceNetwork, tuyên bố tuân thủ giao thức FBRewardedVideoAdDelegate và thêm biến phiên bản cho đơn vị quảng cáo video kèm phần thưởng

import UIKit
import FBAudienceNetwork

class ViewController: UIViewController, FBRewardedVideoAdDelegate {
  private var rewardedVideoAd: FBRewardedVideoAd?
}
#import <UIKit/UIKit.h>
@import FBAudienceNetwork;

@interface ViewController : UIViewController <FBRewardedVideoAdDelegate>

@property (nonatomic, strong) FBRewardedVideoAd *rewardedVideoAd;

@end

Thêm hàm vào Trình kiểm soát chế độ xem để khởi tạo đối tượng video kèm phần thưởng và lưu nội dung video vào bộ nhớ đệm trước thời điểm bạn muốn hiển thị video đó

override func viewDidLoad() {
  super.viewDidLoad()
  
  // Instantiate an rewarded video object.
  // NOTE: the placement ID will eventually identify this as your app. You can ignore it while you are testing
  // and replace it later when you have signed up.
  // While you are using this temporary code you will only get test ads and if you release
  // your code like this to the App Store your users will not receive ads (you will get a 'No Fill' error).
  let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
  rewardedVideoAd.delegate = self
  
  // For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
  rewardedVideoAd.load()
  
  self.rewardedVideoAd = rewardedVideoAd
}
- (void) viewDidLoad 
{
  [super viewDidLoad];
  // Instantiate a rewarded video ad object. 
  // NOTE: the placement ID will eventually identify this as your app. You can ignore it while 
  // you are testing and replace it later when you have signed up.
  // While you are using this temporary code you will only get test ads and if you release
  // your code like this to the App Store your users will not receive ads (you will get a 'No Fill' error).
  self.rewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:@"YOUR_PLACEMENT_ID"];
  self.rewardedVideoAd.delegate = self;

  // For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
  [self.rewardedVideoAd loadAd];
}

ID hiển thị tại YOUR_PLACEMENT_ID là ID tạm thời chỉ phục vụ mục đích thử nghiệm.

Nếu bạn sử dụng ID tạm thời này trong mã đang hoạt động, người dùng sẽ không nhận được quảng cáo (người dùng sẽ nhận được lỗi Không điền). Bạn phải quay lại đây sau khi thử nghiệm và thay thế ID tạm thời này bằng ID vị trí quảng cáo đang hoạt động.

Để tìm hiểu cách tạo ID vị trí quảng cáo đang hoạt động, hãy tham khảo phần Thiết lập Audience Network

Giờ đây, khi đã thêm mã để tải quảng cáo, bạn có thể thêm các hàm xử lý những sự kiện khác nhau.

Ví dụ:

  • rewardedVideoAdDidLoad đảm bảo ứng dụng của bạn sẽ biết khi quảng cáo được lưu vào bộ nhớ đệm và sẵn sàng hiển thị
  • rewardedVideoAdVideoComplete cho bạn biết thời điểm sẽ trao phần thưởng cho người dùng sau khi họ xem xong video
func rewardedVideoAdDidLoad(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Video ad is loaded and ready to be displayed")
}

func rewardedVideoAd(_ rewardedVideoAd: FBRewardedVideoAd, didFailWithError error: Error) {
  print("Rewarded video ad failed to load")
}

func rewardedVideoAdDidClick(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Video ad clicked")
}

func rewardedVideoAdDidClose(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded Video ad closed - this can be triggered by closing the application, or closing the video end card")
}

func rewardedVideoAdVideoComplete(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded Video ad video completed - this is called after a full video view, before the ad end card is shown. You can use this event to initialize your reward")
}
- (void)rewardedVideoAdDidLoad:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Video ad is loaded and ready to be displayed");
}
    
- (void)rewardedVideoAd:(FBRewardedVideoAd *)rewardedVideoAd didFailWithError:(NSError *)error
{
  NSLog(@"Rewarded video ad failed to load");
}

- (void)rewardedVideoAdDidClick:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Video ad clicked");
}
    
- (void)rewardedVideoAdDidClose:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded Video ad closed - this can be triggered by closing the application, or closing the video end card");
}

- (void)rewardedVideoAdVideoComplete:(FBRewardedVideoAd *)rewardedVideoAd;
{
  NSLog(@"Rewarded Video ad video completed - this is called after a full video view, before the ad end card is shown. You can use this event to initialize your reward");
}

Cuối cùng, khi đã sẵn sàng hiển thị quảng cáo video kèm phần thưởng, bạn có thể gọi mã sau trong hàm phần thưởng riêng của mình.

private func showRewardedVideoAd() {
  guard let rewardedVideoAd = rewardedVideoAd, rewardedVideoAd.isAdValid else {
    return
  }
  rewardedVideoAd.show(fromRootViewController: self)
}
- (void)showRewardedVideoAd
{
  if (self.rewardedVideoAd && self.rewardedVideoAd.isAdValid) {
    [self.rewardedVideoAd showAdFromRootViewController:self];
  }
}

Phương thức hiển thị quảng cáo video kèm phần thưởng bao gồm một cờ boolean animated để bạn có thể tạo hoạt ảnh cho bản trình bày. Theo mặc định, cờ này được đặt thành YES/true, nhưng bạn có thể ghi đè giá trị đó.

Khi chạy trên trình mô phỏng, các quảng cáo thử nghiệm sẽ hiển thị theo mặc định. Để bật quảng cáo thử nghiệm trên thiết bị, hãy thêm dòng mã sau đây trước khi tải quảng cáo: AdSettings.addTestDevice(HASHED ID). Sử dụng ID đã mã hóa được in vào log cat khi bạn yêu cầu tải quảng cáo trên thiết bị lần đầu.

Bạn có thể tùy ý thêm các hàm bổ sung sau đây để xử lý những trường hợp mà quảng cáo video kèm phần thưởng sẽ đóng hoặc thời điểm lượt hiển thị video kèm phần thưởng được ghi lại:

func rewardedVideoAdWillClose(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("The user clicked on the close button, the ad is just about to close")
}

func rewardedVideoAdWillLogImpression(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded Video impression is being captured")
}
- (void)rewardedVideoAdWillClose:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"The user clicked on the close button, the ad is just about to close");
}

- (void)rewardedVideoAdWillLogImpression:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded Video impression is being captured");
}

Xác thực phần thưởng phía máy chủ

Tổng quan

Nếu bạn quản lý phần thưởng cho người dùng ở phía máy chủ, Facebook sẽ cung cấp giải pháp thực hiện điều này một cách bảo mật bằng cách sử dụng kỹ thuật xác thực. Máy chủ của chúng tôi sẽ giao tiếp với điểm cuối https đã chỉ định để xác thực từng lượt hiển thị quảng cáo và xác thực liệu có trao phần thưởng hay không.

  1. Audience Network SDK yêu cầu quảng cáo video kèm phần thưởng phải có các thông số sau:
    • ID vị trí quảng cáo trên Audience Network
    • ID số người dùng – thuộc tính mà bạn sử dụng để xác định số người dùng. Ví dụ: số nhận dạng
    • Giá trị phần thưởng – giá trị của phần thưởng mà bạn muốn trao cho người dùng. Ví dụ: điểm cuối đã chỉ định có giá trị 100 xu cùng với Khóa bí mật của ứng dụng.
  2. Sau khi nhận, máy chủ sẽ xác thực yêu cầu và phản hồi như sau:
    • Phàn hồi 200: yêu cầu hợp lệ và phần thưởng sẽ được trao
    • Phản hồi không phải là 200: yêu cầu không hợp lệ và phần thưởng sẽ không được trao.
  3. Sau khi video phát xong, thẻ kết thúc sẽ hiển thị và một trong những sự kiện sau sẽ được kích hoạt.
    • onRewardServerSuccess – chỉ được kích hoạt nếu nhận được phản hồi 200 trong bước 3.
    • onRewardServerFailed – được kích hoạt nếu nhận được phản hồi không phải là 200 trong bước 3.

Ví dụ về URL sẽ được gửi đến điểm cuối của nhà phát hành từ máy chủ của Facebook.

https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID

Vui lòng cung cấp điểm cuối của nhà phát hành cho đại diện Facebook của bạn để bật tính năng này.

Triển khai SDK

Bạn có thể đặt Dữ liệu phần thưởng (USER_IDCURRENCY) trước hoặc sau phương thức loadAd. Đoạn mã bên dưới minh họa cả hai cách.

let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
rewardedVideoAd.delegate = self

// Set the rewarded ad data before or after `load` method is called
rewardedVideoAd.setRewardDataWithUserID("USER_ID", withCurrency: "CURRENCY")

// For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
rewardedVideoAd.load()

self.rewardedVideoAd = rewardedVideoAd
self.rewardedVideoAd = [[FBRewardedVideoAd alloc] initWithPlacementID:@"YOUR_PLACEMENT_ID"];
self.rewardedVideoAd.delegate = self;

// Set the rewarded ad data before or after `loadAd` method is called
[self.rewardedVideoAd setRewardDataWithUserID:@"USER_ID" withCurrency:@"CURRENCY"];

[self.rewardedVideoAd loadAd];

Ngoài các hàm nêu trên trong FBRewardedVideoAdDelegate, những sự kiện sau sẽ được dùng để xử lý việc trao phần thưởng trong ứng dụng của bạn. Bạn có thể sử dụng thông tin sau cùng với các sự kiện đề cập ở trên.

func rewardedVideoAdServerRewardDidFail(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded video ad not validated, or no response from server")
}

func rewardedVideoAdServerRewardDidSucceed(_ rewardedVideoAd: FBRewardedVideoAd) {
  print("Rewarded video ad validated by server")
}
- (void)rewardedVideoAdServerRewardDidSucceed:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded video ad validated by server");
}

- (void)rewardedVideoAdServerRewardDidFail:(FBRewardedVideoAd *)rewardedVideoAd
{
  NSLog(@"Rewarded video ad not validated, or no response from server");
}

Lưu ý rằng lệnh gọi lại xác thực máy chủ sẽ chỉ diễn ra sau khi người dùng loại bỏ thẻ kết thúc. Bạn không nên giải phóng đối tượng video kèm phần thưởng cho đến khi một trong các hàm gọi lại này xuất hiện.

Next Steps