[MAPSME-4195] [ios] Added statistics to banners.

This commit is contained in:
Ilya Grechuhin 2017-04-03 13:00:31 +03:00 committed by Vladimir Byko-Ianko
parent 1c647e9369
commit f4e886def4
6 changed files with 33 additions and 5 deletions

View file

@ -3,6 +3,7 @@
//
#import <MyTargetSDK/MyTargetSDK.h>
#import <MyTrackerSDK/MRMyTracker.h>
#import <UIKit/UIKit.h>
#import "3party/Alohalytics/src/alohalytics_objc.h"

View file

@ -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";

View file

@ -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 }

View file

@ -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)
})
}

View file

@ -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)
}
}

View file

@ -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)
}
}