yandexads-flutter

Форк
0
/
YandexAdsBannerComponent.swift 
108 строк · 3.3 Кб
1
//
2
//  YandexAdsBannerComponent.swift
3
//  flutter_yandex_ads
4
//
5
//  Created by Artem Kovardin on 05.12.2022.
6
//
7

8
import Foundation
9
import YandexMobileAds
10
import Flutter
11

12

13
struct BannerData {
14
    var view: YMAAdView!
15
    var onAdLoaded: ((Result<Void, Error>) -> Void)? = nil
16
    var onAdFailed: ((Result<BannerError, Error>) -> Void)? = nil
17
    var onAdClickedId: ((Result<Void, Error>) -> Void)? = nil
18
    var onLeftApplicationId: ((Result<Void, Error>) -> Void)? = nil
19
    var onReturned: ((Result<Void, Error>) -> Void)? = nil
20
    var onImpressionId: ((Result<BannerImpression, Error>) -> Void)? = nil
21
}
22

23
class YandexAdsBannerComponent: NSObject, YandexAdsBanner {
24

25
    var banners: [String: BannerData] = [:]
26
    
27
    func make(id: String, width: Int64, height: Int64) throws {
28
        let banner = BannerData(
29
            view: YMAAdView(
30
                adUnitID: id,
31
                adSize: YMABannerAdSize.inlineSize(
32
                    withWidth: CGFloat(width),
33
                    maxHeight: CGFloat(height)))
34
        )
35
        
36
        banner.view.delegate = self
37
        banner.view.removeFromSuperview()
38
        
39
        banners[id] = banner
40
    }
41
    
42
    func load(id: String) throws {
43
        banners[id]?.view.loadAd()
44
    }
45
    
46
    func onAdLoaded(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
47
        banners[id]?.onAdLoaded = completion
48
    }
49
    
50
    func onAdFailedToLoad(id: String, completion: @escaping (Result<BannerError, Error>) -> Void) {
51
        banners[id]?.onAdFailed = completion
52
    }
53
    
54
    func onAdClicked(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
55
        banners[id]?.onAdClickedId = completion
56
    }
57
    
58
    func onLeftApplication(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
59
        banners[id]?.onLeftApplicationId = completion
60
    }
61
    
62
    func onReturnedToApplication(id: String, completion: @escaping (Result<Void, Error>) -> Void) {
63
        banners[id]?.onReturned = completion
64
    }
65
    
66
    func onImpression(id: String, completion: @escaping (Result<BannerImpression, Error>) -> Void) {
67
        banners[id]?.onImpressionId = completion
68
    }
69
}
70

71

72
extension YandexAdsBannerComponent: YMAAdViewDelegate {
73
    func adViewDidLoad(_ adView: YMAAdView) {
74
        if let callback =  banners[adView.adUnitID]?.onAdLoaded {
75
            callback(Result.success(()))
76
        }
77
    }
78

79
    func adViewDidFailLoading(_ adView: YMAAdView, error: Error) {
80
        let response = BannerError(
81
            code: Int64(error._code),
82
            description: error.localizedDescription)
83

84
        if let callback =  banners[adView.adUnitID]?.onAdFailed  {
85
            callback(Result.success(response))
86
        }
87
    }
88

89
    func adViewDidClick(_ adView: YMAAdView) {
90
        if let callback = banners[adView.adUnitID]?.onAdClickedId  {
91
            callback(Result.success(()))
92
        }
93
    }
94

95
    func adViewWillLeaveApplication(_ adView: YMAAdView) {
96
        if let callback = banners[adView.adUnitID]?.onLeftApplicationId  {
97
            callback(Result.success(()))
98
        }
99
    }
100

101
    func adView(_ adView: YMAAdView, didTrackImpressionWith impressionData: YMAImpressionData?) {
102
        let response = BannerImpression(data: impressionData?.rawData ?? "")
103
        
104
        if let callback = banners[adView.adUnitID]?.onImpressionId  {
105
            callback(Result.success(response))
106
        }
107
    }
108
}
109

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

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

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

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