Browse Source

【会员系统】APPstore账户权益完善

wanjun 4 months ago
parent
commit
7ea10e8bd6

+ 24 - 8
PDF Office/PDF Master/Class/Purchase/DMG/Verification/KMVerificationMessageViewController.m

@@ -430,21 +430,27 @@ NSPopoverDelegate>
         [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type3 ||
         [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type5 ||
         [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type7 ||
-        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type8 ||
+//        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type8 ||
         [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type9 ||
+//        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type13 ||
         [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type11 ||
-        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type13) {
-        if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type1 ||
-            [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type9) {
+        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type1 ||
+        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type3 ||
+        [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type4) {
+        if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type1) {
             self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"Free Trial", nil)];
         } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type3 ||
                    [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type11) {
             self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"开通会员", nil)];
-        } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type5) {
+        } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type5 ||
+                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type9 ||
+                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type1 ||
+                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type3 ||
+                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type4) {
             self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"升级", nil)];
-        } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type7 ||
-                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type8 ||
-                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type13) {
+        } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type7
+//                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type8 ||
+                   /*[KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type13*/) {
             self.button.title = [NSString stringWithFormat:@" %@ ",NSLocalizedString(@"立即续费", nil)];
         }
         [self.button setTitleColor:[NSColor whiteColor]];
@@ -635,6 +641,11 @@ NSPopoverDelegate>
                    [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type11 ||
                    [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type13) {
             [[KMProductCompareWC shared] setOrientationType:KMCompareTableTypeLite_MacWindows];
+        } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type1 ||
+                   [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type4) {
+            [[KMProductCompareWC shared] setOrientationType:KMCompareTableTypePro_Advanced];
+        } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type3) {
+            [[KMProductCompareWC shared] setOrientationType:KMCompareTableTypePro_Base];
         }
         [[KMProductCompareWC shared] showWindow:nil];
     } else {
@@ -653,6 +664,11 @@ NSPopoverDelegate>
                            [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type11 ||
                            [KMMemberInfo shared].userScenarioType == KMUserScenarioTypeLite_type13) {
                     [[KMProductCompareWC shared] setOrientationType:KMCompareTableTypeLite_MacWindows];
+                } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type1 ||
+                           [KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type4) {
+                    [[KMProductCompareWC shared] setOrientationType:KMCompareTableTypePro_Advanced];
+                } else if ([KMMemberInfo shared].userScenarioType == KMUserScenarioTypePro_type3) {
+                    [[KMProductCompareWC shared] setOrientationType:KMCompareTableTypePro_Base];
                 }
                 [[KMProductCompareWC shared] showWindow:nil];
             }

+ 8 - 0
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.h

@@ -61,6 +61,14 @@ extern NSString * const KMIAPSubscriptionLoadedNotification;
 @property (nonatomic, readonly) IAPProduct *advancedAddDevicesAllAccessPack12months_lite;
 @property (nonatomic, readonly) IAPProduct *advancedAdd2DevicesAllAccessPack12months_lite;
 
+@property (nonatomic, readonly) IAPProduct *aiAllAccessPack1month_pro;
+@property (nonatomic, readonly) IAPProduct *aiAllAccessPack12month_pro;
+@property (nonatomic, readonly) IAPProduct *pdfToOfficePackPermanent_pro;
+@property (nonatomic, readonly) IAPProduct *fourDevicesAllAccessPack12months_pro;
+@property (nonatomic, readonly) IAPProduct *standardAddDevicesAllAccessPack12months_pro;
+@property (nonatomic, readonly) IAPProduct *advancedAddDevicesAllAccessPack12months_pro;
+@property (nonatomic, readonly) IAPProduct *advancedAdd2DevicesAllAccessPack12months_pro;
+
 @property (nonatomic, readonly) IAPProduct *PDFToOfficeProduct;
 @property (nonatomic, readonly) IAPProduct *liteAIProduct;
 @property (nonatomic, readonly) IAPProduct *proAIProduct;

+ 4 - 0
PDF Office/PDF Master/Class/Purchase/IAPProductsManager.m

@@ -1673,6 +1673,10 @@ NSString * const KMIAPSubscriptionLoadedNotification = @"KMIAPSubscriptionLoaded
             self.fourDevicesAllAccessPackNew12months_lite.product = product;
         } else if ([product.productIdentifier isEqualToString:self.aiAllAccessPack12month_lite.productIdentifier]) {
             self.aiAllAccessPack12month_lite.product = product;
+        } else if ([product.productIdentifier isEqualToString:self.advancedAddDevicesAllAccessPack12months_lite.productIdentifier]) {
+            self.advancedAddDevicesAllAccessPack12months_lite.product = product;
+        } else if ([product.productIdentifier isEqualToString:self.advancedAdd2DevicesAllAccessPack12months_lite.productIdentifier]) {
+            self.advancedAdd2DevicesAllAccessPack12months_lite.product = product;
         } else if ([product.productIdentifier isEqualToString:self.aiAllAccessPack12month_pro.productIdentifier]) {
             self.aiAllAccessPack12month_pro.product = product;
         } else if ([product.productIdentifier isEqualToString:self.standardAddDevicesAllAccessPack12months_pro.productIdentifier]) {

+ 12 - 4
PDF Office/PDF Master/MemberCenter/Model/KMMemberInfo.swift

@@ -248,7 +248,7 @@ import Cocoa
             }
 #else
     // AppStore 免费版本
-            if IAPProductsManager.default().allAccessProduct.isSubscribed == true {
+            if IAPProductsManager.default().allAccessPackPermanent_lite.isSubscribed == true {
                 // 有旧买断
                 if KMMemberInfo.shared.canTrail {
                     return .lite_type9
@@ -292,12 +292,20 @@ import Cocoa
 #else
     // AppStore 付费版
             if IAPProductsManager.default().pdfToOfficeProduct.isSubscribed == true {
-                return .pro_type1
+                if KMMemberInfo.shared.vip_cycle == 4 && platformsArray.count == 4 {
+                    return .pro_type2
+                } else {
+                    return .pro_type1
+                }
             } else {
                 if KMMemberInfo.shared.vip_paymentModel == "2" {
-                    return .pro_type3
+                    return .pro_type4
                 } else {
-                    return .pro_type2
+                    if KMMemberInfo.shared.vip_cycle == 4 && platformsArray.count == 4 {
+                        return .pro_type2
+                    } else {
+                        return .pro_type3
+                    }
                 }
             }
 #endif

+ 4 - 3
PDF Office/PDF Master/MemberCenter/ViewController/KMUserInfoViewController.swift

@@ -249,15 +249,15 @@ class KMUserInfoViewController: NSViewController {
             number4_1Label.textColor = NSColor(hex: "42464D")
             number5Label.textColor = NSColor(hex: "42464D")
 
-            if KMMemberInfo.shared.userScenarioType == .lite_type1 ||
-                KMMemberInfo.shared.userScenarioType == .lite_type9 {
+            if KMMemberInfo.shared.userScenarioType == .lite_type1 {
                 buyBox.contentView = buyView1
                 buyNow1ImageView.isHidden = false
                 buyNow2ImageView.isHidden = false
                 arrow1ImageView.image = NSImage(named: "BuyNewArrowImage1")
                 arrow2ImageView.image = NSImage(named: "BuyNewArrowImage1")
             } else if KMMemberInfo.shared.userScenarioType == .lite_type3 ||
-                        KMMemberInfo.shared.userScenarioType == .lite_type11 {
+                        KMMemberInfo.shared.userScenarioType == .lite_type11 ||
+                        KMMemberInfo.shared.userScenarioType == .lite_type9 {
                 buyNow3Label.textColor = NSColor(named: "FFFFFF")
                 buyBox.contentView = buyView2
                 buyNow3ImageView.isHidden = false
@@ -402,6 +402,7 @@ class KMUserInfoViewController: NSViewController {
                 KMMemberInfo.shared.userScenarioType == .lite_type8 {
                 self.viewModel.skipCompare(.lite_Base)
             } else if KMMemberInfo.shared.userScenarioType == .lite_type5 ||
+                        KMMemberInfo.shared.userScenarioType == .lite_type9 ||
                         KMMemberInfo.shared.userScenarioType == .lite_type11 ||
                         KMMemberInfo.shared.userScenarioType == .lite_type13 {
                 self.viewModel.skipCompare(.lite_MacWindows)

+ 65 - 17
PDF Office/PDF Master/MemberCenter/ViewModel/KMProductModel.swift

@@ -145,19 +145,47 @@ class KMProductModel: ObservableObject {
                 return IAPProductsManager.default().advancedAdd2DevicesAllAccessPack12months_lite.price()
             }
         } else if type == .aiAllAccessPack1month_pro {
-            
+            if let product = IAPProductsManager.default().aiAllAccessPack1month_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().aiAllAccessPack1month_pro.price()
+            }
         } else if type == .aiAllAccessPack12month_pro {
-            
+            if let product = IAPProductsManager.default().aiAllAccessPack12month_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().aiAllAccessPack12month_pro.price()
+            }
         } else if type == .pdfToOfficePackPermanent_pro {
-            
+            if let product = IAPProductsManager.default().pdfToOfficePackPermanent_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().pdfToOfficePackPermanent_pro.price()
+            }
         } else if type == .fourDevicesAllAccessPack12months_pro {
-            
+            if let product = IAPProductsManager.default().fourDevicesAllAccessPack12months_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().fourDevicesAllAccessPack12months_pro.price()
+            }
         } else if type == .standardAddDevicesAllAccessPack12months_pro {
-            
+            if let product = IAPProductsManager.default().standardAddDevicesAllAccessPack12months_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().standardAddDevicesAllAccessPack12months_pro.price()
+            }
         } else if type == .advancedAddDevicesAllAccessPack12months_pro {
-            
+            if let product = IAPProductsManager.default().advancedAddDevicesAllAccessPack12months_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().advancedAddDevicesAllAccessPack12months_pro.price()
+            }
         } else if type == .advancedAdd2DevicesAllAccessPack12months_pro {
-            
+            if let product = IAPProductsManager.default().advancedAdd2DevicesAllAccessPack12months_pro, product.isOffers {
+                return product.offersPrice()
+            } else {
+                return IAPProductsManager.default().advancedAdd2DevicesAllAccessPack12months_pro.price()
+            }
         }
         return ""
     }
@@ -178,12 +206,32 @@ class KMProductModel: ObservableObject {
             }
         } else if state == .lite_MacWindows {
             if tag == 2 {
-                membershipPurchase(.fourDevicesAllAccessPackNew12months_lite)
+                let platforms = KMMemberInfo.shared.vip_platforms
+                let platformsArray = platforms
+                    .components(separatedBy: ",")
+                    .map { $0.trimmingCharacters(in: .whitespaces) }
+                if platformsArray.count == 1 {
+                    membershipPurchase(.advancedAddDevicesAllAccessPack12months_lite)
+                } else if platformsArray.count == 2 {
+                    membershipPurchase(.advancedAdd2DevicesAllAccessPack12months_lite)
+                } else {
+                    membershipPurchase(.advancedAdd2DevicesAllAccessPack12months_lite)
+                }
             }
         } else if state == .pro_Base {
-            
+            if KMMemberInfo.shared.userScenarioType == .pro_type3 {
+                if tag == 2 {
+                    membershipPurchase(.standardAddDevicesAllAccessPack12months_pro)
+                } else if tag == 3 {
+                    membershipPurchase(.pdfToOfficePackPermanent_pro)
+                }
+            }
         } else if state == .pro_Advanced {
-            
+            if KMMemberInfo.shared.userScenarioType == .pro_type1 {
+                membershipPurchase(.advancedAddDevicesAllAccessPack12months_pro)
+            } else if KMMemberInfo.shared.userScenarioType == .pro_type4 {
+                membershipPurchase(.advancedAddDevicesAllAccessPack12months_pro)
+            }
         } else {
             if tag == 2 {
                 membershipPurchase(.fourDevicesAllAccessPackNew12months_lite)
@@ -234,19 +282,19 @@ class KMProductModel: ObservableObject {
         } else if type == .advancedAdd2DevicesAllAccessPack12months_lite {
             IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().advancedAdd2DevicesAllAccessPack12months_lite, discount: isCancelAutoRenew)
         } else if type == .aiAllAccessPack1month_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().aiAllAccessPack1month_pro, discount: isCancelAutoRenew)
         } else if type == .aiAllAccessPack12month_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().aiAllAccessPack12month_pro, discount: isCancelAutoRenew)
         } else if type == .pdfToOfficePackPermanent_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().pdfToOfficePackPermanent_pro, discount: isCancelAutoRenew)
         } else if type == .fourDevicesAllAccessPack12months_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().fourDevicesAllAccessPack12months_pro, discount: isCancelAutoRenew)
         } else if type == .standardAddDevicesAllAccessPack12months_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().standardAddDevicesAllAccessPack12months_pro, discount: isCancelAutoRenew)
         } else if type == .advancedAddDevicesAllAccessPack12months_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().advancedAddDevicesAllAccessPack12months_pro, discount: isCancelAutoRenew)
         } else if type == .advancedAdd2DevicesAllAccessPack12months_pro {
-            
+            IAPProductsManager.default().makeSubProduct(IAPProductsManager.default().advancedAdd2DevicesAllAccessPack12months_pro, discount: isCancelAutoRenew)
         }
     }
 

+ 1 - 1
PDF Office/PDF Master/MemberCenter/WindowsController/KMFreeGetAIWC.xib

@@ -25,7 +25,7 @@
         <window title="Window" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" titlebarAppearsTransparent="YES" titleVisibility="hidden" id="F0z-JX-Cv5">
             <windowStyleMask key="styleMask" titled="YES" closable="YES" fullSizeContentView="YES"/>
             <rect key="contentRect" x="196" y="240" width="538" height="436"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1800" height="1125"/>
             <value key="minSize" type="size" width="538" height="436"/>
             <value key="maxSize" type="size" width="538" height="436"/>
             <view key="contentView" id="se5-gp-TjO">

+ 39 - 8
PDF Office/PDF Master/MemberCenter/WindowsController/KMProductCompareWC.swift

@@ -352,15 +352,28 @@ class KMProductCompareWC: NSWindowController {
         } else if model.state == .lite_Base {
             permanentPurchaseLabel.stringValue = model.getProductPrice(.allAccessPackPermanent_lite)
         } else if model.state == .lite_MacWindows {
-            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.fourDevicesAllAccessPackNew12months_lite)
+            let platforms = KMMemberInfo.shared.vip_platforms
+            let platformsArray = platforms
+                .components(separatedBy: ",")
+                .map { $0.trimmingCharacters(in: .whitespaces) }
+            if platformsArray.count == 1 {
+                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAddDevicesAllAccessPack12months_lite)
+            } else if platformsArray.count == 2 {
+                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAdd2DevicesAllAccessPack12months_lite)
+            } else {
+                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAdd2DevicesAllAccessPack12months_lite)
+            }
         } else if model.state == .pro_Base {
-//            value1InfoLabel.stringValue = NSLocalizedString("1-Yearly Pro", comment: "")
-//            value1PurchaseSubLabel.stringValue = NSLocalizedString("Billed every 6 months at $29.99", comment: "")
-//            value1PurchaseLabel.stringValue = model.getProductPrice(.allPlatformAdvanced_12)
-//
-//            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.allPlatformAdvanced_12)
+            if KMMemberInfo.shared.userScenarioType == .pro_type3 {
+                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.standardAddDevicesAllAccessPack12months_pro)
+                permanentPurchaseLabel.stringValue = model.getProductPrice(.pdfToOfficePackPermanent_pro)
+            }
         } else if model.state == .pro_Advanced {
-//            advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.fourDevicesAllAccessPackNew12months_lite)
+            if KMMemberInfo.shared.userScenarioType == .pro_type1 {
+                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAddDevicesAllAccessPack12months_pro)
+            } else if KMMemberInfo.shared.userScenarioType == .pro_type4 {
+                advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.advancedAddDevicesAllAccessPack12months_pro)
+            }
         } else {
             // model.state == .trial
             advancedPlanPurchaseLabel.stringValue = model.getProductPrice(.fourDevicesAllAccessPackNew12months_lite)
@@ -514,7 +527,7 @@ class KMProductCompareWC: NSWindowController {
             contentHeight = 660.0
             topsubBox3.isHidden = true
             topsubBox4.isHidden = true
-            topsubBox1.contentView = value1InfoView
+            topsubBox1.contentView = advancedPlanInfoView
             topsubBox2.contentView = permanentInfoView
             backgroundImage1.isHidden = true
             topSelectBox2.isHidden = false
@@ -559,7 +572,16 @@ class KMProductCompareWC: NSWindowController {
         permanentPurchaseSubLabel.textColor = KMAppearance.Layout.w0Color()
         permanentPurchaseSubLabel2.textColor = KMAppearance.Layout.w0Color()
         
+#if VERSION_FREE
+#if VERSION_DMG
+    // DMG
+#else
+    // AppStore 免费版本
         refreshPurchaseSwitch()
+#endif
+#else
+    // AppStore 付费版
+#endif
     }
 
     @objc func reloadData() {
@@ -1043,7 +1065,16 @@ class KMProductCompareWC: NSWindowController {
             .receive(on: RunLoop.main)
             .sink { [weak self] newValue in
                 self?.reloadDataContent()
+#if VERSION_FREE
+#if VERSION_DMG
+    // DMG
+#else
+    // AppStore 免费版本
                 self?.refreshPurchaseSwitch()
+#endif
+#else
+    // AppStore 付费版
+#endif
             }
             .store(in: &cancellables)
 

+ 1 - 1
PDF Office/PDF Master/MemberCenter/WindowsController/KMProductCompareWC.xib

@@ -102,7 +102,7 @@
         <window allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" visibleAtLaunch="NO" animationBehavior="documentWindow" titlebarAppearsTransparent="YES" id="7jy-UC-R98">
             <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES" fullSizeContentView="YES"/>
             <rect key="contentRect" x="77" y="40" width="970" height="660"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1415"/>
+            <rect key="screenRect" x="0.0" y="0.0" width="1800" height="1125"/>
             <view key="contentView" wantsLayer="YES" misplaced="YES" id="BHT-Ss-56B">
                 <rect key="frame" x="0.0" y="0.0" width="970" height="660"/>
                 <autoresizingMask key="autoresizingMask"/>