iOS_Swift Rewarded Video - adxcorp/ADXLibrary_Integration GitHub Wiki

AdMob Rewarded Video Ad Integration

Rewarded Video load์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๋ฏธ๋ฆฌ load ํ•ด๋‘์‹  ๋‹ค์Œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  1. App ID๋ฅผ ์ด์šฉํ•˜์—ฌ GADMobileAds configuration
  2. GADRewardBasedVideoAd delegate ์ถ”๊ฐ€
  3. GADRequest๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐœ๊ธ‰๋ฐ›์œผ์‹  Vungle placements ID๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ extra ๋ฐ์ดํ„ฐ๋กœ ์ถ”๊ฐ€
  4. GADRewardBasedVideoAd ์˜ loadRequest: withAdUnitID:๋กœ ๊ด‘๊ณ  ๋กœ๋“œ
  5. ๊ด‘๊ณ  ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด rewardBasedVideoAdDidReceiveAd: ํ˜ธ์ถœ
  6. GADRewardBasedVideoAd ์˜ isReady๋กœ ํ‘œ์‹œ ํ•  ๊ด‘๊ณ ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, presentFromRootViewController:๋กœ ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ๋…ธ์ถœ
  7. ๊ด‘๊ณ  ์‹œ์ฒญ์„ ๋ชจ๋‘ ์™„๋ฃŒํ•˜๋ฉด rewardBasedVideoAd: didRewardUserWithReward:๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฏ€๋กœ, rewardBasedVideoAd: didRewardUserWithReward:๊ฐ€ ํ˜ธ์ถœ ๋œ ๊ฒฝ์šฐ์— ๋ฆฌ์›Œ๋“œ ์ง€๊ธ‰ ์ฒ˜๋ฆฌ

AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        GADMobileAds.configure(withApplicationID: "<YOUR_APP_ID>")
        
        return true
    }

MyViewController.m

import GoogleMobileAds
import VungleAdapter

class ADXAdMobRewardViewController: UIViewController, GADRewardBasedVideoAdDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        
        GADRewardBasedVideoAd.sharedInstance().delegate = self
    }
    @IBAction func selectShowAd(_ sender: Any) {
        
        if(GADRewardBasedVideoAd.sharedInstance().isReady) {
            GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self)
        } else {
            let request = GADRequest()
            let extras = VungleAdNetworkExtras.init()
            let placements = NSArray.init(objects: "<VUNGLE PLACEMENT ID>", "<VUNGLE PLACEMENT ID>")
            
            let placementsArray = placements as NSArray as! [String]
            extras.allPlacements = placementsArray
            
            request.register(extras)
            request.testDevices = ["e527e0336ebd9354411d932aa50910ca"]
            
            GADRewardBasedVideoAd.sharedInstance().load(request, withAdUnitID: "<YOUR_ADUNIT_ID_HERE>")
        }
    }
    
    // MARK: - GADRewardBasedVideoAdDelegate
    
    func rewardBasedVideoAdDidOpen(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
        print("rewardBasedVideoAdDidOpen")
    }
    
    func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
        print("rewardBasedVideoAdDidClose")
    }
    
    func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
        print("rewardBasedVideoAdDidReceive")
    }
    
    func rewardBasedVideoAdDidStartPlaying(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
        print("rewardBasedVideoAdDidStartPlaying")
    }
    
    func rewardBasedVideoAdWillLeaveApplication(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {
        print("rewardBasedVideoAdWillLeaveApplication")
    }
    
    func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didFailToLoadWithError error: Error) {
        print("rewardBasedVideoAd")
        print("error :", error)
    }
    
    func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd, didRewardUserWith reward: GADAdReward) {
        print("rewardBasedVideoAd")
    }

MoPub Rewarded Video Ad Integration

Rewarded Video load์— ์‹œ๊ฐ„์ด ๊ฑธ๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ, ๋ฏธ๋ฆฌ load ํ•ด๋‘์‹  ๋‹ค์Œ ์‚ฌ์šฉํ•˜์‹œ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

  1. delegate ์ถ”๊ฐ€
  2. MPRewardedVideo ์˜ loadAdWithAdUnitID:๋กœ ๊ด‘๊ณ  ๋กœ๋“œ
  3. ๊ด‘๊ณ  ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด rewardedVideoAdDidLoadForAdUnitID: ํ˜ธ์ถœ
  4. MPRewardedVideo ์˜ hasAdAvailableForAdUnitID:๋กœ ํ‘œ์‹œ ํ•  ๊ด‘๊ณ ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„, presentAdForAdUnitID:๋กœ ๋ฆฌ์›Œ๋“œ ๋น„๋””์˜ค ๋…ธ์ถœ
  5. ๊ด‘๊ณ  ์‹œ์ฒญ์„ ๋ชจ๋‘ ์™„๋ฃŒํ•˜๋ฉด rewardedVideoAdShouldRewardForAdUnitID:reward:๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฏ€๋กœ, rewardedVideoAdShouldRewardForAdUnitID:reward:๊ฐ€ ํ˜ธ์ถœ ๋œ ๊ฒฝ์šฐ์— ๋ฆฌ์›Œ๋“œ ์ง€๊ธ‰ ์ฒ˜๋ฆฌ

MyViewController.m

import MoPub

class ADXRewardViewController: UIViewController, MPRewardedVideoDelegate {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        MoPub.sharedInstance().initializeRewardedVideo(withGlobalMediationSettings: nil, delegate: self)
        MPRewardedVideo.loadAd(withAdUnitID: <YOUR_ADUNIT_ID_HERE>, withMediationSettings: nil)
    }
    
    @IBAction func selectShowAd(_ sender: Any) {
        if (MPRewardedVideo.hasAdAvailable(forAdUnitID: <YOUR_ADUNIT_ID_HERE>) == true) {
            MPRewardedVideo.presentAd(forAdUnitID: <YOUR_ADUNIT_ID_HERE>, from: self, with: nil)
        } else {
            MPRewardedVideo.loadAd(withAdUnitID: <YOUR_ADUNIT_ID_HERE>, withMediationSettings: nil)
        }
    }
    
    // MARK: - MPRewardedVideoDelegate
    
    func rewardedVideoAdDidLoad(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdDidLoad :", adUnitID)
    }
    
    func rewardedVideoAdDidAppear(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdDidAppear :", adUnitID)
    }

    func rewardedVideoAdDidExpire(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdDidExpire :", adUnitID)
    }
    
    func rewardedVideoAdWillAppear(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdWillAppear :", adUnitID)
    }
    
    func rewardedVideoAdDidDisappear(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdDidDisappear :", adUnitID)
    }
    
    func rewardedVideoAdWillDisappear(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdWillDisappear :", adUnitID)
    }
    
    func rewardedVideoAdDidReceiveTapEvent(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdDidReceiveTapEvent :", adUnitID)
    }
    
    func rewardedVideoAdWillLeaveApplication(forAdUnitID adUnitID: String!) {
        print("rewardedVideoAdWillLeaveApplication :", adUnitID)
    }
    
    func rewardedVideoAdDidFailToLoad(forAdUnitID adUnitID: String!, error: Error!) {
        print("rewardedVideoAdDidFailToLoad :", adUnitID)
        print("error :", error)
    }
    
    func rewardedVideoAdDidFailToPlay(forAdUnitID adUnitID: String!, error: Error!) {
        print("rewardedVideoAdDidFailToPlay :", adUnitID)
        print("error :", error)
    }
    
    func rewardedVideoAdShouldReward(forAdUnitID adUnitID: String!, reward: MPRewardedVideoReward!) {
        print("rewardedVideoAdShouldReward :", adUnitID)
        print("reward :", reward.currencyType)
    }