Skip to content
:docs

BenefitHub

Learn how to add and configure BenefitHub and implement additional features through the SDK interface.

Key features

BenefitHub is an offerwall-style placement that supports many ads while matching your app's UI like a native placement. Buzzvil supports entry paths from other placements into BenefitHub to expose users to more ads.

Integration

Follow these steps to integrate BenefitHub.

Step 1. Prepare

  • Complete Getting started.
  • A Unit ID for BenefitHub, referred to below as YOUR_FEED_UNIT_ID.

Step 2. Initialize BenefitHub

Add BZVFeedConfig to BuzzBenefitConfig.

Swift
import BuzzvilSDK

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool {
        let feedConfig = BZVFeedConfig { builder in
            builder.unitID = "YOUR_FEED_UNIT_ID"
        }
        let config = BuzzBenefitConfig.Builder("YOUR_APP_ID")
            .setDefaultFeedConfig(feedConfig)
            .build()
        BuzzBenefit.shared.initialize(with: config)
        return true
    }
}

Step 3. Display BenefitHub

BenefitHub opens full screen. If ads have not already been allocated, it requests them automatically.

Swift
let yourViewController = UIViewController()
let buzzAdFeed = BZVBuzzAdFeed { _ in }
buzzAdFeed.show(on: yourViewController)

Display BenefitHub with a non-default configuration

In addition to the default Feed using BZVFeedConfig configured through DefaultFeedConfig, you can display a different configuration. Create a new BZVFeedConfig and pass it to BZVBuzzAdFeed.feedConfig(). See the following example.

Swift
let yourViewController = UIViewController()
let buzzAdFeed = BZVBuzzAdFeed { builder in
  builder.config = BZVFeedConfig { builder in
    builder.unitID = "SECOND_BENEFIT_HUB_UNIT_ID"
  }
}
buzzAdFeed.show(on: yourViewController)

Basic settings

This section covers the basic features to configure in BenefitHub. You can enable them or change their settings without modifying or redeploying your app. See the illustration below for BenefitHub's main features.

Lucky Box

Lucky Box upgrades the Daily Reward feature that increases BenefitHub retention. Its revival system encourages users to maintain participation streaks, while network impression and video ads generate revenue through the basic Lucky Box reward flow. It also presents Buzzvil's direct-sales and network ads by category in a horizontally swipeable interface with infinite scrolling and automatic loading.

Enable this feature by integrating SDK 5.17.3 or later, without additional development. It operates as a separate LuckyBox placement, and you can monitor Lucky Box DAU and revenue in Dash Admin.

After completing ad allocation and display in BenefitHub, contact your Buzzvil representative at help@buzzvil.com to enable the Lucky Box placement.

Mission Pack

Mission Pack awards a percentage of the rewards users earn from ads as a special bonus when they complete all missions. These weekly missions start automatically on Monday and end at midnight on Sunday. Gamification introduces users to ads with strong revenue potential and can improve revenue. When a user clicks the Participate button on the Mission Pack screen, a screen opens where they can immediately engage with an ad that matches the mission.

  • Choose the number of ads and missions to display.
  • A clean, polished, user-centered UI and UX
  • Customize a wide range of UI settings without changing code.
  • Adjust bonus reward rates based on revenue and user engagement.
  • Support for opening the Mission Pack screen first when displaying BenefitHub

Enable this feature by integrating SDK 5.23.2 or later, without additional development. After completing ad allocation and display in BenefitHub, contact your Buzzvil representative at help@buzzvil.com to enable Mission Pack.

Ad category sections

Add mini carousel, standard carousel or grid sections above the existing BenefitHub content to highlight ads you want to grow or products users prefer, helping improve revenue and app activity.

Ad category filters

Filters let users focus on ad types they want to participate in, improving the experience and ad efficiency. Contact help@buzzvil.com to change UI strings, filter types or other settings.

Infinite scrolling

When users reach the end of the allocated ad list, more ads load automatically. Enabled by default, this can be toggled without editing code or redeploying the app. Contact help@buzzvil.com to change the setting.

Consent modal for sharing personal information with third parties

Personal information protection law requires user consent to collect and use personal information. The Buzzvil SDK provides a UI to obtain consent. If a user does not consent to collection, ads are not allocated to BenefitHub. Users entering BenefitHub for the first time see the following UI.

ATT (App Tracking Transparency) authorization dialog

When enabled, the dialog appears when users on iOS 14 or later enter Feed without having granted tracking permission.

ATT (App Tracking Transparency) permission prompt

This feature is provided to users on iOS 14 and later who have not allowed app activity tracking. When a user on iOS 14 or later enters BenefitHub, clicks an ad, and returns, a modal appears over the placement. Tapping its CTA opens a page explaining how to Allow Tracking in iOS Settings. Follow the page's instructions to allow tracking.

Implement entry paths in your app UI

You can implement views in your app layout, such as icons, buttons, or banners, to create entry paths into BenefitHub.

See the diagram below for example entry point components. The sample app includes code for several custom entry points.

Step 1. Prepare

Step 2. Add an entry point

Create a BenefitHub entry point in a view controller by implementing a custom view extending BZVFeedEntryView and adding it as a subview.

Implement an entry point in code

The following example creates a custom view extending BZVFeedEntryView and adds it to a view controller.

  1. Define a subclass of BZVFeedEntryView and implement its layout.
Swift
import BuzzvilSDK

final class CustomFeedEntryView: BZVFeedEntryView {
  let customSubview1 = UIView(frame: .zero)
  let customSubview2 = UIView(frame: .zero)

  required init?(coder: NSCoder) {
    super.init(coder: coder)
    setupView()
  }

  override init(frame: CGRect) {
    super.init(frame: frame)
    setupView()
  }

  private func setupView() {
    // subview 초기화 및 LayoutConstraint 설정
    // ...생략...

    // 클릭이 가능한 영역을 지정합니다.
    clickableViews = [customSubview1, customSubview2]
  }
}
  1. Initialize and use your subclass (CustomFeedEntryView) of BZVFeedEntryView.
Swift
import UIKit

final class ViewController: UIViewController {
  private lazy var customFeedEntryView: CustomFeedEntryView = {
    let view = CustomFeedEntryView(frame: .zero)
    return view
  }()

  override func viewDidLoad() {
    super.viewDidLoad()

    view.addSubview(customFeedEntryView)

    // LayoutConstraint 설정
    // ...
  }
}

Step 3. Display available points

Preview the available points, as shown below, to encourage users who have not yet entered BenefitHub to participate.

Follow these steps to preview the available points.

Swift
buzzAdFeed.load(
  onSuccess: { 
    // 적립 가능한 포인트를 직접 구현한 UI에 업데이트합니다.
    let availableReward = buzzAdFeed.availableRewards
  }, 
  onFailure: { error in
    // 적립 가능한 포인트를 가져올 수 없는 경우
  }
)

Additional features

This section explains how to implement additional BenefitHub features.

Configure base rewards

Award points periodically simply for entering BenefitHub to encourage return visits. Contact help@buzzvil.com to enable base rewards or change the amount.

Check ad types

Buzzvil SDK provides APIs to identify ad types so you can offer different rewards or experiences for impression-based, action-based and other ads. See Check the ad type in User experience features.

Integrate BenefitHub as a child view controller

To use your app's navigation bar instead of BenefitHub's navigation bar, integrate BenefitHub as a child view controller.

Add a child view controller to the parent view controller to integrate BenefitHub this way.

The following example adds and integrates BenefitHub as a child view controller.

Swift
import BuzzvilSDK

final class ContainerViewController: UIViewController {
  let buzzAdFeed = BZVBuzzAdFeed { builder in }

  override func viewDidLoad() {
    super.viewDidLoad()
    displayContentViewController(buzzAdFeed.viewController)
  }

  private func displayContentViewController(_ contentViewController: UIViewController) {
    addChild(contentViewController)
    contentViewController.view.frame = view.bounds
    view.addSubview(contentViewController.view)
    contentViewController.didMove(toParent: self)
  }
}

Reload ads

Call buzzAdFeed.load() before buzzAdFeed.show() to allocate new ads.

Swift
buzzAdFeed.load(
    onSuccess: {
        // 광고 재할당에 성공한 경우 호출됩니다.
    }, 
    onFailure: { error in
        // 광고 재할당에 실패한 경우 호출됩니다.
    }
)

Change the initial BenefitHub screen

Select a filter when opening BenefitHub

Open BenefitHub with a selected filter other than 전체.

Swift
let yourViewController = UIViewController()
let feedConfig = BZVFeedConfig { builder in
  builder.unitID = "BENEFIT_HUB_UNIT_ID"
  builder.initialSelectedFilterName = "클릭적립"
}
let buzzAdFeed = BZVBuzzAdFeed(block: { builder in
  builder.config = feedConfig
})
buzzAdFeed.show(on: yourViewController)

Open Lucky Box directly

Use BZVBuzzAdFeed to display Lucky Box directly. BenefitHub launches alongside it.

Swift
let yourViewController = UIViewController()
let feedConfig = BZVFeedConfig { builder in
  builder.unitID = "BENEFIT_HUB_UNIT_ID"
  builder.initialNavigationPage = .luckyBox
}
let buzzAdFeed = BZVBuzzAdFeed(block: { builder in
  builder.config = feedConfig
})
Lucky Box entry point example

Use the showLuckyBox example in FeedViewController.swift and FeedViewController.m to implement a Lucky Box entry point.

Swift
// 베네핏허브를 열 때 럭키박스 화면 표시하기
func showLuckyBox() {
    let buzzAdFeed = BZVBuzzAdFeed { builder in
      builder.config = BZVFeedConfig { builder in
        builder.unitID = "BENEFITHUB_UNIT_ID"
        builder.initialNavigationPage = .luckyBox
      }
    }
    buzzAdFeed.show(on: self)
  }

Open MissionPack directly

Use BZVBuzzAdFeed to display MissionPack directly. BenefitHub launches alongside it.

Swift
let yourViewController = UIViewController()
let feedConfig = BZVFeedConfig { builder in
  builder.unitID = "BENEFIT_HUB_UNIT_ID"
  builder.initialNavigationPage = .missionPack
}
let buzzAdFeed = BZVBuzzAdFeed(block: { builder in
  builder.config = feedConfig
})