Как создать функцию, которая добавит вознаграждение за просмотр рекламного видео - PullRequest
0 голосов
/ 01 мая 2018

У меня есть счетчик в моей игре, который добавляет счет на 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, но только в том случае, если удовлетворены требования к видео с вознаграждением.

1 Ответ

0 голосов
/ 01 мая 2018

Если мы посмотрим на SDK руководство по AppoDeal , они предоставили делегатов для всех видов рекламы, которую вы показываете через их SDK. Для вашего случая показа видео с вознаграждением делегатом является 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
    }
}

В viewDidLoad из Page1 установите метод delegate следующим образом:

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