diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/IDEFindNavigatorScopes.plist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/IDEFindNavigatorScopes.plist
new file mode 100644
index 0000000..5dd5da8
--- /dev/null
+++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/IDEFindNavigatorScopes.plist
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate
index a7c74f9..0a255bd 100644
Binary files a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index 98b116c..12a1f90 100644
--- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -649,53 +649,5 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/SwiftProject/SwiftProject/AppDelegate.swift b/SwiftProject/SwiftProject/AppDelegate.swift
index ddaa2e6..df1266f 100644
--- a/SwiftProject/SwiftProject/AppDelegate.swift
+++ b/SwiftProject/SwiftProject/AppDelegate.swift
@@ -40,7 +40,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
Analytics.logEvent("user_launch", parameters: ["type":"new"])
SKUPay.sharedInstance.requestProducts(productsIdentifiers: MemberShipModelItem.getProductsIDs())
-
+ SKUPay.sharedInstance.setUpUserInfo()
return true
}
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Contents.json
index 78b0c52..6a6243f 100644
--- a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Contents.json
+++ b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Contents.json
@@ -1,17 +1,17 @@
{
"images" : [
{
- "filename" : "Diamond.png",
+ "filename" : "Group_427320241.png",
"idiom" : "universal",
"scale" : "1x"
},
{
- "filename" : "Diamond@2x.png",
+ "filename" : "Group_427320241@2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
- "filename" : "Diamond@3x.png",
+ "filename" : "Group_427320241@3x.png",
"idiom" : "universal",
"scale" : "3x"
}
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond.png b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond.png
deleted file mode 100644
index fc7ca96..0000000
Binary files a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond.png and /dev/null differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond@2x.png b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond@2x.png
deleted file mode 100644
index cd9f8b2..0000000
Binary files a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond@2x.png and /dev/null differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond@3x.png b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond@3x.png
deleted file mode 100644
index 70cfb63..0000000
Binary files a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Diamond@3x.png and /dev/null differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241.png b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241.png
new file mode 100644
index 0000000..2414649
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241.png differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241@2x.png b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241@2x.png
new file mode 100644
index 0000000..771ffb0
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241@2x.png differ
diff --git a/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241@3x.png b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241@3x.png
new file mode 100644
index 0000000..8d81b19
Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/vip_Diamond.imageset/Group_427320241@3x.png differ
diff --git a/SwiftProject/SwiftProject/CCKit/SKUPay/SKUPay.swift b/SwiftProject/SwiftProject/CCKit/SKUPay/SKUPay.swift
index 324dc98..3734ba2 100644
--- a/SwiftProject/SwiftProject/CCKit/SKUPay/SKUPay.swift
+++ b/SwiftProject/SwiftProject/CCKit/SKUPay/SKUPay.swift
@@ -24,38 +24,43 @@ class SKUPay:NSObject, SKRequestDelegate,SKProductsRequestDelegate,SKPaymentTran
var productRequest:SKProductsRequest?
var productsArr:[SKProduct] = []//存放请求到的商品条目,有效的商品
var invalidProductIdentifiers:[String] = [] //存放已经无效(过期、被删除等)的商品
- var historyPaymentTransactions:[SKPaymentTransaction]? {
- get {
- let data = UserDefaults.standard.value(forKey: "kHistoryTransaction")
- var hpt:[SKPaymentTransaction]? = nil
- guard let dt = data else {
- return nil
- }
- do {
- hpt = try NSKeyedUnarchiver.unarchivedObject(ofClasses: [SKPaymentTransaction.self], from: dt as! Data) as? [SKPaymentTransaction]
-
- }
- catch {
- print("本地历史交易信息解析失败....")
- }
- return hpt
+
+
+ func setTransactionDic(transactions:[SKPaymentTransaction]?) {
+ guard let transactions else {
+ UserDefaults.standard.setValue(nil, forKey: "kHistoryTransaction")
+ UserDefaults.standard.synchronize()
+ return
}
- set{
- guard let nv = newValue else {
- UserDefaults.standard.setValue(nil, forKey: "kHistoryTransaction")
- UserDefaults.standard.synchronize()
- return
+ var arr:[Any] = []
+ transactions.forEach { nv in
+ var dic:[String:Any] = [:]
+ dic["productIdentifier"] = nv.payment.productIdentifier
+ dic["transactionState"] = nv.transactionState.rawValue
+ arr.append(dic)
+ }
+
+ UserDefaults.standard.setValue(arr, forKey: "kHistoryTransaction")
+ UserDefaults.standard.synchronize()
+ }
+
+ //此处初始化用户信息
+ func setUpUserInfo() {
+ let arr:[Any]? = UserDefaults.standard.value(forKey: "kHistoryTransaction") as? [Any] ?? nil
+ guard let arr else {
+ return
+ }
+
+ arr.forEach { item in
+ let it = item as! [String:Any]
+ let productIdentifier = it["productIdentifier"] as? String
+ let stateRawValue = it["transactionState"] as? Int
+ let state = SKPaymentTransactionState(rawValue:stateRawValue ?? 2)
+ if (state == .purchased || state == .restored) {//检查到用户有购买
+ UserInfo.sharedInstance.paymentState = true
+ UserInfo.sharedInstance.paymentProductIdentifier = productIdentifier
}
- do {
- let data = try NSKeyedArchiver.archivedData(withRootObject: nv, requiringSecureCoding: false)
- UserDefaults.standard.setValue(data, forKey: "kHistoryTransaction")
- UserDefaults.standard.synchronize()
- }
- catch {
- print("本地存储交易信息失败....")
- }
-
}
}
@@ -79,9 +84,16 @@ class SKUPay:NSObject, SKRequestDelegate,SKProductsRequestDelegate,SKPaymentTran
}
//MARK: - 支付
- func pay(product:SKProduct) {
- let payment = SKPayment(product: product)
- SKPaymentQueue.default().add(payment)
+ func pay(productIdentifier:String) {
+ if !self.productsArr.isEmpty {
+ let product = self.productsArr.filter {
+ $0.productIdentifier == productIdentifier
+ }.first
+ if let pd = product {
+ let payment = SKPayment(product: pd)
+ SKPaymentQueue.default().add(payment)
+ }
+ }
}
//MARK: - 恢复购买
@@ -119,7 +131,8 @@ class SKUPay:NSObject, SKRequestDelegate,SKProductsRequestDelegate,SKPaymentTran
// Sent when the transaction array has changed (additions or state changes). Client should check state of transactions and finish as appropriate.
func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]){
if !transactions.isEmpty {
- self.historyPaymentTransactions = transactions
+// self.historyPaymentTransactions = transactions
+ self.setTransactionDic(transactions: transactions)
transactions.forEach { spt in
diff --git a/SwiftProject/SwiftProject/CCKit/UserInfo/UserInfo.swift b/SwiftProject/SwiftProject/CCKit/UserInfo/UserInfo.swift
index 7c6a7e9..eae899c 100644
--- a/SwiftProject/SwiftProject/CCKit/UserInfo/UserInfo.swift
+++ b/SwiftProject/SwiftProject/CCKit/UserInfo/UserInfo.swift
@@ -8,10 +8,11 @@
import Foundation
class UserInfo: NSObject {
static let sharedInstance = UserInfo()
-
+ var paymentState:Bool = false
+ var paymentProductIdentifier:String? //表示已购买的产品id
var isMemberShip:Bool {
get {
- return false
+ return paymentState
}
}
}
diff --git a/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipProductView.swift b/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipProductView.swift
index 2059e54..4edf33e 100644
--- a/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipProductView.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipProductView.swift
@@ -29,7 +29,7 @@ class MemberShipModelItem: NSObject {
//目前就3个
class func getProductsIDs()->[String] {
- return ["VPC00001","VPC00002","VPC00003"]
+ return ["VPC0000001","VPC0000002","VPC0000003"]
}
}
diff --git a/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipVCConfigureView.swift b/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipVCConfigureView.swift
index d60a438..2ca87e8 100644
--- a/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipVCConfigureView.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/MembershipVC/MembershipVCConfigureView.swift
@@ -16,9 +16,9 @@ extension MembershipVC {
self.setLeftOneBtnImg(imgStr: "membership_close")
self.leftBtn1?.addTarget(self, action: #selector(dismissVC(sender: )), for: .touchUpInside)
// self.setRightOneBtnImg(imgStr: "Icon_PopUp_Icon_Folder")
- self.rightBtn1?.addTarget(self, action: #selector(buyMembership(sender: )), for: .touchUpInside)
+ self.rightBtn1?.addTarget(self, action: #selector(rebuyMembership(sender: )), for: .touchUpInside)
self.setRightOneBtnTitle(string: NSLocalizedString("restorevip", comment: "") as NSString)
- self.rightBtn1?.isHidden = false
+ self.rightBtn1?.isHidden = UserInfo.sharedInstance.isMemberShip
self.view.addSubview(mTopImgView)
let topView = self.topView()
@@ -64,8 +64,14 @@ extension MembershipVC {
//MARK: - 购买会员
@objc func buyMembership(sender:UIButton) {
+ SKUPay.sharedInstance.pay(productIdentifier: (self.selectedItem?.productIdentifier!)!)
+ }
+
+ //恢复购买
+ @objc func rebuyMembership(sender:UIButton) {
}
+
func topView() -> UIView {
let bgView = UIView()
let imgView = UIImageView()
@@ -174,7 +180,7 @@ extension MembershipVC {
let item1 = MemberShipModelItem(title: "$0.99/周", desc: "一周", rightDesc: "", isSelected: false, imageName_selected: NSLocalizedString("vip_product_week", comment: ""), imageName_unSelected: NSLocalizedString("vip_product_unselect_week", comment: ""), productIdentifier: MemberShipModelItem.getProductsIDs()[0])
arr.append(item1)
- let item2 = MemberShipModelItem(title: "$1.99/周", desc: "一月", rightDesc: "90%的人选择", isSelected: false, imageName_selected: NSLocalizedString("vip_product_month", comment: ""), imageName_unSelected: NSLocalizedString("vip_product_unselect_month", comment: ""), productIdentifier: MemberShipModelItem.getProductsIDs()[1])
+ let item2 = MemberShipModelItem(title: "$1.99/月", desc: "一月", rightDesc: "90%的人选择", isSelected: true, imageName_selected: NSLocalizedString("vip_product_month", comment: ""), imageName_unSelected: NSLocalizedString("vip_product_unselect_month", comment: ""), productIdentifier: MemberShipModelItem.getProductsIDs()[1])
arr.append(item2)
let item3 = MemberShipModelItem(title: "$9.99/年", desc: "一年", rightDesc: "50%的人选择", isSelected: false, imageName_selected: NSLocalizedString("vip_product_year", comment: ""), imageName_unSelected: NSLocalizedString("vip_product_unselect_year", comment: ""), productIdentifier: MemberShipModelItem.getProductsIDs()[1])
@@ -208,9 +214,11 @@ extension MembershipVC {
// subscribeBtn.setTitle(UserInfo.sharedInstance.isMemberShip ?NSLocalizedString("Membership activated", comment: "") : NSLocalizedString("Free Trail 3 Days", comment: ""), for: .normal)
if UserInfo.sharedInstance.isMemberShip {
subscribeBtn.setBackgroundImage(UIImage(named: NSLocalizedString("vip_alreadybuybtn", comment: "")), for: .normal)
+ subscribeBtn.isEnabled = false
}
else {
subscribeBtn.setBackgroundImage(UIImage(named: NSLocalizedString("vip_buybtn", comment: "")), for: .normal)
+ subscribeBtn.isEnabled = true
}
subscribeBtn.backgroundColor = UserInfo.sharedInstance.isMemberShip ? .lightGray : .darkText
@@ -225,6 +233,8 @@ extension MembershipVC {
make.right.equalToSuperview().offset(-4)
}
+ subscribeBtn.addTarget(self, action: #selector(buyMembership(sender: )), for: .touchUpInside)
+
let btn_privateBtn = UIButton()
bgView.addSubview(btn_privateBtn)
@@ -267,9 +277,6 @@ extension MembershipVC {
let descLabel = UILabel()
bgView.addSubview(descLabel)
descLabel.numberOfLines = 0
-// descLabel.font = UIFont.systemFont(ofSize: 10)
-// descLabel.textColor = UIColor(r: 205, g: 205, b: 205, a: 1)
-// descLabel.text = NSLocalizedString("subscribDesc", comment: "")
descLabel.textAlignment = .center
descLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(4)
@@ -277,11 +284,7 @@ extension MembershipVC {
make.top.equalTo(btn_userBtn.snp.bottom).offset(12)
}
-
-
-
-
-
+
descLabel.textColor = UIColor(red: 0.804, green: 0.804, blue: 0.804, alpha: 1)
descLabel.font = UIFont(name: "PingFangSC-Regular", size: 10)
descLabel.lineBreakMode = .byWordWrapping
@@ -290,10 +293,6 @@ extension MembershipVC {
paragraphStyle.alignment = .center
descLabel.attributedText = NSMutableAttributedString(string: NSLocalizedString("subscribDesc", comment: ""), attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
-
-
-
-
return bgView
}
diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift
index dbab3fe..d7f9363 100644
--- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift
+++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift
@@ -590,6 +590,9 @@ class VRVideoTransformController: BaseController {
self!.videoHeight = 720
self!.according3DFormatShowList(format: self!.selected3DFormat)
}
+ else if(text == NSLocalizedString("取消", comment: "")){
+ //....什么都不需要做,但要有该行
+ }
else {
if !UserInfo.sharedInstance.isMemberShip {
//不是就跳转引导购买
@@ -641,6 +644,9 @@ class VRVideoTransformController: BaseController {
self!.selectedBitsPerPixel = .low
self!.according3DFormatShowList(format: self!.selected3DFormat)
}
+ else if(text == NSLocalizedString("取消", comment: "")){
+ //....什么都不需要做,但要有该行
+ }
else {
if !UserInfo.sharedInstance.isMemberShip {//判断是否为vip
//不是就跳转引导购买
diff --git a/SwiftProject/SwiftProject/en.lproj/Localizable.strings b/SwiftProject/SwiftProject/en.lproj/Localizable.strings
index 6f79d50..159e62f 100644
--- a/SwiftProject/SwiftProject/en.lproj/Localizable.strings
+++ b/SwiftProject/SwiftProject/en.lproj/Localizable.strings
@@ -101,7 +101,7 @@
"membershipdesc_4" = "No Ads";
"Free Trail 3 Days" = "Free Trail 3 Days";
"subscribDesc" = "Free trial for 3 days. After the trial ends, renew according to the fee shown in the picture. You can unsubscribe at any time in the Apple Store. If subscribed or successfully paid but not displayed, the same ApplelD can be used to restore membership. After confirming the purchase, the payment will be deducted from your account. Automatic renewal will be deducted before the expiration date. You can go to the ApplelD management page to close the subscription.";
-"用户协议" = "用户协议";
+"用户协议" = "Terms of Service";
"Membership activated" = "Membership activated";
"restorevip" = "Restore";