如何检查用户是否已进行应用程序内购买?确定他们的访问级别/权限

Kat*_*ins 5 nsuserdefaults in-app-purchase ios swift

我有一个简单的应用程序,有一个非消费类应用内购买选项.

从我的初始视图控制器,我有一个"输入"按钮.

此按钮将向一个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)
   }


}

}
Run Code Online (Sandbox Code Playgroud)

非常感谢任何答案,评论或想法:-)

Mic*_*ann 4

请查看本教程的“已购买物品”部分。

它展示了如何跟踪已购买的项目(是的,NSUserDefaults如果您严格遵循本教程,您将会使用),并且您还将了解如何在应用程序被删除或移动到用户的新应用程序时恢复以前的购买项目设备。

在你上面的代码中,我看到“ defaults.boolForKey("purchased")”。我可以看到这段代码的一个大问题是它只允许购买一件物品(“购买”布尔值要么存在,NSUserDefaults要么不存在)。