yandexads-flutter

Форк
0
/
YandexAdsInterstitialComponent.swift 
98 строк · 3.1 Кб
1
//
2
// Created by Artem Kovardin on 09.03.2022.
3
//
4

5
import Foundation
6
import YandexMobileAds
7
import Flutter
8

9
struct InterstitialData {
10
    var loader: YMAInterstitialAdLoader? = nil
11
    var ad: YMAInterstitialAd? = nil
12
}
13

14
class YandexAdsInterstitialComponent: NSObject, YandexAdsInterstitial {
15
    
16
    private var interstitials: [String: InterstitialData] = [:]
17
    
18
    private var callbacks: FlutterYandexAdsInterstitial
19
    
20
    init(callbacks: FlutterYandexAdsInterstitial) {
21
        self.callbacks = callbacks
22
    }
23
    
24
    
25
    func make(id: String) throws {
26
        let loader = YMAInterstitialAdLoader()
27
        loader.delegate = self
28
        interstitials[id] = InterstitialData(loader: loader)
29
        
30
    }
31
    
32

33
    func load(id: String) {
34
        let configuration = YMAAdRequestConfiguration(adUnitID: id)
35
        interstitials[id]?.loader?.loadAd(with: configuration)
36
        
37
    }
38
    
39
    func show(id: String) {
40
        if let controller = UIApplication.shared.delegate?.window??.rootViewController as? FlutterViewController {
41
            interstitials[id]?.ad?.show(from: controller)
42
        }
43
    }
44
}
45

46

47
extension YandexAdsInterstitialComponent: YMAInterstitialAdLoaderDelegate {
48
    func interstitialAdLoader(_ adLoader: YMAInterstitialAdLoader, didLoad interstitialAd: YMAInterstitialAd) {
49
        let id = interstitialAd.adInfo?.adUnitId ?? ""
50
        interstitials[id]?.ad = interstitialAd
51
        interstitials[id]?.ad?.delegate = self
52
        callbacks.onAdLoaded(id: id) {_ in }
53
    }
54
    
55
    func interstitialAdLoader(_ adLoader: YMAInterstitialAdLoader, didFailToLoadWithError error: YMAAdRequestError) {
56
        callbacks.onAdFailedToLoad(
57
            id: error.adUnitId ?? "",
58
            err: InterstitialError(code: 0, description: error.error.localizedDescription),
59
            completion: {_ in }
60
        )
61
    }
62
}
63

64
extension YandexAdsInterstitialComponent: YMAInterstitialAdDelegate {
65
   
66
    func interstitialAd(_ interstitialAd: YMAInterstitialAd, didFailToShowWithError error: Error) {
67
        let id = interstitialAd.adInfo?.adUnitId ?? ""
68
        callbacks.onAdFailedToShow(
69
            id: id,
70
            err: InterstitialError(code: 0, description: error.localizedDescription),
71
            completion: {_ in }
72
        )
73
    }
74

75
    func interstitialAdDidShow(_ interstitialAd: YMAInterstitialAd) {
76
        let id = interstitialAd.adInfo?.adUnitId ?? ""
77
        callbacks.onAdShown(id: id) {_ in }
78
    }
79

80
    func interstitialAdDidDismiss(_ interstitialAd: YMAInterstitialAd) {
81
        let id = interstitialAd.adInfo?.adUnitId ?? ""
82
        callbacks.onAdDismissed(id: id) {_ in }
83
    }
84

85
    func interstitialAdDidClick(_ interstitialAd: YMAInterstitialAd) {
86
        let id = interstitialAd.adInfo?.adUnitId ?? ""
87
        callbacks.onAdClicked(id: id) {_ in }
88
    }
89

90
    func interstitialAd(_ interstitialAd: YMAInterstitialAd, didTrackImpressionWith impressionData: YMAImpressionData?) {
91
        let id = interstitialAd.adInfo?.adUnitId ?? ""
92
        callbacks.onImpression(
93
            id: id,
94
            data: InterstitialImpression(data: impressionData?.rawData ?? ""),
95
            completion: {_ in }
96
        )
97
    }
98
}
99

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.