Kaynağa Gözat

feat: 新增上报ClientId

Destiny 7 ay önce
ebeveyn
işleme
4e24777407

+ 4 - 4
QuickSearchLocation.xcodeproj/project.pbxproj

@@ -1230,7 +1230,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 14;
+				CURRENT_PROJECT_VERSION = 16;
 				DEVELOPMENT_TEAM = Q364C8K9BL;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -1254,7 +1254,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.1.1;
+				MARKETING_VERSION = 1.1.2;
 				PRODUCT_BUNDLE_IDENTIFIER = com.manbu.shouji;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
@@ -1274,7 +1274,7 @@
 				ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
 				CODE_SIGN_IDENTITY = "Apple Development";
 				CODE_SIGN_STYLE = Automatic;
-				CURRENT_PROJECT_VERSION = 14;
+				CURRENT_PROJECT_VERSION = 16;
 				DEVELOPMENT_TEAM = Q364C8K9BL;
 				ENABLE_USER_SCRIPT_SANDBOXING = NO;
 				FRAMEWORK_SEARCH_PATHS = (
@@ -1298,7 +1298,7 @@
 					"$(inherited)",
 					"@executable_path/Frameworks",
 				);
-				MARKETING_VERSION = 1.1.1;
+				MARKETING_VERSION = 1.1.2;
 				PRODUCT_BUNDLE_IDENTIFIER = com.manbu.shouji;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";

+ 5 - 0
QuickSearchLocation/Classes/Common/Tool/QSLGravityManager.swift

@@ -43,6 +43,11 @@ class QSLGravityManager {
             QSLBaseManager.shared.initPayCheck()
             
             gravityInstance?.track(QSLGravityConst.launch_show)
+            
+            if let clientId = gravityInstance?.getCurrentClientId() {
+                QSLBaseManager.shared.uploadClientId(clientId: clientId)
+            }
+            
         }, withErrorCallback: { error in
             print("gravity engine initialize failed, and error is", error)
             

+ 12 - 0
QuickSearchLocation/Classes/Main/QSLBaseManager.swift

@@ -123,6 +123,18 @@ extension QSLBaseManager {
             }
         }
     }
+    
+    // 上报 clientId
+    func uploadClientId(clientId: String) {
+        
+        QSLNetwork().request(.deviceInfoUpload(dict: ["clientId": clientId])) { response in
+            
+            debugPrint("上报设备信息成功")
+        } fail: { code, error in
+           
+            debugPrint("上报设备信息失败")
+        }
+    }
 }
 
 extension QSLBaseManager {

+ 7 - 1
QuickSearchLocation/Classes/Network/QSLNetwork.swift

@@ -49,10 +49,10 @@ enum QSLNetworkAPI {
     case contactMayday(dict: [String: Any])
     case contactMaydayFavor(dict: [String: Any])
     case contactMaydayAll(dict: [String: Any])
+    case deviceInfoUpload(dict: [String: Any])
 }
 
 extension QSLNetworkAPI: TargetType {
-    
     // 地址
     public var baseURL: URL {
         switch QSLApi.environment {
@@ -94,6 +94,7 @@ extension QSLNetworkAPI: TargetType {
         case .contactMayday: return QSLApi.contact_mayday
         case .contactMaydayFavor: return QSLApi.contact_mayday_favor
         case .contactMaydayAll: return QSLApi.contact_mayday_all
+        case .deviceInfoUpload: return QSLApi.device_info_upload
         }
     }
     
@@ -237,6 +238,11 @@ extension QSLNetworkAPI: TargetType {
                 parameters[key] = value
             }
             break
+        case let .deviceInfoUpload(Dict):
+            for (key, value) in Dict {
+                parameters[key] = value
+            }
+            break
         }
         debugPrint(parameters)
         return .requestParameters(parameters: parameters, encoding: JSONEncoding.default)

+ 90 - 10
QuickSearchLocation/Classes/Pages/QSLVip/Controller/QSLVipController.swift

@@ -199,13 +199,6 @@ class QSLVipController: QSLBaseController {
         
         attr.append(blankAttr)
         
-        let andAttr = NSMutableAttributedString(string: "和")
-        andAttr.font(12)
-        andAttr.color(.hexStringColor(hexString: "#A7A7A7"))
-        attr.append(andAttr)
-        
-        attr.append(blankAttr)
-        
         let serviceHL = YYTextHighlight()
         var serviceStr = "《用户协议》"
 
@@ -218,6 +211,28 @@ class QSLVipController: QSLBaseController {
         }
         
         attr.append(serviceText)
+        
+        attr.append(blankAttr)
+        
+        let andAttr = NSMutableAttributedString(string: "和")
+        andAttr.font(12)
+        andAttr.color(.hexStringColor(hexString: "#A7A7A7"))
+        attr.append(andAttr)
+        
+        attr.append(blankAttr)
+        
+        let subcribeHL = YYTextHighlight()
+        var subcribeStr = "《续订说明》"
+
+        let subcribeText = NSMutableAttributedString(string: subcribeStr)
+        subcribeText.font(12)
+        subcribeText.color(.hexStringColor(hexString: "#E7B983"))
+        subcribeText.yy_setTextHighlight(subcribeHL, range: NSRange(location: 0, length: subcribeStr.count))
+        subcribeHL.tapAction = { [weak self] containerView, text, range, rect in
+            self?.subscibeAction()
+        }
+        
+        attr.append(subcribeText)
 
         label.attributedText = attr
         
@@ -259,6 +274,26 @@ class QSLVipController: QSLBaseController {
         return view
     }()
     
+    lazy var tipTitleLabel: UILabel = {
+       
+        let label = UILabel()
+        label.text("温馨提示")
+        label.font(12)
+        label.textColor = .hexStringColor(hexString: "#000000").withAlphaComponent(0.8)
+        return label
+    }()
+    
+    lazy var tipContentLabel: UILabel = {
+       
+        let label = UILabel()
+        label.numberOfLines = 0
+        label.text("1 订阅后会从您的iTunes账户中扣除相关费用。如需取消续订,请在当前订阅周期结束前,至少24小时内通过手机“账户设置”的订阅管理关闭自动续费功能。\n2 未成年人请在监护者的陪同下进行购买\n3 购买后不支持退款,请仔细审阅《隐私权政策》《用户协议》和《续订说明》")
+        label.font(10)
+        label.textColor = .hexStringColor(hexString: "#000000").withAlphaComponent(0.6)
+        label.changeLineSpace(space: 5)
+        return label
+    }()
+    
     lazy var bottomView: UIView = {
        
         let view = UIView()
@@ -300,11 +335,21 @@ class QSLVipController: QSLBaseController {
     lazy var goodTypeLabel: UILabel = {
         
         let label = UILabel()
-        label.text("/ 永久会员")
+        label.text("/")
         label.textColor = .hexStringColor(hexString: "#FFF8EF")
         label.font(12)
         return label
     }()
+    
+    lazy var goodOriginalPriceLabel: UILabel = {
+        
+        let label = UILabel()
+        label.text("原价228")
+        label.textColor = .hexStringColor(hexString: "#FFF8EF")
+        label.font(12)
+        label.centerLineText(lineValue: 1, underlineColor: .hexStringColor(hexString: "#FFF8EF"))
+        return label
+    }()
 
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -352,6 +397,14 @@ extension QSLVipController {
         self.navigationController?.pushViewController(vc, animated: true)
     }
     
+    @objc func subscibeAction() {
+        
+        let vc = QSLWebViewController()
+        vc.webUrl = QSLConfig.AppSubscibeAgreementLink
+        vc.title = "续订说明"
+        self.navigationController?.pushViewController(vc, animated: true)
+    }
+    
     @objc func selectBtnAction() {
         
         selectBtn.isSelected = !selectBtn.isSelected
@@ -643,15 +696,23 @@ extension QSLVipController {
     
     func updateSelectGoodUI() {
         var priceText = ""
+        var originalPriceText = ""
         if let selectGood = self.selectGood {
             if selectGood.amount.truncatingRemainder(dividingBy: 100) == 0 {
                 priceText = "\(Int(selectGood.amount / 100))"
             } else {
                 priceText = String(format: "%.2lf", selectGood.amount / 100 )
             }
+            
+            if selectGood.originalAmount.truncatingRemainder(dividingBy: 100) == 0 {
+                originalPriceText = "\(Int(selectGood.originalAmount / 100))"
+            } else {
+                originalPriceText = String(format: "%.2lf", selectGood.originalAmount / 100 )
+            }
         }
         self.priceLabel.text(priceText)
-        self.goodTypeLabel.text("/ \(self.selectGood?.name ?? "")")
+//        self.goodTypeLabel.text("/ \(self.selectGood?.name ?? "")")
+        self.goodOriginalPriceLabel.text("原价\(originalPriceText)")
     }
     
     func initializeView() {
@@ -722,7 +783,7 @@ extension QSLVipController {
             make.left.right.bottom.equalTo(0)
             make.top.equalTo(funcBannerImageView.snp.bottom).offset(-24.rpx)
             make.width.equalTo(QSLConst.qsl_kScreenW)
-            make.height.equalTo(700.rpx)
+            make.height.equalTo(800.rpx)
         }
         
         mainView.addSubview(goodsBgView)
@@ -805,6 +866,19 @@ extension QSLVipController {
             make.height.equalTo(commentHeight3)
         }
         
+        commentView.addSubview(tipTitleLabel)
+        commentView.addSubview(tipContentLabel)
+        tipTitleLabel.snp.makeConstraints { make in
+            make.left.equalTo(16)
+            make.top.equalTo(comment3.snp.bottom).offset(28)
+        }
+        
+        tipContentLabel.snp.makeConstraints { make in
+            make.left.equalTo(16)
+            make.right.equalTo(-16)
+            make.top.equalTo(tipTitleLabel.snp.bottom).offset(11)
+        }
+        
         scrollView.snp.makeConstraints { make in
             make.bottom.equalTo(mainView)
         }
@@ -840,6 +914,12 @@ extension QSLVipController {
             make.left.equalTo(priceLabel.snp.right).offset(2.rpx)
             make.bottom.equalTo(-14.rpx)
         }
+        
+        bottomView.addSubview(goodOriginalPriceLabel)
+        goodOriginalPriceLabel.snp.makeConstraints { make in
+            make.left.equalTo(goodTypeLabel.snp.right).offset(2.rpx)
+            make.centerY.equalTo(goodTypeLabel.snp.centerY)
+        }
     
     }
 }

+ 8 - 2
QuickSearchLocation/Macro/QSLApi.swift

@@ -16,7 +16,7 @@ struct QSLApi {
     static let environment = QSLEnvironment.prod
     
     // 本地
-    static let LocalUrl = "http://192.168.10.68:48389"
+    static let LocalUrl = "http://wjj.dy.takin.cc"
     
     // 测试
     static let devUrl = ""
@@ -24,7 +24,7 @@ struct QSLApi {
     // 正式
     static let prodUrl = "http://loc-api.v8dashen.com"
     
-    static let localWSUrl = "ws://192.168.10.68:56389"
+    static let localWSUrl = "ws://192.168.10.53:56389"
     
     static let prodWSUrl = "ws://loc-api.v8dashen.com"
     
@@ -210,3 +210,9 @@ extension QSLApi {
     // 向所有紧急联系人求救
     static let contact_mayday_all = "/s/v1/contact/mayday/all"
 }
+
+extension QSLApi {
+    
+    // 客户端上报设备信息
+    static let device_info_upload = "/s/v1/client/device/info/upload"
+}

+ 3 - 0
QuickSearchLocation/Macro/QSLConfig.swift

@@ -18,6 +18,9 @@ struct QSLConfig {
     /// 隐私权政策
     static let AppPrivacyAgreementLink = "https://doc.v8dashen.com/doc/e9b57a2813d8ed11"
     
+    /// 续订政策
+    static let AppSubscibeAgreementLink = "https://doc.v8dashen.com/doc/0a84539b1d6afa43"
+    
 }
 
 extension QSLConfig {