blog

プログラミングとひとりごと。

アプリで広告の実装を試してみようとする(5)リワード できた!!

marimoko3.hatenablog.com

 

これの続き

 

Firebaseを使ってやる方法が見つかったので

こちらを参考にやってみることにする

 

i-app-tec.com

 

と思ったら

i-app-tec.com

 

こちらを参照、と書いてある

 

なので両方を参考に(やりながら書かないと手順書くの面倒になる、というか誰も見てないよね・・・おそらく、なので省略します)

 

Firebaseはアプリを追加するってどこから?っていうぐらいわかりにくい

ボタン?をポチッと押すだけなんだけど

 

 

import Firebase

これを追加すると

Could not build Objective-C module 'Firebase'

こうなったので

検索して

 

なんとなく見覚えのある

hfoasi8fje3.hatenablog.com

ここを参考に

2.該当プロジェクトの「DerivedData」ファイルを削除

え、なんて?

dev.classmethod.jp

Finderが表示されるので、プロジェクト名から始まるディレクトリを手動で消す

これで消せました

 

その後の手順(.ProjectName.xcworkspaceを削除、とか)はやらなくても

大丈夫でした。

 

で、シュミレータで実行して

 

Invalid redeclaration of 'ViewController'

こうなったり(同じ名前で2つ作ってた←ソースコード丸ごとコピーしたから)

 

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

こうなったり(そもそもラベルを貼ってなかった)

 

そもそもボタンつけてなかったり(ラベルに文字しか出ない)

 

f:id:marimoko3:20180917080155p:plain

 

ウワサのおじさん出ました!!やった!

import UIKit

import GoogleMobileAds

class ViewController3: UIViewController, GADRewardBasedVideoAdDelegate {

    

    let AdMobID = "[Your AdMob ID]"

    let TEST_ID = "ca-app-pub-3940256099942544/1712485313"

    var AdUnitID:String? = nil

    

    let simulation = true

    

    /// Is an ad being loaded.

    var adRequestInProgress = false

    var adRedy = false

    

    /// The reward-based video ad.

    var rewardBasedVideo: GADRewardBasedVideoAd?

    

//    @IBOutlet weak var statusLabel: UILabel!

    @IBOutlet weak var statusLabel: UILabel!

    

    

    override func viewDidLoad() {

        super.viewDidLoad()

        

        if simulation {

            AdUnitID = TEST_ID

        }

        else{

            AdUnitID = AdMobID

        }

        

        rewardBasedVideo = GADRewardBasedVideoAd.sharedInstance()

        rewardBasedVideo?.delegate = self

        

        setupRewardBasedVideoAd()

        

    }

    

    func setupRewardBasedVideoAd(){

        statusLabel.text = "set up"

        

        if !adRequestInProgress && rewardBasedVideo?.isReady == false {

            rewardBasedVideo?.load(GADRequest(),

                                   withAdUnitID: AdUnitID! )

            

            adRequestInProgress = true

        }

        else{

            print("Error: setup RewardBasedVideoAd")

        }

    }

    

//    @IBAction func playAd(_ sender: AnyObject) {

//    }

    @IBAction func playAd(_ sender: AnyObject) {

        print("adRedy=\(adRedy)")

        

        if GADRewardBasedVideoAd.sharedInstance().isReady && adRedy{

            GADRewardBasedVideoAd.sharedInstance().present(fromRootViewController: self)

            adRedy = false

        }

        else{

            print("Error: Reward based video not ready")

        }

    }

    

    // MARK: GADRewardBasedVideoAdDelegate implementation

    func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,

                            didFailToLoadWithError error: Error) {

        adRequestInProgress = false

        statusLabel.text = "failed to load"

        

        print("Reward based video ad failed to load: \(error.localizedDescription)")

    }

    

    func rewardBasedVideoAdDidReceive(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {

        statusLabel.text = "ad is received"

        adRequestInProgress = false

        adRedy = true

        

        print("Reward based video ad is received.")

    }

    

    func rewardBasedVideoAdDidOpen(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {

        statusLabel.text = "Opened reward based video ad."

        

        print("Opened reward based video ad.")

    }

    

    func rewardBasedVideoAdDidStartPlaying(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {

        print("started playing.")

    }

    

    func rewardBasedVideoAdDidClose(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {

        statusLabel.text = "ad is closed"

        setupRewardBasedVideoAd()

        

        print("Reward based video ad is closed.")

    }

    

    func rewardBasedVideoAdWillLeaveApplication(_ rewardBasedVideoAd: GADRewardBasedVideoAd) {

        

        print("Reward based video ad will leave application.")

    }

    

    func rewardBasedVideoAd(_ rewardBasedVideoAd: GADRewardBasedVideoAd,

                            didRewardUserWith reward: GADAdReward) {

        print("Reward received with currency: \(reward.type), amount \(reward.amount).")

    }

    

    

    

    override func didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    

}

 

あ、見た後の報酬の設定まだだった・・・