3

私はこの問題を数時間グーグルで調べました。私は次のようなことを試みました:

  1. バンドル ID と製品 ID が完全に正しいことを確認します
  2. シミュレーターと実際のデバイスの両方でアプリを削除して再インストールする
  3. 「productID」と「com.company.project.productID」の両方を試しました
  4. iTunes Connect の IAP も正しく設定する必要があります

唯一わからないのは、iTunes コネクトで銀行と税金の項目を入力していないことです。実は銀行情報を入力したところですが、更新には 24 時間かかります。

私のコードは次のようになります

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    // Set IAPS
    if(SKPaymentQueue.canMakePayments()) {
        println("IAP is enabled, loading")
        var productID:NSSet = NSSet(objects: "ProductID")
        var request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as Set<NSObject>)
        request.delegate = self
        request.start()
    } else {
        println("please enable IAPS")
    }      
}

func productsRequest(request: SKProductsRequest!, didReceiveResponse response: SKProductsResponse!) {
    println("product request")
    var myProduct = response.products

    for product in myProduct {
        println("product added")
        println(product.productIdentifier)
        println(product.localizedTitle)
        println(product.localizedDescription)
        println(product.price)

        list.append(product as! SKProduct)
    }
}

このコードは例からのもので、私のシミュレーターでは非常にうまく機能しました。しかし、ProductID を自分の productID (もちろん bundleID も) に置き換えると、SKProductsrequest は何も返さなくなります。

理由がわかりません。誰かが私を助けてくれることを願っています。どうも!

4

2 に答える 2

5

私は一週間ずっとこの問題を抱えていました - コードに関して何を試し、ビルドとプロビジョニングの設定を微調整しても、製品が戻ってきませんでした.

最終的に修正されたのは、アプリのバンドル ID を xcode から に変更することでしcompany.appnamecom.company.appnamecom.company.appname.thingforpurchase1一方、アプリ内購入IDをフォーマットなど で参照したい.

これを解決するために、プロジェクト内で自動プロビジョニングをセットアップして設定をビルドするプロセスをやり直し、開発者アカウントを xcode に再度追加しました。これを行った後、上記の構文が機能しました。iTunes接続では、私のアプリのバンドルIDはまだ指定されていることに注意してcompany.appnameくださいcom..

Swift 2.0 と Swift 1.x で別の方法で行う必要があったことがもう 1 つあります。コンパイラは製品 ID を受け入れなくなりNSSetます Set<String>。以下の例。

このソリューションは、swift 2.0 および xcode 7 ベータ版で開発され、機能していることに注意してください。

元:

func requestProductInfo() {
    print("about to fetch product info")
    if SKPaymentQueue.canMakePayments() {
            let request = SKProductsRequest(productIdentifiers:
                Set(productIDs))

            let productIdentifiers: NSSet = NSSet(array: productIDs) // NSset might need to be mutable
            let productRequest : SKProductsRequest = SKProductsRequest(productIdentifiers: productIdentifiers as! Set<String>)

            //we set our class as its delegate (so we can handle the response)& trigger the request.
            productRequest.delegate = self
            productRequest.start()
            print("Fetching Products");
        }
        else {
            print("can't make purchases")
        }
    }
于 2015-07-24T02:02:56.770 に答える