我有一个简单的应用程序,有一个非消耗品的应用程序内购买选项。
从我的初始视图控制器,我有一个"输入"按钮。
此按钮将向一个TabBarController"a"和一系列视图发送一个"免费"用户(未进行非消耗性购买),向另一个TabBarController"B"发送一个不同视图集的"付费"用户。这些观点永远不会相交。
我想检查一下我的代码是否能够有效区分用户是否进行了应用内购买。
这是我的代码:
import UIKit
import StoreKit
class MainMainViewController: UIViewController, UIScrollViewDelegate, SKProductsRequestDelegate, SKPaymentTransactionObserver {
let defaults = NSUserDefaults.standardUserDefaults()
var product_id: NSString?;
...
override func viewDidLoad() {
product_id = "some.iap.id";
SKPaymentQueue.defaultQueue().addTransactionObserver(self)
super.viewDidLoad()
}
@IBAction func Enter(sender: AnyObject) {
//Check if product is purchased
if (defaults.boolForKey("purchased")){
print("User has purchased da goods!")
// Grant or otherwise full access based on whether user has purchased/not purchased.
// Goto TabBarController A - FULL Access:
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("TabBarControllerPaid") as! TabBarControllerPaid
self.presentViewController(vc, animated: true, completion: nil)
}
else if (!defaults.boolForKey("purchased")){
print("user has NOT purchased yet")
// Goto TabBarController B - PARTIAL Access:
let vc = self.storyboard!.instantiateViewControllerWithIdentifier("TabBarControllerFree") as! TabBarControllerFree
self.presentViewController(vc, animated: true, completion: nil)
}
}
}
非常感谢您的任何回答、评论或想法:-)
看看本教程的"已购买物品"部分。
它展示了如何跟踪购买的物品(是的,如果你仔细阅读本教程,你将使用NSUserDefaults
),还将学习如何在应用程序被删除或移动到用户的新设备时恢复以前的购买。
在上面的代码中,我看到了"defaults.boolForKey("purchased")
"。我看到的这个代码的大问题是,它只允许购买一件物品(要么NSUserDefaults
中存在"已购买"布尔值,要么不存在)。