ios - 如何创建一个函数来增加观看广告视频的奖励

标签 ios swift admob rewardedvideoad appodeal

我的游戏中有一个计数器,可以将分数加 1,我想在我的游戏结束屏幕上播放一个可以将玩家分数提高 100 分的奖励视频,但我不确定如何在广告播放时执行该功能结束。这是我的代码:

//  FirstViewController.swift
import UIKit
import Firebase
import AVFoundation
import StoreKit
import GameKit
import Appodeal


class Page1: UIViewController, AVAudioPlayerDelegate, GADInterstitialDelegate, UIAlertViewDelegate, GKGameCenterControllerDelegate, AppodealInterstitialDelegate {


    let ncObserver = NotificationCenter.default
    let PlayAgainObserver = NotificationCenter.default
    let AddScoreObserver = NotificationCenter.default


    var player = AVAudioPlayer()


    /* Variables */
    var gcEnabled = Bool() // Check if the user has Game Center enabled
    var gcDefaultLeaderBoard = String() // Check the default leaderboardID

    var score = 0


    let LEADERBOARD_ID = "ScoreID"


    var interstitial: GADInterstitial!

    var counter: Int = 0
    var counter2: Int = 0


    @IBOutlet weak var scrollView: UIScrollView!
    @IBOutlet weak var pageControl: UIPageControl!
    @IBOutlet weak var placementField: UITextField!


   // @IBOutlet weak var testpulse: UIButton!

    let notification = NotificationCenter.default
    let notification2 = NotificationCenter.default


    override func viewDidLoad() {
        super.viewDidLoad()
      authenticateLocalPlayer()
        Appodeal.setInterstitialDelegate(self)


        ncObserver.addObserver(self, selector: #selector(self.StopSoundsfunc), name: Notification.Name("StopSounds"), object:nil)

        PlayAgainObserver.addObserver(self, selector: #selector(self.PlayAgainfunc), name: Notification.Name("PlayAgain"), object:nil)

        AddScoreObserver.addObserver(self, selector: #selector(self.AddScorefunc), name: Notification.Name("AddScore"), object:nil)


        interstitial = GADInterstitial(adUnitID: "ca-app-pub-6626761084276338/5899386416")

        let request = GADRequest()
        interstitial.load(request)


    }


    @IBAction func playAgain(_ sender: Any) {
        if counter % 15 == 0 {
            if interstitial.isReady {
                interstitial.present(fromRootViewController: self)
                interstitial = CreateAd()
            } else {
                print("Ad wasn't ready")
            }
        }
        counter += 1


}


    @objc func PlayAgainfunc(_ sender: Any) {
        if counter % 15 == 0 {
            if interstitial.isReady {
                interstitial.present(fromRootViewController: self)
                interstitial = CreateAd()
            } else {
                print("Ad wasn't ready")
            }
        }
        counter += 1
    }


    @IBAction func ShowAds(_ sender: Any) {
       // notification.post(name: Notification.Name("PlayAgain"), object: nil)
        Appodeal.showAd(AppodealShowStyle.interstitial, rootViewController: self)

    }
    @IBAction func AddScore(_ sender: Any) {
          notification.post(name: Notification.Name("AddScore"), object: nil)
    }

    // MARK: - OPEN GAME CENTER LEADERBOARD
    @IBAction func checkGCLeaderboard(_ sender: AnyObject) {
        let gcVC = GKGameCenterViewController()
        gcVC.gameCenterDelegate = self
        gcVC.viewState = .leaderboards
        gcVC.leaderboardIdentifier = LEADERBOARD_ID
        present(gcVC, animated: true, completion: nil)
    }

    // MARK: - ADD 10 POINTS TO THE SCORE AND SUBMIT THE UPDATED SCORE TO GAME CENTER
    @objc func AddScorefunc(_ sender: AnyObject) {
        // Add 1 point to current score
        score += 1


        // Submit score to GC leaderboard
        let bestScoreInt = GKScore(leaderboardIdentifier: LEADERBOARD_ID)
        bestScoreInt.value = Int64(score)
        GKScore.report([bestScoreInt]) { (error) in
            if error != nil {
                print(error!.localizedDescription)
            } else {
                print("Best Score submitted to your Leaderboard!")
            }
        }
    }


    // MARK: - AUTHENTICATE LOCAL PLAYER
    func authenticateLocalPlayer() {
        let localPlayer: GKLocalPlayer = GKLocalPlayer.localPlayer()

        localPlayer.authenticateHandler = {(ViewController, error) -> Void in
            if((ViewController) != nil) {
                // 1. Show login if player is not logged in
                self.present(ViewController!, animated: true, completion: nil)
            } else if (localPlayer.isAuthenticated) {
                // 2. Player is already authenticated & logged in, load game center
                self.gcEnabled = true

                // Get the default leaderboard ID
                localPlayer.loadDefaultLeaderboardIdentifier(completionHandler: { (leaderboardIdentifer, error) in
                    if error != nil { print(error)
                    } else { self.gcDefaultLeaderBoard = leaderboardIdentifer! }
                })

            } else {
                // 3. Game center is not enabled on the users device
                self.gcEnabled = false
                print("Local player could not be authenticated!")
                print(error!)
            }
        }
    }


    func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
        gameCenterViewController.dismiss(animated: true, completion: nil)
    }

}

func CreateAd() -> GADInterstitial {
   let interstitial = GADInterstitial(adUnitID: "ca-app-pub-6626761084276338/5899386416")
   interstitial.load(GADRequest())
    return interstitial
}

func interstitialDidFailToLoadAd(){
    NSLog("Interstitial failed  to load")
}

func interstitialDidReceiveAd(_ interstitial: GADInterstitial) {
    print("Interstitial adapter class name: \(String(describing: interstitial.adNetworkClassName))")
}


    @IBAction func RewardedVideo(_ sender: Any) {
        Appodeal.showAd(AppodealShowStyle.rewardedVideo, rootViewController: self)

    }

在我的“AddScorefunc”中,我有一个将分数增加 1 的计数器。我想创建一个类似的函数,将分数增加 100,但前提是满足奖励视频要求。

最佳答案

如果我们查看 SDK integration AppoDeal 的指南,他们为您通过他们的 sdk 展示的所有类型的广告提供了委托(delegate)。对于显示奖励视频的情况,委托(delegate)是 AppodealRewardedVideoDelegate,下面介绍如何使用它来获取回调和添加分数。

extension Page1: AppodealRewardedVideoDelegate {

    func rewardedVideoDidLoadAd(){
         NSLog("video ad was loaded")
    }
    func rewardedVideoDidFailToLoadAd(){
         NSLog("video ad failed to load")
    }
    func rewardedVideoDidPresent(){
          NSLog("video ad was presented");
    }
    func rewardedVideoWillDismiss(){
          NSLog("video ad was closed");
    }
    func rewardedVideoDidFinish(_ rewardAmount: UInt, name rewardName: String!){
          NSLog("video ad was fully watched");
          // Add score here i.e, score += 100
    }
}

Page1viewDidLoad中,设置delegate方法,

override func viewDidLoad() {
    super.viewDidLoad()
    // set delegate
    Appodeal.setRewardedVideoDelegate(self)
  }

关于ios - 如何创建一个函数来增加观看广告视频的奖励,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50111320/

相关文章:

ios - Swift Firebase - 上下文类型 'AnyObject' 不能与字典文字一起使用

ios - 防止自定义类被类别更改

ios - 将 "filter"按钮添加到 ScrollView

ios - 我有带导航的 1x、2x、3x 图像的图标

ios - 无法让 AdMob 或 iAd 横幅广告在 iOS ActionExtension 或 ShareExtension 中运行

swift - AdMob 需要很长时间才能生成

iphone - 如何在 iPhone 上播放 AMR 音频文件

ios - 为什么使用 tableView.dequeueReusableCellWithIdentifier 会出现运行时错误

ios - 为 SpriteKit 转换 UITapGestureRecognizer 的触摸位置 - Swift

javascript - 在 JavaScript 中有多个等待?