-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathads.go
79 lines (66 loc) · 1.54 KB
/
ads.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package config
import (
"math/rand"
"strings"
)
const (
none = "none"
free = "free"
pro = "pro"
)
// AdSettings are settings to use when showing ads to Android clients
type AdSettings struct {
NativeBannerZoneID string `yaml:"nativebannerzoneid,omitempty"`
StandardBannerZoneID string `yaml:"standardbannerzoneid,omitempty"`
InterstitialZoneID string `yaml:"interstitialzoneid,omitempty"`
DaysToSuppress int `yaml:"daystosuppress,omitempty"`
Percentage float64
Countries map[string]string
}
type AdProvider struct {
AdSettings
}
func (s *AdSettings) GetAdProvider(isPro bool, countryCode string, daysSinceInstalled int) *AdProvider {
if !s.adsEnabled(isPro, countryCode, daysSinceInstalled) {
return nil
}
return &AdProvider{*s}
}
func (s *AdSettings) adsEnabled(isPro bool, countryCode string, daysSinceInstalled int) bool {
if s == nil {
return false
}
if daysSinceInstalled < s.DaysToSuppress {
return false
}
level := s.Countries[strings.ToLower(countryCode)]
switch level {
case free:
return !isPro
case pro:
return true
default:
return false
}
}
func (p *AdProvider) GetNativeBannerZoneID() string {
if p == nil {
return ""
}
return p.NativeBannerZoneID
}
func (p *AdProvider) GetStandardBannerZoneID() string {
if p == nil {
return ""
}
return p.StandardBannerZoneID
}
func (p *AdProvider) GetInterstitialZoneID() string {
if p == nil {
return ""
}
return p.InterstitialZoneID
}
func (p *AdProvider) ShouldShowAd() bool {
return rand.Float64() <= p.Percentage/100
}