Skip to content

Commit 66afffc

Browse files
committed
Use public class functions for analytics instead of instance's
1 parent 983abbc commit 66afffc

File tree

4 files changed

+46
-28
lines changed

4 files changed

+46
-28
lines changed

Example/Example/ViewController.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class ViewController: UserReportViewController {
105105

106106
@IBAction func showUserReport(_ sender: Any) {
107107
// Display manually
108-
UserReport.shared?.tryInvite()
108+
UserReport.tryInvite()
109109
}
110110

111111
@IBAction func changeTestMode(_ sender: Any) {
@@ -133,12 +133,12 @@ class ViewController: UserReportViewController {
133133
}
134134

135135
@IBAction func trackScreen(_ sender: Any) {
136-
UserReport.shared?.trackScreenView()
136+
UserReport.trackScreenView()
137137
self.updateSessionInfo()
138138
}
139139

140140
@IBAction func trackSessionScreen(_ sender: Any) {
141-
UserReport.shared?.trackSectionScreenView("b556da9f-9443-44ab-aa48-63d579318b69")
141+
UserReport.trackSectionScreenView("b556da9f-9443-44ab-aa48-63d579318b69")
142142
self.updateSessionInfo()
143143
}
144144
}

Example_Objective-C/Example_Objective-C/ViewController.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ - (void)updateSessionInfo {
9090

9191
- (IBAction)showUserReport:(id)sender {
9292
// Display manually
93-
[[UserReport shared] tryInvite];
93+
[UserReport tryInvite];
9494
}
9595

9696
- (IBAction)changeTestMode:(id)sender {
@@ -119,7 +119,7 @@ - (IBAction)selectFullscreenDisplayMode:(id)sender {
119119
}
120120

121121
- (IBAction)trackScreen:(id)sender {
122-
[[UserReport shared] trackScreenView];
122+
[UserReport trackScreenView];
123123
[self updateSessionInfo];
124124
}
125125

UserReport/UserReport/UI/UserReportViewController.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ open class UserReportViewController: UIViewController {
2020
super.viewDidAppear(animated)
2121

2222
// Tracking screen view
23-
UserReport.shared?.trackScreenView()
23+
UserReport.trackScreenView()
2424
}
2525

2626
}

UserReport/UserReport/UserReport.swift

Lines changed: 40 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,11 @@ private var sharedInstance: UserReport?
114114
/**
115115
* Tracking screen view
116116
*/
117-
@objc public func trackScreenView() {
118-
117+
@objc public class func trackScreenView() {
118+
UserReport.shared?.trackScreenView()
119+
}
120+
121+
@objc private func trackScreenView() {
119122
// Track audience every screen view instead first screen view because we already tracked audience when initialize SDK
120123
if self.session.screenView != 0 {
121124
self.sendTrackScreenView()
@@ -128,7 +131,11 @@ private var sharedInstance: UserReport?
128131
/**
129132
* Tracking section screen view
130133
*/
131-
@objc public func trackSectionScreenView(_ sectionId: String) {
134+
@objc public class func trackSectionScreenView(_ sectionId: String) {
135+
UserReport.shared?.trackSectionScreenView(sectionId)
136+
}
137+
138+
@objc private func trackSectionScreenView(_ sectionId: String) {
132139
self.sendTrackSectionScreenView(sectionId)
133140

134141
// Update session `screenView` and `totalScreenView` values
@@ -139,7 +146,11 @@ private var sharedInstance: UserReport?
139146
* Force show survey on screen.
140147
* Will send invitation request to backend. Depending on response will invite to take survey or not.
141148
*/
142-
@objc public func tryInvite() {
149+
@objc public class func tryInvite() {
150+
UserReport.shared?.tryInvite()
151+
}
152+
153+
@objc private func tryInvite() {
143154
self.tryInvite(force: true)
144155
}
145156

@@ -225,7 +236,7 @@ private var sharedInstance: UserReport?
225236
* This method sends visit request to backend and user for sure will not be invited to take survey.
226237
*/
227238
private func logVisit() {
228-
self.network.visit(info: self.info) { (result) in
239+
self.network.visit(info: self.info) { [unowned self] (result) in
229240
switch (result) {
230241
case .success:
231242
self.logger.log("Log visit", level: .info)
@@ -243,7 +254,7 @@ private var sharedInstance: UserReport?
243254
return
244255
}
245256

246-
self.network.trackScreenView(info: self.info, tCode: tCode) { (result) in
257+
self.network.trackScreenView(info: self.info, tCode: tCode) { [unowned self] (result) in
247258
switch (result) {
248259
case .success:
249260
self.logger.log("Viewed screen", level: .info)
@@ -302,9 +313,9 @@ private var sharedInstance: UserReport?
302313
self.surveyStatus = .requestInvite
303314

304315
/// Set local quarantine for reason some internal troubles
305-
self.session.updateLocalQuarantineDate(self.getLocalQuarantineDate())
316+
self.getLocalQuarantineDate().map(self.session.updateLocalQuarantineDate)
306317

307-
self.network.invitation(info: self.info) { (result) in
318+
self.network.invitation(info: self.info) { [unowned self] (result) in
308319
switch (result) {
309320
case .success:
310321
/// Get userId and invitationId from API response
@@ -341,12 +352,12 @@ private var sharedInstance: UserReport?
341352
/**
342353
* Adds local quarantine days from settings to currebnt date.
343354
*/
344-
private func getLocalQuarantineDate() -> Date {
355+
private func getLocalQuarantineDate() -> Date? {
345356
let currentDate = Date()
346357
var dateComponent = DateComponents()
347358
dateComponent.day = self.session.settings?.localQuarantineDays
348359

349-
return Calendar.current.date(byAdding: dateComponent, to: currentDate)!
360+
return Calendar.current.date(byAdding: dateComponent, to: currentDate)
350361
}
351362

352363
/**
@@ -362,9 +373,9 @@ private var sharedInstance: UserReport?
362373
surveyVC.modalTransitionStyle = .crossDissolve
363374
surveyVC.modalPresentationStyle = .overCurrentContext
364375
surveyVC.load()
365-
surveyVC.loadDidFinish = {
376+
surveyVC.loadDidFinish = { [unowned surveyVC] in
366377
self.surveyStatus = .surveyShown
367-
UIApplication.shared.keyWindow?.rootViewController?.present(surveyVC, animated: true, completion: nil)
378+
UIApplication.shared.keyWindow?.rootViewController?.present(surveyVC, animated: true)
368379
}
369380
surveyVC.loadDidFail = { (error) in
370381
self.surveyStatus = .none
@@ -378,20 +389,23 @@ private var sharedInstance: UserReport?
378389
}
379390

380391
/// Handle survey close native 'X' button
381-
surveyVC.handlerCloseButton = {
392+
surveyVC.handlerCloseButton = { [unowned surveyVC] in
382393
self.surveyStatus = .none
383-
surveyVC.dismiss(animated: true, completion: nil)
394+
surveyVC.dismiss(animated: true)
384395

385396
/// Send 'close' quarantine reason to API
386-
self.network.setQuarantine(reason: "Close", mediaId: self.info.media.mediaId, invitationId: self.invitationId, userId: self.userId) { (result) in }
397+
self.network.setQuarantine(reason: "Close",
398+
mediaId: self.info.media.mediaId,
399+
invitationId: self.invitationId,
400+
userId: self.userId) { (result) in }
387401

388402
self.scheduleActualizeLocalQuarantine()
389403
}
390404

391405
/// Handle survey close event by 'No' / 'Close' button
392-
surveyVC.handlerSurveyClosedEvent = {
406+
surveyVC.handlerSurveyClosedEvent = { [unowned surveyVC] in
393407
self.surveyStatus = .none
394-
surveyVC.dismiss(animated: true, completion: nil)
408+
surveyVC.dismiss(animated: true)
395409

396410
self.scheduleActualizeLocalQuarantine()
397411
}
@@ -402,26 +416,30 @@ private var sharedInstance: UserReport?
402416
* Schedule is needed to avoid race of close event and getting quarantine API call
403417
*/
404418
@objc private func scheduleActualizeLocalQuarantine() {
405-
Timer.scheduledTimer(timeInterval: 3, target: self, selector: #selector(self.actualizeLocalQuarantine), userInfo: nil, repeats: false)
419+
Timer.scheduledTimer(timeInterval: 3,
420+
target: self,
421+
selector: #selector(self.actualizeLocalQuarantine),
422+
userInfo: nil, repeats: false)
406423
}
407424

408425
/**
409426
* Set correct local quarantine accoding to user behevior
410427
*/
411428
@objc private func actualizeLocalQuarantine() -> Void {
412429
/// Get current local quarantine from API
413-
self.network.getQuarantineInfo(userId: self.userId, mediaId: self.info.media.mediaId) { (result) in
430+
self.network.getQuarantineInfo(userId: self.userId,
431+
mediaId: self.info.media.mediaId) { [unowned self] (result) in
414432

415433
switch (result) {
416434
case .success:
417435
if (result.value?.isInLocal)! {
418436
let localQuarantineDate = result.value?.inLocalTill
419437
let dateFormatter = DateFormatter()
420-
dateFormatter.timeZone = TimeZone.init(identifier: "UTC")
438+
dateFormatter.timeZone = TimeZone(identifier: "UTC")
421439
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss"
422-
let date = dateFormatter.date(from: localQuarantineDate!)
440+
let date = localQuarantineDate.flatMap(dateFormatter.date)
423441

424-
self.session.updateLocalQuarantineDate(date!)
442+
date.map(self.session.updateLocalQuarantineDate)
425443
}
426444

427445
case .failure(let error):

0 commit comments

Comments
 (0)