diff --git a/WOKA/Assets/Assets.xcassets/PlaceHolder/Contents.json b/WOKA/Assets/Assets.xcassets/PlaceHolder/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/WOKA/Assets/Assets.xcassets/PlaceHolder/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WOKA/Assets/Assets.xcassets/PlaceHolder/DefaultPlaceHolder.imageset/Contents.json b/WOKA/Assets/Assets.xcassets/PlaceHolder/DefaultPlaceHolder.imageset/Contents.json new file mode 100644 index 0000000..4030439 --- /dev/null +++ b/WOKA/Assets/Assets.xcassets/PlaceHolder/DefaultPlaceHolder.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 219.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WOKA/Assets/Assets.xcassets/PlaceHolder/DefaultPlaceHolder.imageset/Frame 219.png b/WOKA/Assets/Assets.xcassets/PlaceHolder/DefaultPlaceHolder.imageset/Frame 219.png new file mode 100644 index 0000000..e6c02b6 Binary files /dev/null and b/WOKA/Assets/Assets.xcassets/PlaceHolder/DefaultPlaceHolder.imageset/Frame 219.png differ diff --git a/WOKA/Assets/Assets.xcassets/PlaceHolder/EpisodePlaceHolder.imageset/Contents.json b/WOKA/Assets/Assets.xcassets/PlaceHolder/EpisodePlaceHolder.imageset/Contents.json new file mode 100644 index 0000000..1bb70a3 --- /dev/null +++ b/WOKA/Assets/Assets.xcassets/PlaceHolder/EpisodePlaceHolder.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame 220.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/WOKA/Assets/Assets.xcassets/PlaceHolder/EpisodePlaceHolder.imageset/Frame 220.png b/WOKA/Assets/Assets.xcassets/PlaceHolder/EpisodePlaceHolder.imageset/Frame 220.png new file mode 100644 index 0000000..2447494 Binary files /dev/null and b/WOKA/Assets/Assets.xcassets/PlaceHolder/EpisodePlaceHolder.imageset/Frame 220.png differ diff --git a/WOKA/Assets/Assets.xcassets/Placeholder.imageset/Contents.json b/WOKA/Assets/Assets.xcassets/PlaceHolder/Placeholder.imageset/Contents.json similarity index 100% rename from WOKA/Assets/Assets.xcassets/Placeholder.imageset/Contents.json rename to WOKA/Assets/Assets.xcassets/PlaceHolder/Placeholder.imageset/Contents.json diff --git a/WOKA/Assets/Assets.xcassets/Placeholder.imageset/Untitled design.png b/WOKA/Assets/Assets.xcassets/PlaceHolder/Placeholder.imageset/Untitled design.png similarity index 100% rename from WOKA/Assets/Assets.xcassets/Placeholder.imageset/Untitled design.png rename to WOKA/Assets/Assets.xcassets/PlaceHolder/Placeholder.imageset/Untitled design.png diff --git a/WOKA/Authentication/Model/UserDataDM.swift b/WOKA/Authentication/Model/UserDataDM.swift index 9a36614..7be312a 100644 --- a/WOKA/Authentication/Model/UserDataDM.swift +++ b/WOKA/Authentication/Model/UserDataDM.swift @@ -27,6 +27,7 @@ struct UserDataDM: Codable { let language: Language? let alreadyLoggedIn: Bool? let isDeactive : Bool? + var isUniqueUser : Bool? enum CodingKeys: String, CodingKey { case id, username, fullname, birthdate, email, avtar case avtarURL = "avtar_url" @@ -39,6 +40,7 @@ struct UserDataDM: Codable { case language case alreadyLoggedIn = "already_logged_in" case isDeactive = "is_deactive" + case isUniqueUser = "is_unique_user" } } diff --git a/WOKA/Constants K/AnalyticsEventKeys.swift b/WOKA/Constants K/AnalyticsEventKeys.swift index 0611142..b8228de 100644 --- a/WOKA/Constants K/AnalyticsEventKeys.swift +++ b/WOKA/Constants K/AnalyticsEventKeys.swift @@ -12,6 +12,7 @@ extension K{ static var guest_login_iOS = "guest_login_iOS" static var user_signup_iOS = "user_signup_iOS" static var new_user_iOS = "new_user_iOS" + static var engaged_users = "engaged_users" } } diff --git a/WOKA/Helpers/LoadingIndicatorImageView.swift b/WOKA/Helpers/LoadingIndicatorImageView.swift index 6125ad2..8b0e5b2 100644 --- a/WOKA/Helpers/LoadingIndicatorImageView.swift +++ b/WOKA/Helpers/LoadingIndicatorImageView.swift @@ -35,7 +35,7 @@ extension UIImageView { case .homeAvatar: self.image = UIImage(named: "DefaultAvatar") case .none: - self.image = UIImage(named: "WokaLogo") + self.image = UIImage(named: "EpisodePlaceHolder") break } diff --git a/WOKA/Network Adapter/APIEndPoints.swift b/WOKA/Network Adapter/APIEndPoints.swift index 636f22d..922d976 100644 --- a/WOKA/Network Adapter/APIEndPoints.swift +++ b/WOKA/Network Adapter/APIEndPoints.swift @@ -160,6 +160,7 @@ struct APIEndPoints { static let user_video_view = makeURL(path: "user_video_view") static let get_ad_data = makeURL(path: "v2/get_ad_data") static let update_ad_count = makeURL(path: "update_ad_count") + static let unique_click_store = makeURL(path: "unique_click_store") } // Helper method to construct full URL from base URL and path diff --git a/WOKA/Theme/CommonNwCall.swift b/WOKA/Theme/CommonNwCall.swift index 257e5ed..f49aa9b 100644 --- a/WOKA/Theme/CommonNwCall.swift +++ b/WOKA/Theme/CommonNwCall.swift @@ -7,9 +7,57 @@ import UIKit import Alamofire +import FirebaseAnalytics -//class CommonNwCall{ -// +class CommonNwCallTheme{ + static let shareInstance = CommonNwCallTheme() + + /* + Update our DB for the user not unique now. + Logic is if user is newly registered and if he clicks on FM, Webseries, LiveTV , Shop, Karaoke, AudioBooks, Games from theme 1 or 2, he will not be unique. Mark our DB to make him isUnnique to false + */ + func updateUniqueUser(){ + let headers : HTTPHeaders = ["device-id" : AuthFunc.shareInstance.getDeviceUUID(), + "access-token" : AuthFunc.shareInstance.getAccessToken()] + let params : Parameters = ["post_type" : "1", + "is_clicked" : "1", + "device_type" : "2"] // 1 - android, 2- iOS + NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Analytics.unique_click_store, method: .post, parameters: params,headers : headers) {(result : Result) in + switch result{ + case .success(let data): + switch data.success{ + case 0: + /* + Error + */ + print("Error Unique User") + case 1: + print("Success Unique User") + // update local user data && trigger firebase analytics for engaged_users + AuthFunc.shareInstance.userData?.isUniqueUser = false + Analytics.logEvent(K.AnalyticsEventKeys.engaged_users, parameters: nil) + default: + break + } + case .failure(_): + print("Failure Unique User") + } + } + } + + //check for unique user + func checkUniqueUser(){ + guard let data = AuthFunc.shareInstance.userData, let uniqueUser = data.isUniqueUser else{return} + if uniqueUser{ // do the network call and update the annalytics, this means user is unique + print("User is Unique") + CommonNwCallTheme.shareInstance.updateUniqueUser() + }else{ // do nothing. + print("User is Not Unique") + } + } +} + +// // static let shareInstance = CommonNwCall() // var userNotification = [UserNotificationDM]() // diff --git a/WOKA/Theme/Controller/ThemeOneVC.swift b/WOKA/Theme/Controller/ThemeOneVC.swift index 9d44540..55ae864 100644 --- a/WOKA/Theme/Controller/ThemeOneVC.swift +++ b/WOKA/Theme/Controller/ThemeOneVC.swift @@ -164,7 +164,7 @@ class ThemeOneVC: UIViewController { @IBAction func radioBtnTapped(_ sender: UIButton) { PersistentStorage.shared.addRadioCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() let sb = UIStoryboard(name: K.StoryBoard.wokaFM, bundle: nil) let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.WokaFM.wokaFMVC) as! WokaFMVC vcPush.modalPresentationStyle = .overCurrentContext diff --git a/WOKA/Theme/Controller/ThemeTwoVC.swift b/WOKA/Theme/Controller/ThemeTwoVC.swift index ee3ba1c..7ce9a95 100644 --- a/WOKA/Theme/Controller/ThemeTwoVC.swift +++ b/WOKA/Theme/Controller/ThemeTwoVC.swift @@ -210,6 +210,7 @@ extension ThemeTwoVC : CollectionViewSRC{ } func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { + CommonNwCallTheme.shareInstance.checkUniqueUser() switch indexPath.row{ case 0: PersistentStorage.shared.addRadioCount() diff --git a/WOKA/Theme/ViewModel/ThemeOneVM.swift b/WOKA/Theme/ViewModel/ThemeOneVM.swift index 3c318ce..c74964a 100644 --- a/WOKA/Theme/ViewModel/ThemeOneVM.swift +++ b/WOKA/Theme/ViewModel/ThemeOneVM.swift @@ -251,7 +251,7 @@ class ThemeOneVM{ //WebSeries vc.webSeriesView.addTapGesture { PersistentStorage.shared.addOthersCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.webSeriesView) { [weak self] in guard let self else{return} self.checkType(action: .webseries) @@ -260,7 +260,7 @@ class ThemeOneVM{ vc.audioBooksView.addTapGesture { PersistentStorage.shared.addOthersCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.audioBooksView) { [weak self] in guard let self else{return} self.checkType(action: .audioBooks) @@ -269,7 +269,7 @@ class ThemeOneVM{ vc.gamesView.addTapGesture { PersistentStorage.shared.addOthersCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.gamesView) { [weak self] in guard let self else{return} self.checkType(action: .games) @@ -278,7 +278,7 @@ class ThemeOneVM{ vc.karaokeView.addTapGesture { [self] in PersistentStorage.shared.addOthersCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.karaokeView) { [weak self] in guard let self else{return} self.checkType(action: .karaoke) @@ -287,7 +287,7 @@ class ThemeOneVM{ vc.shopView.addTapGesture { PersistentStorage.shared.addOthersCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.shopView) { [weak self] in guard let self else{return} self.checkType(action: .shop) @@ -296,7 +296,7 @@ class ThemeOneVM{ vc.liveTVIcon.addTapGesture { PersistentStorage.shared.addLiveTVCount() - + CommonNwCallTheme.shareInstance.checkUniqueUser() ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.liveTVIcon) { [weak self] in guard let self else{return} self.checkType(action: .liveTV) @@ -498,6 +498,7 @@ class ThemeOneVM{ // function which is triggered when handleTap on livetv is called @objc func handleTap(_ sender: UITapGestureRecognizer) { PersistentStorage.shared.addLiveTVCount() + CommonNwCallTheme.shareInstance.checkUniqueUser() DispatchQueue.main.async { Utilities.startProgressHUD(msg: "Loading...") } diff --git a/WOKA/Theme/ViewModel/ThemeTwoVM.swift b/WOKA/Theme/ViewModel/ThemeTwoVM.swift index 920e6c9..5ad1cd1 100644 --- a/WOKA/Theme/ViewModel/ThemeTwoVM.swift +++ b/WOKA/Theme/ViewModel/ThemeTwoVM.swift @@ -49,6 +49,7 @@ class ThemeTwoVM{ handleNotificationCenter() vc.liveTvView.addTapGesture { [weak self] in PersistentStorage.shared.addOthersCount() + CommonNwCallTheme.shareInstance.checkUniqueUser() guard let self else{return} self.playLiveTV() }