小编Kat*_*ins的帖子

添加和删​​除事务队列观察器 - 正确的方法?

参考In app Purchases ...我参考此技术说明:https://developer.apple.com/library/ios/technotes/tn2387/_index.html

它声明我们应该didFinishLaunchingWithOptionsAppDelegate文件中添加事务观察器.而且,我们应该删除事务观察员参加applicationWillTerminateAppDelegate.

这与我所阅读的许多教程(当前的教程)不一致,并且与此问题上的许多主题(最近也是如此)不一致.

我很迷惑.苹果显然是"堆积之王".所以我应该采用技术说明的方向并添加事务队列观察器didFinishLaunchingWithOptions并将其删除applicationWillTerminate

有人可以再详细说明一下吗?提前致谢.

transactions in-app-purchase ios swift

9
推荐指数
2
解决办法
3266
查看次数

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

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

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

此按钮将向一个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, …
Run Code Online (Sandbox Code Playgroud)

nsuserdefaults in-app-purchase ios swift

5
推荐指数
1
解决办法
5587
查看次数

底部标签栏上方的间隙 - 嵌入式 NavigationController + 嵌入式 TableViewController

这个问题困扰了我几天。

这是我的相关故事板布局: 在此输入图像描述 我已经将所有三个视图控制器设置为所有布局,并且仍然得到一个结果表视图,在横幅视图上方有一个“间隙” - 看起来与横幅视图的高度相同。如下:

在此输入图像描述

有效的一件事是将容器视图拖动到底部横幅视图上,如下所示:

在此输入图像描述

结果在我的测试设备以及每个模拟器上都完美呈现 - 即没有间隙。

但这样的解决方案本质上是一种黑客攻击,我想看看是否可以采取任何措施来正确解决该问题。

作为记录,我已经尝试了 IB 中的每个选项 - 调整滚动视图插图、在顶部/底部栏下延伸边缘等......以及我在谷歌上到处搜索的各种代码片段。似乎没有什么可以解决我的问题。

我设法解决了导航栏下表格视图顶部的间隙(这似乎是一个存在大量内容的常见问题)。但像我上面这样的情况好像并不多。

非常感谢任何帮助或指示。谢谢大家:-)

* 附加信息 *

根据下面的评论,我添加了我为所述容器尝试过的约束:

在此输入图像描述

layout ios swift

3
推荐指数
1
解决办法
1344
查看次数

恢复购买:非消耗品

我已经完成了一个小应用程序,我有一个非消耗品的购买选项。它在 App Store 上。

购买的产品运行正常。我的恢复购买功能似乎什么也没做。

我已为恢复购买添加了此代码@IBAction

@IBAction func restorePurchases(sender: AnyObject) { 
    SKPaymentQueue.defaultQueue().addTransactionObserver(self)
    SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}
Run Code Online (Sandbox Code Playgroud)

但是当我点击恢复购买按钮时没有任何反应。

我想我必须添加一个函数来检查恢复是否成功。我计划将代码修改为以下内容:

@IBAction func restorePurchases(sender: AnyObject) { 
    SKPaymentQueue.defaultQueue().addTransactionObserver(self)
    SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
}

func paymentQueue(queue: SKPaymentQueue!, updatedTransactions transactions: [AnyObject]!) {

for transaction:AnyObject in transactions {
    if let trans:SKPaymentTransaction = transaction as? SKPaymentTransaction{
        switch trans.transactionState {
        case .Restored:
            SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)
        var alert = UIAlertView(title: "Thank You", message: "Your purchase(s) were restored.", delegate: nil, cancelButtonTitle: "OK")
        alert.show()
            break;

        case .Failed:
            SKPaymentQueue.defaultQueue().finishTransaction(transaction as SKPaymentTransaction)
        var alert = UIAlertView(title: "Sorry", …
Run Code Online (Sandbox Code Playgroud)

restore in-app-purchase ios swift

2
推荐指数
1
解决办法
2447
查看次数

清除 SKPAymentsQueue :强制完成未完成的交易

我有一些恢复交易仍然卡在我的付款队列中 - 因为finishTransaction在我测试有缺陷的恢复购买操作时,一旦交易恢复,我从未调用过该交易。

从一些在线研究中,我意识到我必须手动强制完成付款队列中未完成的交易。

有人在 Objective-C 中发布了这段代码:

// take current payment queue
SKPaymentQueue* currentQueue = [SKPaymentQueue defaultQueue];
// finish ALL transactions in queue
[currentQueue.transactions enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[currentQueue finishTransaction:(SKPaymentTransaction *)obj];
}];
Run Code Online (Sandbox Code Playgroud)

我不知道如何将其转换为 Swift 2.0。

任何人都可以帮我做到这一点吗?谢谢 :-)

objective-c in-app-purchase ios swift

0
推荐指数
1
解决办法
1875
查看次数