方法未达到完成块

kri*_*orn 11 storekit in-app-purchase ios swift

我正在使用SKStoreProductViewController以下方法显示iTunes产品.该方法被调用,但我没有成功或错误.知道为什么吗?:

@IBAction func BuySomething(sender : AnyObject) {

    NSLog("%@","called");//gets called

    let storeViewController:SKStoreProductViewController = SKStoreProductViewController();

    storeViewController.delegate = self;

    var someitunesid:String = "676059878";

    var productparameters = [SKStoreProductParameterITunesItemIdentifier:someitunesid];

    storeViewController.loadProductWithParameters(productparameters, { (success: Bool!,          error: NSError!) -> Void in
        if success {
            NSLog("%@",success)//no call
            self.presentViewController(storeViewController, animated: true, completion: nil);
        } else {
            NSLog("%@", error)//no call
        }
    })
}
Run Code Online (Sandbox Code Playgroud)

CjC*_*oax 16

由于某些原因SKStoreProductViewController无法在模拟器上运行,您必须在实际设备上尝试它.

我刚刚在实际设备上尝试了这个,并获得了成功调用回调后在实际设备上的样子截图:

以下是我用过的代码:

import UIKit
import StoreKit

class ViewController: UIViewController,SKStoreProductViewControllerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()



    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


    @IBAction func BuySomething(sender : AnyObject) {

        NSLog("%@","called");//gets called

        let storeViewController:SKStoreProductViewController = SKStoreProductViewController();

        storeViewController.delegate = self;

        var someitunesid:String = "676059878";

        var productparameters = [SKStoreProductParameterITunesItemIdentifier:someitunesid];

        storeViewController.loadProductWithParameters(productparameters, {
            (success: Bool!,error: NSError!) -> Void in
            if success {
                NSLog("%@",success)
                self.presentViewController(storeViewController, animated: true, completion: nil);
            } else {
                NSLog("%@", error)
            }
            })
    }

    // this is SKStoreProductViewControllerDelegate implementation
    func productViewControllerDidFinish(viewController: SKStoreProductViewController!) {

    }


}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 如果StoreKit找不到iTunes ID,它永远不会返回错误,例如"找不到项目"等... :-(这肯定是StoreKit中的一个错误,因为在某些时候该块应该无论是否有结果都可以调用...启动一个计时器,在任意数量的秒后启动"未找到"警报是绝对蹩脚的,但我没有看到另一个解决方案,对于那些例如"错误"的人国家/地区设置在iTunes Store.在我的情况下,我的目标是一个应用程序,它只存在于一个国家的App Store中,所以它"挂起",如果选择另一个商店... (8认同)
  • 我正在使用实际设备,但仍然遇到同样的问题.奇怪的是,有时完成块会被调用,有时候不会...... (4认同)
  • 我正在iphone 8上使用iphone和ipad.虽然你工作得很好但真棒!有趣的事情.我已经导入StoreKit,链接了库并完成了我认为应该做的所有事情.互联网连接很强...好的无线网络,良好的蜂窝电话...嗯...... (3认同)