forked from organicmaps/organicmaps
[MAPSME-4195] [ios] Added statistics to banners.
This commit is contained in:
parent
1c647e9369
commit
f4e886def4
6 changed files with 33 additions and 5 deletions
|
@ -3,6 +3,7 @@
|
|||
//
|
||||
|
||||
#import <MyTargetSDK/MyTargetSDK.h>
|
||||
#import <MyTrackerSDK/MRMyTracker.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#import "3party/Alohalytics/src/alohalytics_objc.h"
|
||||
|
|
|
@ -156,6 +156,7 @@ static NSString * const kStatOut = @"Out";
|
|||
static NSString * const kStatPedestrian = @"Pedestrian";
|
||||
static NSString * const kStatPlacePage = @"Place page";
|
||||
static NSString * const kStatPlacePageBannerBlank = @"Placepage_Banner_blank";
|
||||
static NSString * const kStatPlacePageBannerClick = @"Placepage_Banner_click";
|
||||
static NSString * const kStatPlacePageBannerError = @"Placepage_Banner_error";
|
||||
static NSString * const kStatPlacePageBannerShow = @"Placepage_Banner_show";
|
||||
static NSString * const kStatRB = @"RB";
|
||||
|
@ -175,6 +176,7 @@ static NSString * const kStatProgress = @"Progress";
|
|||
static NSString * const kStatProvider = @"Provider";
|
||||
static NSString * const kStatPushReceived = @"Push received";
|
||||
static NSString * const kStatRate = @"Rate";
|
||||
static NSString * const kStatReason = @"Reason";
|
||||
static NSString * const kStatRecentTrack = @"Recent track";
|
||||
static NSString * const kStatRegular = @"Regular";
|
||||
static NSString * const kStatRemove = @"Remove";
|
||||
|
|
|
@ -3,7 +3,8 @@ protocol Banner: MWMBanner {
|
|||
typealias ErrorDetails = [String : Any]
|
||||
typealias Success = (Banner) -> Void
|
||||
typealias Failure = (BannerType, EventName, ErrorDetails, NSError) -> Void
|
||||
func reload(success: @escaping Success, failure: @escaping Failure)
|
||||
typealias Click = (BannerType) -> Void
|
||||
func reload(success: @escaping Success, failure: @escaping Failure, click: @escaping Click)
|
||||
|
||||
var isBannerOnScreen: Bool { get set }
|
||||
var isNeedToRetain: Bool { get }
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import Crashlytics
|
||||
import MyTrackerSDK
|
||||
|
||||
@objc (MWMBannersCache)
|
||||
final class BannersCache: NSObject {
|
||||
|
@ -35,6 +36,8 @@ final class BannersCache: NSObject {
|
|||
assert(false)
|
||||
return
|
||||
}
|
||||
Statistics.logEvent(kStatPlacePageBannerShow, withParameters: banner.type.statisticsDescription)
|
||||
MRMyTracker.trackEvent(withName: kStatPlacePageBannerShow)
|
||||
completion(banner, isAsync)
|
||||
banner.isBannerOnScreen = true
|
||||
self.completion = nil
|
||||
|
@ -60,14 +63,17 @@ final class BannersCache: NSObject {
|
|||
let banner = bannerType.banner!
|
||||
requests[bannerType] = banner
|
||||
banner.reload(success: { [unowned self] banner in
|
||||
Statistics.logEvent(kStatPlacePageBannerShow, withParameters: banner.type.statisticsDescription)
|
||||
self.setLoaded(banner: banner)
|
||||
}, failure: { [unowned self] bannerType, event, errorDetails, error in
|
||||
var statParams = errorDetails
|
||||
statParams[kStatErrorMessage] = (error as NSError).userInfo.reduce("") { $0 + "\($1.key) : \($1.value)\n" }
|
||||
Statistics.logEvent(event, withParameters: statParams)
|
||||
Crashlytics.sharedInstance().recordError(error)
|
||||
MRMyTracker.trackEvent(withName: event)
|
||||
self.setError(bannerType: bannerType)
|
||||
}, click: { bannerType in
|
||||
Statistics.logEvent(kStatPlacePageBannerClick, withParameters: bannerType.statisticsDescription)
|
||||
MRMyTracker.trackEvent(withName: kStatPlacePageBannerClick)
|
||||
})
|
||||
}
|
||||
|
||||
|
|
|
@ -4,10 +4,12 @@ import FBAudienceNetwork
|
|||
final class FacebookBanner: FBNativeAd, Banner {
|
||||
fileprivate var success: Banner.Success!
|
||||
fileprivate var failure: Banner.Failure!
|
||||
fileprivate var click: Banner.Click!
|
||||
|
||||
func reload(success: @escaping Banner.Success, failure: @escaping Banner.Failure) {
|
||||
func reload(success: @escaping Banner.Success, failure: @escaping Banner.Failure, click: @escaping Click) {
|
||||
self.success = success
|
||||
self.failure = failure
|
||||
self.click = click
|
||||
|
||||
load()
|
||||
requestDate = Date()
|
||||
|
@ -109,10 +111,12 @@ final class FacebookBanner: FBNativeAd, Banner {
|
|||
extension FacebookBanner: FBNativeAdDelegate {
|
||||
|
||||
func nativeAdDidLoad(_ nativeAd: FBNativeAd) {
|
||||
guard nativeAd === self else { return }
|
||||
success(self)
|
||||
}
|
||||
|
||||
func nativeAd(_ nativeAd: FBNativeAd, didFailWithError error: Error) {
|
||||
guard nativeAd === self else { return }
|
||||
|
||||
// https://developers.facebook.com/docs/audience-network/testing
|
||||
var params: [String: Any] = [kStatBanner : nativeAd.placementID, kStatProvider : kStatFacebook]
|
||||
|
@ -128,5 +132,10 @@ extension FacebookBanner: FBNativeAdDelegate {
|
|||
|
||||
failure(self.type, event, params, e)
|
||||
}
|
||||
|
||||
func nativeAdDidClick(_ nativeAd: FBNativeAd) {
|
||||
guard nativeAd === self else { return }
|
||||
click(self.type)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ final class RBBanner: MTRGNativeAd, Banner {
|
|||
|
||||
fileprivate var success: Banner.Success!
|
||||
fileprivate var failure: Banner.Failure!
|
||||
fileprivate var click: Banner.Click!
|
||||
fileprivate var requestDate: Date?
|
||||
private var showDate: Date?
|
||||
private var remainingTime = Limits.minTimeOnScreen
|
||||
|
@ -76,9 +77,10 @@ final class RBBanner: MTRGNativeAd, Banner {
|
|||
}
|
||||
|
||||
//MARK: - Banner
|
||||
func reload(success: @escaping Banner.Success, failure: @escaping Banner.Failure) {
|
||||
func reload(success: @escaping Banner.Success, failure: @escaping Banner.Failure, click: @escaping Click) {
|
||||
self.success = success
|
||||
self.failure = failure
|
||||
self.click = click
|
||||
|
||||
load()
|
||||
requestDate = Date()
|
||||
|
@ -123,9 +125,16 @@ extension RBBanner: MTRGNativeAdDelegate {
|
|||
|
||||
func onNoAd(withReason reason: String!, nativeAd: MTRGNativeAd!) {
|
||||
guard nativeAd === self else { return }
|
||||
let params: [String: Any] = [kStatBanner : bannerID, kStatProvider : kStatRB]
|
||||
let params: [String: Any] = [kStatBanner : bannerID,
|
||||
kStatProvider : kStatRB,
|
||||
kStatReason : reason]
|
||||
let event = kStatPlacePageBannerError
|
||||
let error = NSError(domain: kMapsmeErrorDomain, code: 1001, userInfo: params)
|
||||
failure(self.type, event, params, error)
|
||||
}
|
||||
|
||||
func onAdClick(with nativeAd: MTRGNativeAd!) {
|
||||
guard nativeAd === self else { return }
|
||||
click(self.type)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue