From 8759b6f80c08cb1ba963c331e40b653cb73bc984 Mon Sep 17 00:00:00 2001 From: zjx Date: Fri, 13 Jun 2025 15:36:14 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A8=E9=80=81=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=8F=91=EF=BC=8CUI=E6=8E=92=E6=9F=A5=EF=BC=8Cbug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Veloria.xcodeproj/project.pbxproj | 31 ++++ .../xcshareddata/swiftpm/Package.resolved | 128 +++++++++++++- Veloria/AppDelegate/AppDelegate+Config.swift | 4 + Veloria/AppDelegate/AppDelegate+Open.swift | 2 +- Veloria/AppDelegate/AppDelegate.swift | 6 +- Veloria/AppDelegate/SceneDelegate+APNS.swift | 94 ++++++++++- Veloria/AppDelegate/SceneDelegate.swift | 5 +- .../HWPanModalContentView+VPAdd.swift | 25 +++ Veloria/Base/Extension/UIColor+VPAdd.swift | 4 + .../Base/Networking/API/VPSettingAPI.swift | 11 ++ Veloria/Base/Networking/API/VPStatAPI.swift | 15 ++ .../Controller/VPHomePageViewController.swift | 49 +++++- .../Class/Home/View/VPHomeRankingCell.swift | 7 +- .../Class/Home/View/VPSearchHistoryView.swift | 2 +- .../Class/Login/View/VPLoginContentView.swift | 7 +- .../Me/Controller/VPMeViewController.swift | 2 + Veloria/Class/Me/View/VPMeToolCell.swift | 2 +- .../Player/View/VPPlayerVipBuyView.swift | 158 +++++++++++++----- .../Controller/VPRewardsViewController.swift | 5 + .../Controller/VPVipViewController.swift | 147 ++++++++++------ .../Wallet/Model/VPPayTemplateItem.swift | 1 + Veloria/Class/Wallet/View/VPVipBuyCell.swift | 2 +- Veloria/Libs/AppTool/VPAppTool.swift | 4 + Veloria/Libs/Empty/VPEmptyView.swift | 56 ++++++- .../empty_image_03.imageset/Contents.json | 22 +++ .../缺省页-无网络-切图图层@2x.png | Bin 0 -> 40272 bytes .../缺省页-无网络-切图图层@3x.png | Bin 0 -> 73490 bytes Veloria/Source/GoogleService-Info.plist | 30 ++++ Veloria/Source/Info.plist | 2 + Veloria/Source/en.lproj/Localizable.strings | 13 +- Veloria/Veloria.entitlements | 2 + 资料/推送证书/AuthKey_Y6U23RSYN7.p8 | 6 + 32 files changed, 718 insertions(+), 124 deletions(-) create mode 100644 Veloria/Base/Extension/HWPanModalContentView+VPAdd.swift create mode 100644 Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/Contents.json create mode 100644 Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/缺省页-无网络-切图图层@2x.png create mode 100644 Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/缺省页-无网络-切图图层@3x.png create mode 100644 Veloria/Source/GoogleService-Info.plist create mode 100644 资料/推送证书/AuthKey_Y6U23RSYN7.p8 diff --git a/Veloria.xcodeproj/project.pbxproj b/Veloria.xcodeproj/project.pbxproj index 99a1530..5650b2d 100644 --- a/Veloria.xcodeproj/project.pbxproj +++ b/Veloria.xcodeproj/project.pbxproj @@ -154,6 +154,10 @@ BFCCE11A2DFAB7CA00EDE165 /* VPLanguageModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCCE1192DFAB7CA00EDE165 /* VPLanguageModel.swift */; }; BFCCE11C2DFAB83900EDE165 /* VPLocalizedModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCCE11B2DFAB83900EDE165 /* VPLocalizedModel.swift */; }; BFCCE11F2DFAD18000EDE165 /* VPGuideViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCCE11E2DFAD18000EDE165 /* VPGuideViewController.swift */; }; + BFCCE1212DFBF33500EDE165 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = BFCCE1202DFBF33500EDE165 /* GoogleService-Info.plist */; }; + BFCCE1242DFBF57B00EDE165 /* FirebaseCore in Frameworks */ = {isa = PBXBuildFile; productRef = BFCCE1232DFBF57B00EDE165 /* FirebaseCore */; }; + BFCCE1262DFBF57B00EDE165 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = BFCCE1252DFBF57B00EDE165 /* FirebaseMessaging */; }; + BFCCE1282DFC080200EDE165 /* HWPanModalContentView+VPAdd.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFCCE1272DFC07FB00EDE165 /* HWPanModalContentView+VPAdd.swift */; }; BFF5AFA42DE6F15E0044227A /* VPMeVipCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA32DE6F15E0044227A /* VPMeVipCell.swift */; }; BFF5AFA62DE700420044227A /* VPMeVipPrivilegeItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA52DE700420044227A /* VPMeVipPrivilegeItemView.swift */; }; BFF5AFA82DE704DC0044227A /* VPMeCoinCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFF5AFA72DE704DC0044227A /* VPMeCoinCell.swift */; }; @@ -388,6 +392,8 @@ BFCCE1192DFAB7CA00EDE165 /* VPLanguageModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPLanguageModel.swift; sourceTree = ""; }; BFCCE11B2DFAB83900EDE165 /* VPLocalizedModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPLocalizedModel.swift; sourceTree = ""; }; BFCCE11E2DFAD18000EDE165 /* VPGuideViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPGuideViewController.swift; sourceTree = ""; }; + BFCCE1202DFBF33500EDE165 /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; + BFCCE1272DFC07FB00EDE165 /* HWPanModalContentView+VPAdd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HWPanModalContentView+VPAdd.swift"; sourceTree = ""; }; BFF5AFA32DE6F15E0044227A /* VPMeVipCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeVipCell.swift; sourceTree = ""; }; BFF5AFA52DE700420044227A /* VPMeVipPrivilegeItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeVipPrivilegeItemView.swift; sourceTree = ""; }; BFF5AFA72DE704DC0044227A /* VPMeCoinCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VPMeCoinCell.swift; sourceTree = ""; }; @@ -471,6 +477,8 @@ files = ( F939C04AD4003BA127F15C28 /* Pods_Veloria.framework in Frameworks */, BFF5B2442DF050260044227A /* FacebookCore in Frameworks */, + BFCCE1262DFBF57B00EDE165 /* FirebaseMessaging in Frameworks */, + BFCCE1242DFBF57B00EDE165 /* FirebaseCore in Frameworks */, BFF5B2462DF050260044227A /* FacebookLogin in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -529,6 +537,7 @@ BF0FA7352DDECC4600C9E5F2 /* Font */, 1B056E222DDAC0FD007EE38D /* Assets.xcassets */, 1B056E232DDAC0FD007EE38D /* Info.plist */, + BFCCE1202DFBF33500EDE165 /* GoogleService-Info.plist */, 1B056E252DDAC0FD007EE38D /* LaunchScreen.storyboard */, 1B056E5E2DDACE12007EE38D /* Veloria-Bridging-Header.h */, 1B056E622DDAD035007EE38D /* Localizable.strings */, @@ -671,6 +680,7 @@ BF0FA77A2DE0788A00C9E5F2 /* UIStackView+VPAdd.swift */, BF0FA7A42DE4384100C9E5F2 /* AttributedString+VPAdd.swift */, BFF5B25B2DF13F850044227A /* Date+VPAdd.swift */, + BFCCE1272DFC07FB00EDE165 /* HWPanModalContentView+VPAdd.swift */, ); path = Extension; sourceTree = ""; @@ -1308,6 +1318,7 @@ minimizedProjectReferenceProxies = 1; packageReferences = ( BFF5B2422DF050260044227A /* XCRemoteSwiftPackageReference "facebook-ios-sdk" */, + BFCCE1222DFBF57B00EDE165 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, ); preferredProjectObjectVersion = 77; productRefGroup = 1B056DF52DDABE2B007EE38D /* Products */; @@ -1329,6 +1340,7 @@ BF0FA7372DDECC5400C9E5F2 /* PlayfairDisplay-VariableFont_wght.ttf in Resources */, BFF5AFC42DE84F9C0044227A /* Aa厚底黑.ttf in Resources */, 1B056E302DDAC0FD007EE38D /* LaunchScreen.storyboard in Resources */, + BFCCE1212DFBF33500EDE165 /* GoogleService-Info.plist in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1433,6 +1445,7 @@ BF0FA7672DE0469300C9E5F2 /* VPEpisodeView.swift in Sources */, BF0FA6F92DDC64E700C9E5F2 /* VPHomeAPI.swift in Sources */, BF0FA6F42DDC604500C9E5F2 /* VPHUD.swift in Sources */, + BFCCE1282DFC080200EDE165 /* HWPanModalContentView+VPAdd.swift in Sources */, BF0FA7222DDC859D00C9E5F2 /* NSNumber+VPAdd.swift in Sources */, BF0FA73B2DDED1C700C9E5F2 /* VPHomeListCell.swift in Sources */, BF0FA79F2DE1A29A00C9E5F2 /* VPCollectListCell.swift in Sources */, @@ -1844,6 +1857,14 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ + BFCCE1222DFBF57B00EDE165 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { + isa = XCRemoteSwiftPackageReference; + repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; + requirement = { + kind = upToNextMajorVersion; + minimumVersion = 11.14.0; + }; + }; BFF5B2422DF050260044227A /* XCRemoteSwiftPackageReference "facebook-ios-sdk" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/facebook/facebook-ios-sdk"; @@ -1855,6 +1876,16 @@ /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ + BFCCE1232DFBF57B00EDE165 /* FirebaseCore */ = { + isa = XCSwiftPackageProductDependency; + package = BFCCE1222DFBF57B00EDE165 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseCore; + }; + BFCCE1252DFBF57B00EDE165 /* FirebaseMessaging */ = { + isa = XCSwiftPackageProductDependency; + package = BFCCE1222DFBF57B00EDE165 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; + productName = FirebaseMessaging; + }; BFF5B2432DF050260044227A /* FacebookCore */ = { isa = XCSwiftPackageProductDependency; package = BFF5B2422DF050260044227A /* XCRemoteSwiftPackageReference "facebook-ios-sdk" */; diff --git a/Veloria.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Veloria.xcworkspace/xcshareddata/swiftpm/Package.resolved index 70800b1..f0561ff 100644 --- a/Veloria.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Veloria.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,6 +1,24 @@ { - "originHash" : "ca3cf5f8f83d297b47d2cb0edff3e06f294951e2e06fa55cfc82831103499b2a", + "originHash" : "356668427da72005d8cb60963e877385296f1863605fc5a20d1f75f2cec3b22c", "pins" : [ + { + "identity" : "abseil-cpp-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/abseil-cpp-binary.git", + "state" : { + "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5", + "version" : "1.2024072200.0" + } + }, + { + "identity" : "app-check", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/app-check.git", + "state" : { + "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", + "version" : "11.2.0" + } + }, { "identity" : "facebook-ios-sdk", "kind" : "remoteSourceControl", @@ -9,6 +27,114 @@ "revision" : "c19607d535864533523d1f437c84035e5fb101cf", "version" : "14.1.0" } + }, + { + "identity" : "firebase-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/firebase-ios-sdk", + "state" : { + "revision" : "45d327fcbe7793747295346c2209ad419bdead74", + "version" : "11.14.0" + } + }, + { + "identity" : "google-ads-on-device-conversion-ios-sdk", + "kind" : "remoteSourceControl", + "location" : "https://github.com/googleads/google-ads-on-device-conversion-ios-sdk", + "state" : { + "revision" : "70a7857886f065a40486a7607268781c49db04ae", + "version" : "2.0.0" + } + }, + { + "identity" : "googleappmeasurement", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleAppMeasurement.git", + "state" : { + "revision" : "406f72d0d5e9445fd1cf782db3e9e338cee2bed4", + "version" : "11.14.0" + } + }, + { + "identity" : "googledatatransport", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleDataTransport.git", + "state" : { + "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", + "version" : "10.1.0" + } + }, + { + "identity" : "googleutilities", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/GoogleUtilities.git", + "state" : { + "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", + "version" : "8.1.0" + } + }, + { + "identity" : "grpc-binary", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/grpc-binary.git", + "state" : { + "revision" : "cc0001a0cf963aa40501d9c2b181e7fc9fd8ec71", + "version" : "1.69.0" + } + }, + { + "identity" : "gtm-session-fetcher", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/gtm-session-fetcher.git", + "state" : { + "revision" : "c756a29784521063b6a1202907e2cc47f41b667c", + "version" : "4.5.0" + } + }, + { + "identity" : "interop-ios-for-google-sdks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/interop-ios-for-google-sdks.git", + "state" : { + "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe", + "version" : "101.0.0" + } + }, + { + "identity" : "leveldb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/leveldb.git", + "state" : { + "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", + "version" : "1.22.5" + } + }, + { + "identity" : "nanopb", + "kind" : "remoteSourceControl", + "location" : "https://github.com/firebase/nanopb.git", + "state" : { + "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", + "version" : "2.30910.0" + } + }, + { + "identity" : "promises", + "kind" : "remoteSourceControl", + "location" : "https://github.com/google/promises.git", + "state" : { + "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", + "version" : "2.4.0" + } + }, + { + "identity" : "swift-protobuf", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-protobuf.git", + "state" : { + "revision" : "102a647b573f60f73afdce5613a51d71349fe507", + "version" : "1.30.0" + } } ], "version" : 3 diff --git a/Veloria/AppDelegate/AppDelegate+Config.swift b/Veloria/AppDelegate/AppDelegate+Config.swift index 82b5e96..357d14b 100644 --- a/Veloria/AppDelegate/AppDelegate+Config.swift +++ b/Veloria/AppDelegate/AppDelegate+Config.swift @@ -10,12 +10,16 @@ import UIKit extension AppDelegate { func appConfig() { + VPAppTool.appDelegate = self + UIButton.vp_bt_Awake() UIView.vp_Awake() VPToast.config() congifNavigation() + + } } diff --git a/Veloria/AppDelegate/AppDelegate+Open.swift b/Veloria/AppDelegate/AppDelegate+Open.swift index 38cf9cb..c4cca65 100644 --- a/Veloria/AppDelegate/AppDelegate+Open.swift +++ b/Veloria/AppDelegate/AppDelegate+Open.swift @@ -39,7 +39,7 @@ extension SceneDelegate { private static var webpageURL: URL? func vp_handleOpenAppMessage(webpageURL: URL?) { - guard VPNetworkReachabilityManager.manager.isReachable == true, SceneDelegate.haveBeenShownAPNS, self.isOpenApp else { + guard VPNetworkReachabilityManager.manager.isReachable == true, AppDelegate.haveBeenShownAPNS, self.isOpenApp else { if let webpageURL = webpageURL { SceneDelegate.webpageURL = webpageURL } diff --git a/Veloria/AppDelegate/AppDelegate.swift b/Veloria/AppDelegate/AppDelegate.swift index 7b7208a..e21db9d 100644 --- a/Veloria/AppDelegate/AppDelegate.swift +++ b/Veloria/AppDelegate/AppDelegate.swift @@ -6,12 +6,11 @@ // import UIKit +import FirebaseMessaging @main class AppDelegate: UIResponder, UIApplicationDelegate { - - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { appConfig() @@ -25,6 +24,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate { self.registThirdparty(application, didFinishLaunchingWithOptions: launchOptions) + self.requestAPNS() + + return true } diff --git a/Veloria/AppDelegate/SceneDelegate+APNS.swift b/Veloria/AppDelegate/SceneDelegate+APNS.swift index 570d18d..d414657 100644 --- a/Veloria/AppDelegate/SceneDelegate+APNS.swift +++ b/Veloria/AppDelegate/SceneDelegate+APNS.swift @@ -5,12 +5,17 @@ // Created by 湖南秦九 on 2025/6/11. // +import UIKit +import FirebaseMessaging +import FirebaseCore -extension SceneDelegate { +extension AppDelegate { ///是否展示过通知提示 static var haveBeenShownAPNS = false func requestAPNS() { + FirebaseApp.configure() + Messaging.messaging().delegate = self let center = UNUserNotificationCenter.current() @@ -28,12 +33,15 @@ extension SceneDelegate { } #endif } + } else { + Self.haveBeenShownAPNS = true + VPAppTool.sceneDelegate?.vp_retryHandleOpenAppMessage() } UserDefaults.standard.set(Date(), forKey: kVPApnsAlertDefaultsKey) } else { - SceneDelegate.haveBeenShownAPNS = true - self.vp_retryHandleOpenAppMessage() + Self.haveBeenShownAPNS = true + VPAppTool.sceneDelegate?.vp_retryHandleOpenAppMessage() } @@ -49,19 +57,89 @@ extension SceneDelegate { alert.clickHighlightButton = { [weak self] in guard let _ = self else { return } VPAppTool.openApnsSetting() - SceneDelegate.haveBeenShownAPNS = true + Self.haveBeenShownAPNS = true } alert.clickCloseButton = { [weak self] in - guard let self = self else { return } - SceneDelegate.haveBeenShownAPNS = true - self.vp_retryHandleOpenAppMessage() + guard let _ = self else { return } + Self.haveBeenShownAPNS = true + VPAppTool.sceneDelegate?.vp_retryHandleOpenAppMessage() } } } + + + //MARK: -------------- UNUserNotificationCenterDelegate -------------- -extension SceneDelegate: UNUserNotificationCenterDelegate { +extension AppDelegate: UNUserNotificationCenterDelegate { + func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { + Messaging.messaging().apnsToken = deviceToken + } + + func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: any Error) { + vpLog(message: error) + } + + ///APP处于前台是接收通知消息 + func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + completionHandler([.badge, .banner]) + } + + ///点击通知消息进入app + func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { + if #available(iOS 16.0, *) { + UNUserNotificationCenter.current().setBadgeCount(0) + } else { + UIApplication.shared.applicationIconBadgeNumber = 0 + } + + guard let userInfo: [String : Any] = response.notification.request.content.userInfo as? [String : Any] else { + completionHandler() + return + } + + guard let model = VPOpenAppModel.deserialize(from: userInfo) else { + completionHandler() + return + } + VPStatAPI.requestStatApns(messageId: model.message_id ?? "", title: response.notification.request.content.title) + + + if model.path == .videoDetail, let shortPlayId = model.short_play_id { + let vc = VPDetailPlayerViewController() + vc.shortPlayId = shortPlayId + VPAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true) + + } else if model.path == .promotion { + let vc = VPRewardsViewController() + VPAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true) + + } else if model.path == .feedback { + let vc = VPCampaignWebViewController() + vc.urlStr = kVPFeedBackListWebUrl + VPAppTool.topViewController?.navigationController?.pushViewController(vc, animated: true) + } + + completionHandler() + } + } + + +extension AppDelegate: MessagingDelegate { + func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { + if let token = fcmToken { + VPSettingAPI.requestUploadApnsDeviceToken(token: token) + } + +// let dataDict: [String: String] = ["token": fcmToken ?? ""] +// NotificationCenter.default.post( +// name: Notification.Name("FCMToken"), +// object: nil, +// userInfo: dataDict +// ) + } +} diff --git a/Veloria/AppDelegate/SceneDelegate.swift b/Veloria/AppDelegate/SceneDelegate.swift index d662275..1580dc5 100644 --- a/Veloria/AppDelegate/SceneDelegate.swift +++ b/Veloria/AppDelegate/SceneDelegate.swift @@ -18,6 +18,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } + VPAppTool.sceneDelegate = self VPAppTool.windowScene = windowScene onLineTimer = Timer.scheduledTimer(timeInterval: 60 * 10, target: YYWeakProxy(target: self), selector: #selector(handleOnLine), userInfo: nil, repeats: true) @@ -25,7 +26,7 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { NotificationCenter.default.addObserver(self, selector: #selector(reachabilityDidChangeNotification), name: VPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(localizedDidChangeNotification), name: VPLocalizedManager.localizedDidChangeNotification, object: nil) - self.requestAPNS() + if let webpageURL = connectionOptions.userActivities.first?.webpageURL { @@ -70,6 +71,8 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { vpLog(message: "++++++++++++++sceneDidEnterBackground") } + + private func enterForeground() { handleOnLine() diff --git a/Veloria/Base/Extension/HWPanModalContentView+VPAdd.swift b/Veloria/Base/Extension/HWPanModalContentView+VPAdd.swift new file mode 100644 index 0000000..2becefc --- /dev/null +++ b/Veloria/Base/Extension/HWPanModalContentView+VPAdd.swift @@ -0,0 +1,25 @@ +// +// HWPanModalContentView+VPAdd.swift +// Veloria +// +// Created by 湖南秦九 on 2025/6/13. +// + +//HWPanModalContainerView + +extension HWPanModalContentView { + + ///是否存在 + static func doesExis() -> Bool { + var result = false + + VPAppTool.keyWindow?.subviews.forEach({ + if $0.isKind(of: HWPanModalContainerView.self) { + result = true + } + }) + return result + } + + +} diff --git a/Veloria/Base/Extension/UIColor+VPAdd.swift b/Veloria/Base/Extension/UIColor+VPAdd.swift index ed85572..9713ac8 100644 --- a/Veloria/Base/Extension/UIColor+VPAdd.swift +++ b/Veloria/Base/Extension/UIColor+VPAdd.swift @@ -246,4 +246,8 @@ extension UIColor { return UIColor(rgb: 0xDAFDFF, alpha: alpha) } + static func colorE0E0E0(alpha: CGFloat = 1) -> UIColor { + return UIColor(rgb: 0xE0E0E0, alpha: alpha) + } + } diff --git a/Veloria/Base/Networking/API/VPSettingAPI.swift b/Veloria/Base/Networking/API/VPSettingAPI.swift index 3df5da5..5cb93d5 100644 --- a/Veloria/Base/Networking/API/VPSettingAPI.swift +++ b/Veloria/Base/Networking/API/VPSettingAPI.swift @@ -31,4 +31,15 @@ class VPSettingAPI { } } + + static func requestUploadApnsDeviceToken(token: String) { + var param = VPNetworkParameters(path: "/customer/firebaseToken") + param.parameters = ["fcm_token": token] + param.isToast = false + + VPNetwork.request(parameters: param) { (response: VPNetworkResponse) in + + } + + } } diff --git a/Veloria/Base/Networking/API/VPStatAPI.swift b/Veloria/Base/Networking/API/VPStatAPI.swift index 807ac97..b91a93a 100644 --- a/Veloria/Base/Networking/API/VPStatAPI.swift +++ b/Veloria/Base/Networking/API/VPStatAPI.swift @@ -49,4 +49,19 @@ class VPStatAPI: NSObject { } } + + ///统计点击推送消息 + static func requestStatApns(messageId: String, title: String) { + var param = VPNetworkParameters(path: "/message/sendReport") + param.isToast = false + param.isLoding = false + param.parameters = [ + "message_id" : messageId, + "title" : title + ] + + VPNetwork.request(parameters: param) { (response: VPNetworkResponse) in + + } + } } diff --git a/Veloria/Class/Home/Controller/VPHomePageViewController.swift b/Veloria/Class/Home/Controller/VPHomePageViewController.swift index b094255..37f7d81 100644 --- a/Veloria/Class/Home/Controller/VPHomePageViewController.swift +++ b/Veloria/Class/Home/Controller/VPHomePageViewController.swift @@ -59,7 +59,9 @@ class VPHomePageViewController: VPViewController { }() private lazy var pageView: WMZPageView = { - let y = UIScreen.statusBarHeight + 115 + let titleHeight = self.titleLabel.sizeThatFits(.init(width: UIScreen.width - 30, height: 1000)).height + + let y = UIScreen.statusBarHeight + 28 + titleHeight + 14 + 40 + 10 let width = UIScreen.width let height = UIScreen.height - y let pageView = WMZPageView(frame: CGRect(x: 0, y: y, width: width, height: height), param: pageParam, parentReponder: self) @@ -105,6 +107,8 @@ class VPHomePageViewController: VPViewController { let label = UILabel() label.font = .fontMedium(ofSize: 16) label.textColor = .colorFFFFFF() + label.numberOfLines = 0 + label.textAlignment = .center label.text = "veloria_addictive_short_await".localized return label }() @@ -122,15 +126,24 @@ class VPHomePageViewController: VPViewController { return button }() + private lazy var emptyView: VPEmptyView = { + let view = VPEmptyView() + view.image = UIImage(named: "empty_image_03") + view.title = "veloria_no_network".localized + view.des = "veloria_no_network_string".localized + view.clickButtonBlock = { [weak self] in + guard let self = self else { return } + self.vp_setup() + } + return view + }() + override func viewDidLoad() { super.viewDidLoad() NotificationCenter.default.addObserver(self, selector: #selector(reachabilityDidChangeNotification), name: VPNetworkReachabilityManager.reachabilityDidChangeNotification, object: nil) - requestHomeData() - requestCategories() - setupPageView() - vp_setupUI() + vp_setup() } @@ -190,14 +203,36 @@ extension VPHomePageViewController { requestHomeData() } requestCategories() + + vp_setupUI() } } } extension VPHomePageViewController { + private func vp_setup() { + requestHomeData() + requestCategories() + setupPageView() + vp_setupUI() + } private func vp_setupUI() { + guard VPNetworkReachabilityManager.manager.isReachable == true, pageView.superview == nil else { + if emptyView.superview == nil { + view.addSubview(emptyView) + emptyView.snp.makeConstraints { make in + make.left.equalToSuperview() + make.centerX.equalToSuperview() + make.centerY.equalToSuperview().offset(-100) + } + } + return + } + + emptyView.removeFromSuperview() + view.addSubview(titleLabel) view.addSubview(searchButton) view.addSubview(historyButton) @@ -206,12 +241,14 @@ extension VPHomePageViewController { titleLabel.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalToSuperview().offset(UIScreen.statusBarHeight + 28) + make.right.lessThanOrEqualToSuperview().offset(-15) } searchButton.snp.makeConstraints { make in make.left.equalToSuperview().offset(15) make.right.equalTo(historyButton.snp.left).offset(-10) - make.top.equalToSuperview().offset(UIScreen.statusBarHeight + 65) +// make.top.equalToSuperview().offset(UIScreen.statusBarHeight + 65) + make.top.equalTo(titleLabel.snp.bottom).offset(14) make.height.equalTo(40) } diff --git a/Veloria/Class/Home/View/VPHomeRankingCell.swift b/Veloria/Class/Home/View/VPHomeRankingCell.swift index 7db5daa..4ddd0b9 100644 --- a/Veloria/Class/Home/View/VPHomeRankingCell.swift +++ b/Veloria/Class/Home/View/VPHomeRankingCell.swift @@ -34,6 +34,11 @@ class VPHomeRankingCell: VPCollectionViewCell { var row: Int = 0 { didSet { numLabel.text = "\(row + 1)" + if row < 3 { + numView.image = UIImage(named: "num_icon_01") + } else { + numView.image = UIImage(named: "num_icon_02") + } } } @@ -74,7 +79,7 @@ class VPHomeRankingCell: VPCollectionViewCell { return button }() - private lazy var numView: UIView = { + private lazy var numView: UIImageView = { let view = UIImageView(image: UIImage(named: "num_icon_01")) return view }() diff --git a/Veloria/Class/Home/View/VPSearchHistoryView.swift b/Veloria/Class/Home/View/VPSearchHistoryView.swift index a11d647..c5fb981 100644 --- a/Veloria/Class/Home/View/VPSearchHistoryView.swift +++ b/Veloria/Class/Home/View/VPSearchHistoryView.swift @@ -37,7 +37,7 @@ class VPSearchHistoryView: UIView { let tagView = JXTagView(frame: .init(x: 0, y: 0, width: UIScreen.width, height: 10)) tagView.tagBackgroundColor = .colorFFFFFF(alpha: 0.1) tagView.tagHeight = 24 - tagView.textMargin = 5 + tagView.textMargin = 10 tagView.tagCornerRadius = 12 tagView.tagHorizontalGap = 8 tagView.tagVerticalGap = 8 diff --git a/Veloria/Class/Login/View/VPLoginContentView.swift b/Veloria/Class/Login/View/VPLoginContentView.swift index 579981a..323edd2 100644 --- a/Veloria/Class/Login/View/VPLoginContentView.swift +++ b/Veloria/Class/Login/View/VPLoginContentView.swift @@ -8,7 +8,7 @@ import UIKit class VPLoginContentView: HWPanModalContentView { - + private lazy var bgView: UIImageView = { let imageView = UIImageView(image: UIImage(named: "bg_image_01")) return imageView @@ -107,7 +107,8 @@ class VPLoginContentView: HWPanModalContentView { } override func longFormHeight() -> PanModalHeight { - return PanModalHeightMake(.content, UIScreen.height * (2 / 3)) +// return PanModalHeightMake(.content, UIScreen.height * (2 / 3)) + return PanModalHeightMake(.content, UIScreen.tabbarSafeBottomMargin + 300) } override func showDragIndicator() -> Bool { @@ -201,7 +202,7 @@ extension VPLoginContentView { agreementLabel.snp.makeConstraints { make in make.centerX.equalToSuperview() - make.bottom.equalToSuperview().offset(-(UIScreen.tabbarSafeBottomMargin + 10)) + make.bottom.equalToSuperview().offset(-(UIScreen.tabbarSafeBottomMargin + 20)) make.width.equalTo(agreementLabel.textLayout?.textBoundingSize.width ?? 0) make.height.equalTo(agreementLabel.textLayout?.textBoundingSize.height ?? 0) } diff --git a/Veloria/Class/Me/Controller/VPMeViewController.swift b/Veloria/Class/Me/Controller/VPMeViewController.swift index a7054b9..99448e2 100644 --- a/Veloria/Class/Me/Controller/VPMeViewController.swift +++ b/Veloria/Class/Me/Controller/VPMeViewController.swift @@ -93,11 +93,13 @@ extension VPMeViewController { private func showVipAlert() { guard VPLoginManager.manager.userInfo?.is_vip != true else { return } guard VPVipAlertView.isAllowShowAlert else { return } + guard !HWPanModalContentView.doesExis() else { return } VPWalletAPI.requestPayTemplate { [weak self] model in guard let self = self else { return } guard self.isDidAppear else { return } guard self.vipAlertView == nil else { return } + guard !HWPanModalContentView.doesExis() else { return } guard let item = model?.list_sub_vip?.first else { return } let alert = VPVipAlertView().show() diff --git a/Veloria/Class/Me/View/VPMeToolCell.swift b/Veloria/Class/Me/View/VPMeToolCell.swift index 4bbe529..baaf7f6 100644 --- a/Veloria/Class/Me/View/VPMeToolCell.swift +++ b/Veloria/Class/Me/View/VPMeToolCell.swift @@ -11,7 +11,7 @@ class VPMeToolCell: VPTableViewCell { private lazy var stackView: UIStackView = { - let view = UIStackView(arrangedSubviews: [walletButton, storeButton, /*rewardsButton,*/ favoritesButton]) + let view = UIStackView(arrangedSubviews: [walletButton, storeButton, rewardsButton, favoritesButton]) view.axis = .horizontal view.distribution = .fillEqually view.alignment = .center diff --git a/Veloria/Class/Player/View/VPPlayerVipBuyView.swift b/Veloria/Class/Player/View/VPPlayerVipBuyView.swift index 35ec498..4d9412e 100644 --- a/Veloria/Class/Player/View/VPPlayerVipBuyView.swift +++ b/Veloria/Class/Player/View/VPPlayerVipBuyView.swift @@ -11,7 +11,8 @@ class VPPlayerVipBuyView: UIView { var dataArr: [VPPayTemplateItem] = [] { didSet { - self.collectionView.reloadData() + self.pageScrollView.reloadData() + updatePrivilegeData() } } @@ -22,23 +23,36 @@ class VPPlayerVipBuyView: UIView { private var currentIndex: Int? - private lazy var collectionViewLayout: UICollectionViewFlowLayout = { - let layout = UICollectionViewFlowLayout() - layout.scrollDirection = .horizontal - layout.minimumLineSpacing = 10 - layout.sectionInset = .init(top: 0, left: 15, bottom: 0, right: 15) - layout.itemSize = .init(width: 332, height: 138) - return layout +// private lazy var collectionViewLayout: UICollectionViewFlowLayout = { +// let layout = UICollectionViewFlowLayout() +// layout.scrollDirection = .horizontal +// layout.minimumLineSpacing = 10 +// layout.sectionInset = .init(top: 0, left: 15, bottom: 0, right: 15) +// layout.itemSize = .init(width: 332, height: 138) +// return layout +// }() +// +// private lazy var collectionView: VPCollectionView = { +// let collectionView = VPCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) +// collectionView.delegate = self +// collectionView.dataSource = self +// collectionView.showsHorizontalScrollIndicator = false +// collectionView.register(VPVipBuyCell.self, forCellWithReuseIdentifier: "cell") +// return collectionView +// }() + + private lazy var pageScrollView: ZKCycleScrollView = { + let view = ZKCycleScrollView(frame: .zero, shouldInfiniteLoop: false) + view.itemSize = .init(width: 332, height: 138) + view.itemSpacing = 10 + view.delegate = self + view.dataSource = self + view.hidesPageControl = true + view.isAutoScroll = false + view.register(VPVipBuyCell.self, forCellWithReuseIdentifier: "cell") + return view }() - private lazy var collectionView: VPCollectionView = { - let collectionView = VPCollectionView(frame: .zero, collectionViewLayout: collectionViewLayout) - collectionView.delegate = self - collectionView.dataSource = self - collectionView.showsHorizontalScrollIndicator = false - collectionView.register(VPVipBuyCell.self, forCellWithReuseIdentifier: "cell") - return collectionView - }() private lazy var tipBgView: UIView = { let view = VPGradientView() @@ -52,33 +66,8 @@ class VPPlayerVipBuyView: UIView { }() private lazy var tipLabel: UILabel = { - - -// let hText1 = "1 week".localized - let text1 = "· " + "veloria_store_no_ads".localized - -// let hText2 = "8 days".localized - let text2 = "· " + "veloria_store_donate_coins".localized - - let text3 = "· " + "veloria_store_auto_renew".localized - - let text = text1 + "\n" + text2 + "\n" + text3 - -// let hRange1 = text.ocString().range(of: hText1) -// let hRange2 = text.ocString().range(of: hText2) - - let string = NSMutableAttributedString(string: text) - string.lineSpacing = 5 - string.color = .colorFFFFFF(alpha: 0.8) -// string.setColor(.color05CEA0(), range: hRange1) -// string.setColor(.color05CEA0(), range: hRange2) - - - - let label = UILabel() label.font = .fontRegular(ofSize: 12) - label.attributedText = string label.numberOfLines = 0 return label }() @@ -87,31 +76,71 @@ class VPPlayerVipBuyView: UIView { super.init(frame: frame) vp_setupUI() + updatePrivilegeData() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + private func updatePrivilegeData() { + var hText1: String = "veloria_week".localized + var hText2: String = "veloria_days_count_text".localizedReplace(text: "8") + + if dataArr.count > 0 { + let index = self.pageScrollView.pageIndex + let model = dataArr[index] + if model.vip_type_key == .month { + hText1 = "veloria_month".localized + } else if model.vip_type_key == .quarter { + hText1 = "veloria_quarter".localized + } else if model.vip_type_key == .year { + hText1 = "veloria_year".localized + } + hText2 = "veloria_days_count_text".localizedReplace(text: "\(model.send_coin_ttl ?? 0)") + } + + + let text1 = "· " + "veloria_store_no_ads".localizedReplace(text: hText1) + + let text2 = "· " + "veloria_store_donate_coins_ios".localizedReplace(text: hText2) + + let text3 = "· " + "veloria_store_auto_renew".localized + + let text = text1 + "\n" + text2 + "\n" + text3 + + let hRange1 = text.ocString().range(of: hText1) + let hRange2 = text.ocString().range(of: hText2) + + let string = NSMutableAttributedString(string: text) + string.lineSpacing = 5 + string.color = .colorFFFFFF(alpha: 0.8) + + string.setColor(.color05CEA0(), range: hRange1) + string.setColor(.color05CEA0(), range: hRange2) + + tipLabel.attributedText = string + } + } extension VPPlayerVipBuyView { private func vp_setupUI() { - addSubview(collectionView) + addSubview(pageScrollView) addSubview(tipBgView) tipBgView.addSubview(tipLabel) - collectionView.snp.makeConstraints { make in + pageScrollView.snp.makeConstraints { make in make.left.right.equalToSuperview() make.top.equalToSuperview() - make.height.equalTo(collectionViewLayout.itemSize.height) + make.height.equalTo(pageScrollView.itemSize.height) } tipBgView.snp.makeConstraints { make in make.left.equalToSuperview().offset(15) make.right.equalToSuperview().offset(-15) - make.top.equalTo(collectionView.snp.bottom).offset(10) + make.top.equalTo(pageScrollView.snp.bottom).offset(10) make.bottom.equalToSuperview() } @@ -124,7 +153,7 @@ extension VPPlayerVipBuyView { } } - +/* //MARK: -------------- UICollectionViewDelegate UICollectionViewDataSource -------------- extension VPPlayerVipBuyView: UICollectionViewDelegate, UICollectionViewDataSource { @@ -153,4 +182,41 @@ extension VPPlayerVipBuyView: UICollectionViewDelegate, UICollectionViewDataSour } } } +} + */ + + +//MARK: -------------- ZKCycleScrollViewDelegate ZKCycleScrollViewDataSource -------------- +extension VPPlayerVipBuyView: ZKCycleScrollViewDelegate, ZKCycleScrollViewDataSource { + func numberOfItems(in cycleScrollView: ZKCycleScrollView) -> Int { + return dataArr.count + } + + func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, cellForItemAt index: Int) -> ZKCycleScrollViewCell { + let cell = cycleScrollView.dequeueReusableCell(withReuseIdentifier: "cell", for: index) as! VPVipBuyCell + cell.item = dataArr[index] + cell.vp_isSelected = index == currentIndex + return cell + } + + func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didSelectItemAt index: Int) { + if currentIndex != index { + currentIndex = index + cycleScrollView.reloadData() + } + + VPIAPManager.manager.start(model: dataArr[index]) { finish in + if finish { + VPLoginManager.manager.updateUserInfo(completer: nil) + } + } + } + + func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didScrollFromIndex fromIndex: Int, toIndex: Int) { + if fromIndex != toIndex { + updatePrivilegeData() + } + } + + } diff --git a/Veloria/Class/Rewards/Controller/VPRewardsViewController.swift b/Veloria/Class/Rewards/Controller/VPRewardsViewController.swift index a2dbbf9..7079296 100644 --- a/Veloria/Class/Rewards/Controller/VPRewardsViewController.swift +++ b/Veloria/Class/Rewards/Controller/VPRewardsViewController.swift @@ -17,4 +17,9 @@ class VPRewardsViewController: VPCampaignWebViewController { } + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + self.webView.reload() + } + } diff --git a/Veloria/Class/Wallet/Controller/VPVipViewController.swift b/Veloria/Class/Wallet/Controller/VPVipViewController.swift index cf8feba..6512fba 100644 --- a/Veloria/Class/Wallet/Controller/VPVipViewController.swift +++ b/Veloria/Class/Wallet/Controller/VPVipViewController.swift @@ -12,7 +12,10 @@ class VPVipViewController: VPViewController { var dataArr: [VPPayTemplateItem] = [] { didSet { - self.collectionView.reloadData() +// self.collectionView.reloadData() + self.pageScrollView.reloadData() + + updatePrivilegeData() } } @@ -48,31 +51,12 @@ class VPVipViewController: VPViewController { private lazy var privilegeView1: VPVipPrivilegeItemView = { let view = VPVipPrivilegeItemView() view.icon = UIImage(named: "privilege_icon_04") - -// let hText = "1 week".localized - let string = NSMutableAttributedString(string: "veloria_store_no_ads".localized) -// let hRange = string.string.ocString().range(of: hText) - - string.color = .colorFFFFFF() -// string.setColor(.color05CEA0(), range: hRange) - - view.string = string - return view }() private lazy var privilegeView2: VPVipPrivilegeItemView = { let view = VPVipPrivilegeItemView() view.icon = UIImage(named: "privilege_icon_05") - -// let hText = "8 days".localized - let string = NSMutableAttributedString(string: "veloria_store_donate_coins".localized) -// let hRange = string.string.ocString().range(of: hText) - - string.color = .colorFFFFFF() -// string.setColor(.color05CEA0(), range: hRange) - - view.string = string return view }() @@ -81,13 +65,11 @@ class VPVipViewController: VPViewController { view.icon = UIImage(named: "privilege_icon_06") let string = NSMutableAttributedString(string: "veloria_store_auto_renew".localized) - string.color = .colorFFFFFF() - view.string = string return view }() - + /* private lazy var collectionViewLayout: UICollectionViewFlowLayout = { let layout = UICollectionViewFlowLayout() layout.scrollDirection = .horizontal @@ -105,6 +87,19 @@ class VPVipViewController: VPViewController { collectionView.register(VPVipBuyCell.self, forCellWithReuseIdentifier: "cell") return collectionView }() + */ + + private lazy var pageScrollView: ZKCycleScrollView = { + let view = ZKCycleScrollView(frame: .zero, shouldInfiniteLoop: false) + view.itemSize = .init(width: 332, height: 138) + view.itemSpacing = 10 + view.delegate = self + view.dataSource = self + view.hidesPageControl = true + view.isAutoScroll = false + view.register(VPVipBuyCell.self, forCellWithReuseIdentifier: "cell") + return view + }() private lazy var tipLabel: UILabel = { let label = UILabel() @@ -115,21 +110,6 @@ class VPVipViewController: VPViewController { return label }() -// private lazy var buyButton: UIButton = { -// let button = VPGradientButton(type: .custom) -// button.layer.cornerRadius = 24 -// button.layer.masksToBounds = true -// button.bt_setGradientBorder() -// button.colors = [UIColor.color05CEA0(alpha: 0.3).cgColor, UIColor.color7C174F(alpha: 0.3).cgColor] -// button.locations = [0, 1] -// button.startPoint = .init(x: 0, y: 0.3) -// button.endPoint = .init(x: 1, y: 0.8) -// button.setTitle("Buy Now".localized, for: .normal) -// button.setTitleColor(.colorFFFFFF(), for: .normal) -// button.titleLabel?.font = .fontMedium(ofSize: 14) -// return button -// }() - override func viewDidLoad() { super.viewDidLoad() @@ -137,9 +117,48 @@ class VPVipViewController: VPViewController { self.view.backgroundColor = .clear vp_setupUI() + + updatePrivilegeData() } + private func updatePrivilegeData() { + let textColor = UIColor.colorFFFFFF() + let hColor = UIColor.color05CEA0() + + var hText1: String = "veloria_week".localized + var hText2: String = "veloria_days_count_text".localizedReplace(text: "8") + + if dataArr.count > 0 { + let index = self.pageScrollView.pageIndex + let model = dataArr[index] + if model.vip_type_key == .month { + hText1 = "veloria_month".localized + } else if model.vip_type_key == .quarter { + hText1 = "veloria_quarter".localized + } else if model.vip_type_key == .year { + hText1 = "veloria_year".localized + } + hText2 = "veloria_days_count_text".localizedReplace(text: "\(model.send_coin_ttl ?? 0)") + } + + + + let string1 = NSMutableAttributedString(string: "veloria_store_no_ads".localizedReplace(text: hText1)) + let hRange1 = string1.string.ocString().range(of: hText1) + string1.color = textColor + string1.setColor(hColor, range: hRange1) + privilegeView1.string = string1 + + + let string2 = NSMutableAttributedString(string: "veloria_store_donate_coins_ios".localizedReplace(text: hText2)) + let hRange2 = string2.string.ocString().range(of: hText2) + string2.color = textColor + string2.setColor(hColor, range: hRange2) + privilegeView2.string = string2 + + } + } extension VPVipViewController { @@ -149,9 +168,8 @@ extension VPVipViewController { scrollView.addSubview(iconImageView) scrollView.addSubview(iconTextLabel) scrollView.addSubview(stackView) - scrollView.addSubview(collectionView) + scrollView.addSubview(pageScrollView) scrollView.addSubview(tipLabel) -// view.addSubview(buyButton) scrollView.snp.makeConstraints { make in make.left.right.top.equalToSuperview() @@ -175,31 +193,26 @@ extension VPVipViewController { make.top.equalTo(iconImageView.snp.bottom).offset(18) } - collectionView.snp.makeConstraints { make in + pageScrollView.snp.makeConstraints { make in make.left.equalToSuperview() make.centerX.equalToSuperview() make.top.equalTo(stackView.snp.bottom).offset(7) - make.height.equalTo(collectionViewLayout.itemSize.height) + make.height.equalTo(pageScrollView.itemSize.height) } tipLabel.snp.makeConstraints { make in - make.top.equalTo(collectionView.snp.bottom).offset(14) + make.top.equalTo(pageScrollView.snp.bottom).offset(14) make.left.equalToSuperview().offset(15) make.width.lessThanOrEqualTo(UIScreen.width - 30) // make.bottom.equalToSuperview().offset(-10) make.bottom.equalToSuperview().offset(-(UIScreen.tabbarSafeBottomMargin + 10)) } -// buyButton.snp.makeConstraints { make in -// make.left.equalToSuperview().offset(15) -// make.centerX.equalToSuperview() -// make.bottom.equalToSuperview().offset(-(UIScreen.tabbarSafeBottomMargin + 10)) -// make.height.equalTo(48) -// } } } +/* //MARK: -------------- UICollectionViewDelegate UICollectionViewDataSource -------------- extension VPVipViewController: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { @@ -226,4 +239,40 @@ extension VPVipViewController: UICollectionViewDelegate, UICollectionViewDataSou } } +} + */ + +//MARK: -------------- ZKCycleScrollViewDelegate ZKCycleScrollViewDataSource -------------- +extension VPVipViewController: ZKCycleScrollViewDelegate, ZKCycleScrollViewDataSource { + func numberOfItems(in cycleScrollView: ZKCycleScrollView) -> Int { + return dataArr.count + } + + func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, cellForItemAt index: Int) -> ZKCycleScrollViewCell { + let cell = cycleScrollView.dequeueReusableCell(withReuseIdentifier: "cell", for: index) as! VPVipBuyCell + cell.item = dataArr[index] + cell.vp_isSelected = index == currentIndex + return cell + } + + func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didSelectItemAt index: Int) { + if currentIndex != index { + currentIndex = index + cycleScrollView.reloadData() + } + + VPIAPManager.manager.start(model: dataArr[index]) { finish in + if finish { + VPLoginManager.manager.updateUserInfo(completer: nil) + } + } + } + + func cycleScrollView(_ cycleScrollView: ZKCycleScrollView, didScrollFromIndex fromIndex: Int, toIndex: Int) { + if fromIndex != toIndex { + updatePrivilegeData() + } + } + + } diff --git a/Veloria/Class/Wallet/Model/VPPayTemplateItem.swift b/Veloria/Class/Wallet/Model/VPPayTemplateItem.swift index e9cd0ff..8e75ade 100644 --- a/Veloria/Class/Wallet/Model/VPPayTemplateItem.swift +++ b/Veloria/Class/Wallet/Model/VPPayTemplateItem.swift @@ -52,6 +52,7 @@ class VPPayTemplateItem: VPModel, SmartCodable { var brief: String? var title: String? + var send_coin_ttl: Int? diff --git a/Veloria/Class/Wallet/View/VPVipBuyCell.swift b/Veloria/Class/Wallet/View/VPVipBuyCell.swift index 0c92a2c..60d1fa6 100644 --- a/Veloria/Class/Wallet/View/VPVipBuyCell.swift +++ b/Veloria/Class/Wallet/View/VPVipBuyCell.swift @@ -7,7 +7,7 @@ import UIKit -class VPVipBuyCell: VPCollectionViewCell { +class VPVipBuyCell: ZKCycleScrollViewCell { var item: VPPayTemplateItem? { diff --git a/Veloria/Libs/AppTool/VPAppTool.swift b/Veloria/Libs/AppTool/VPAppTool.swift index f56f09f..b736966 100644 --- a/Veloria/Libs/AppTool/VPAppTool.swift +++ b/Veloria/Libs/AppTool/VPAppTool.swift @@ -9,8 +9,12 @@ import UIKit class VPAppTool: NSObject { + static var appDelegate: AppDelegate? + static var sceneDelegate: SceneDelegate? + static var windowScene: UIWindowScene? + static var keyWindow: UIWindow? { return windowScene?.keyWindow } diff --git a/Veloria/Libs/Empty/VPEmptyView.swift b/Veloria/Libs/Empty/VPEmptyView.swift index 9d14a43..db4e71b 100644 --- a/Veloria/Libs/Empty/VPEmptyView.swift +++ b/Veloria/Libs/Empty/VPEmptyView.swift @@ -6,6 +6,7 @@ // import UIKit +import SnapKit class VPEmptyView: UIView { @@ -27,6 +28,15 @@ class VPEmptyView: UIView { } } + var clickButtonBlock: (() -> Void)? { + didSet { + updateLayout() + } + } + + var desBottomConstraint: Constraint? + var buttonBottomConstraint: Constraint? + private lazy var imageView: UIImageView = { let imageView = UIImageView() return imageView @@ -46,16 +56,50 @@ class VPEmptyView: UIView { return label }() + private lazy var button: UIButton = { + let button = UIButton(type: .custom) + button.layer.cornerRadius = 24 + button.layer.masksToBounds = true + button.layer.borderWidth = 1 + button.layer.borderColor = UIColor.colorE0E0E0().cgColor + button.setTitle("veloria_try_again".localized, for: .normal) + button.setTitleColor(.colorE0E0E0(), for: .normal) + button.titleLabel?.font = .fontRegular(ofSize: 14) + button.addTarget(self, action: #selector(hadnleButton), for: .touchUpInside) + return button + }() + override init(frame: CGRect) { super.init(frame: frame) vp_setupUI() + + updateLayout() } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + private func updateLayout() { + + if clickButtonBlock == nil { + self.button.isHidden = true + self.buttonBottomConstraint?.isActive = false + self.desBottomConstraint?.isActive = true + } else { + self.button.isHidden = false + self.buttonBottomConstraint?.isActive = true + self.desBottomConstraint?.isActive = false + } + } + + + @objc private func hadnleButton() { + self.clickButtonBlock?() + } + } extension VPEmptyView { @@ -64,6 +108,7 @@ extension VPEmptyView { addSubview(imageView) addSubview(titleLabel) addSubview(desLabel) + addSubview(button) imageView.snp.makeConstraints { make in make.centerX.equalToSuperview() @@ -78,9 +123,18 @@ extension VPEmptyView { desLabel.snp.makeConstraints { make in make.centerX.equalToSuperview() make.top.equalTo(titleLabel.snp.bottom).offset(15) - make.bottom.equalToSuperview() + self.desBottomConstraint = make.bottom.equalToSuperview().constraint } + button.snp.makeConstraints { make in + make.centerX.equalToSuperview() + make.width.equalTo(200) + make.height.equalTo(48) + make.top.equalTo(desLabel.snp.bottom).offset(30) + self.buttonBottomConstraint = make.bottom.equalToSuperview().constraint + } + + } } diff --git a/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/Contents.json b/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/Contents.json new file mode 100644 index 0000000..58aef6f --- /dev/null +++ b/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "缺省页-无网络-切图图层@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "缺省页-无网络-切图图层@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/缺省页-无网络-切图图层@2x.png b/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/缺省页-无网络-切图图层@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..dd59b584429dac81a8fb7971f2ce049868c9c26b GIT binary patch literal 40272 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 literal 0 HcmV?d00001 diff --git a/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/缺省页-无网络-切图图层@3x.png b/Veloria/Source/Assets.xcassets/image/empty_image_03.imageset/缺省页-无网络-切图图层@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..31b5e6e41fc09d762ff3f6e6494a1cef549659c4 GIT binary patch literal 73490 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 Myqa8@jLGN!2Tmw&-2eap literal 0 HcmV?d00001 diff --git a/Veloria/Source/GoogleService-Info.plist b/Veloria/Source/GoogleService-Info.plist new file mode 100644 index 0000000..8449708 --- /dev/null +++ b/Veloria/Source/GoogleService-Info.plist @@ -0,0 +1,30 @@ + + + + + API_KEY + AIzaSyBy9LyOWrl2LZxpT1YGg0czY6v8RY6T_Gg + GCM_SENDER_ID + 697499054017 + PLIST_VERSION + 1 + BUNDLE_ID + com.qjwl168.veloria.ios + PROJECT_ID + veloria-4c04f + STORAGE_BUCKET + veloria-4c04f.firebasestorage.app + IS_ADS_ENABLED + + IS_ANALYTICS_ENABLED + + IS_APPINVITE_ENABLED + + IS_GCM_ENABLED + + IS_SIGNIN_ENABLED + + GOOGLE_APP_ID + 1:697499054017:ios:dd288439560da53f598940 + + \ No newline at end of file diff --git a/Veloria/Source/Info.plist b/Veloria/Source/Info.plist index 4a944ba..46a8736 100644 --- a/Veloria/Source/Info.plist +++ b/Veloria/Source/Info.plist @@ -29,6 +29,8 @@ b65496dbe4e9f22569d4438f693ae5a2 FacebookDisplayName $(PRODUCT_NAME) + FirebaseAppDelegateProxyEnabled + ITSAppUsesNonExemptEncryption LSApplicationQueriesSchemes diff --git a/Veloria/Source/en.lproj/Localizable.strings b/Veloria/Source/en.lproj/Localizable.strings index e484d0e..f0141c1 100644 --- a/Veloria/Source/en.lproj/Localizable.strings +++ b/Veloria/Source/en.lproj/Localizable.strings @@ -85,6 +85,15 @@ "veloria_order_record" = "Order Record"; "veloria_allow" = "Allow"; "veloria_get_started" = "Get Started"; +"veloria_no_network" = "No Network"; +"veloria_no_network_string" = "Unable to connect. Try again later."; +"veloria_try_again" = "Try again"; +"veloria_week" = "1 week"; +"veloria_month" = "1 month"; +"veloria_quarter" = "1 quarter"; +"veloria_year" = "1 year"; +"veloria_days_count_text" = "## days"; + "veloria_bonus_count_text" = "+## Bonus"; "veloria_no_data" = "Nothing Here Yet"; @@ -101,8 +110,8 @@ "veloria_ad_free_streaming_ios" = "Ad-Free
    Streaming"; "veloria_exclusive_episodes_ios" = "Exclusive
    Episodes"; "veloria_daily_free_coins_ios" = "Daily free
    coins"; -"veloria_store_no_ads" = "Unlimited access to all series for 1 week (No Ads)"; -"veloria_store_donate_coins" = "The donate coins will expire in 8 days"; +"veloria_store_no_ads" = "Unlimited access to all series for ## (No Ads)"; +"veloria_store_donate_coins_ios" = "The donate coins will expire in ##"; "veloria_store_auto_renew" = "Auto renew, cancel anytime"; "veloria_login_hint_ios" = "By logging in you agree to: #1# & #2#"; "veloria_video_lock_tip_text" = "Please unlock the previous episode"; diff --git a/Veloria/Veloria.entitlements b/Veloria/Veloria.entitlements index 02275d0..ccba362 100644 --- a/Veloria/Veloria.entitlements +++ b/Veloria/Veloria.entitlements @@ -2,6 +2,8 @@ + aps-environment + development com.apple.developer.applesignin Default diff --git a/资料/推送证书/AuthKey_Y6U23RSYN7.p8 b/资料/推送证书/AuthKey_Y6U23RSYN7.p8 new file mode 100644 index 0000000..593fbc2 --- /dev/null +++ b/资料/推送证书/AuthKey_Y6U23RSYN7.p8 @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgVb82lHXUZ6pgLQA2 +wFBm1oRVv5P/4UJJsywjMWH1qGygCgYIKoZIzj0DAQehRANCAAThnox8pNNZSVh3 +vvlz2kyub1gUGhwImyM/ZaG3SV5399x6fVrQ0zxzi7gD9/a6BqBIKQ1/dRS/wGm7 +Jqrdp1Xg +-----END PRIVATE KEY----- \ No newline at end of file