2017-08-18 5 views
0

私はいくつかのアプリ内購入をしています。しかし、私は偶然に自分のアプリケーションを削除した場合にそれらを復元する方法を提供する必要があると私は読む。それらはスキンやテクスチャのような非消費アイテムです。私はこのサイトのチュートリアルを読んでいた:https://code.tutsplus.com/tutorials/in-app-purchase-tutorial-with-swift-3-ios-sdk--cms-27595アプリ内購入を正しく復元するにはどうすればよいですか?

しかし、トランザクションを復元する彼らの説明は私を混乱させた。彼らはこれをした:彼らは実際にpaymentQueueRestoreCompletedTransactionsFinishedを使用どこ

@IBAction func restorePurchaseButt(_ sender: Any) { 
SKPaymentQueue.default().add(self) 
SKPaymentQueue.default().restoreCompletedTransactions() 
} 

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) { 
nonConsumablePurchaseMade = true 
UserDefaults.standard.set(nonConsumablePurchaseMade, forKey: "nonConsumablePurchaseMade") 

UIAlertView(title: "IAP Tutorial", 
message: "You've successfully restored your purchase!", 
delegate: nil, cancelButtonTitle: "OK").show() 
} 

は、しかし、彼らは私を示したことはありません()。私は彼らが購入を復元するrestorePurchaseButt()を使用していることを理解します。しかし、私はこれらの方法の両方を理解していません。

SKPaymentQueue.default().add(self) 
SKPaymentQueue.default().restoreCompletedTransactions() 

ユーザーが購入した場合、どのようコードのスニペットでもチェックしていますか? if文は表示されません。そして、私はおそらくrestoreCompletedTransactions()がpaymentQueueRestoreCompletedTransactionsFinished()を起動すると思ったが、わからないのだろうか?ただし、それがあっても、どうすればpaymentQueueRestoreCompletedTransactionsFinished()プレーヤーがそれらの取引をしたかどうかを確認しますか? 複数の場合にどのようなアプリ内購入で復元するのですか?

答えて

4

から進む:

SKPaymentQueue.default().add(self) 
SKPaymentQueue.default().restoreCompletedTransactions() 

次に、この機能に、あなたがiTunesConnectで持っているさまざまなアプリ内購入を追加する必要があります。大文字小文字の "ProductID"をiTunesConnectの製品IDに変更し、アプリ内購入と同数のケースを追加します。

func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) { 
    for transaction in queue.transactions { 
     let t: SKPaymentTransaction = transaction 
     let prodID = t.payment.productIdentifier as String 

     switch prodID { 
     case "ProductID1": 
      // implement the given in-app purchase as if it were bought 
     case "ProductID2": 
      // implement the given in-app purchase as if it were bought 
     default: 
      print("iap not found") 
     } 
    } 
} 

のご質問にお答えするには: それはあなたが、次のされたこの特定のチュートリアルでは、あなたのアプリ内購入の包括的な考え方を教えに焦点を当てたように見え、その例の購入ではなく、複数の製品のために使用することができるコードを使用。

アップルは、ボタンが押されたときに呼び出すrestoreCompletedTransactions()関数を使用してアイテムを以前に購入したかどうかを確認します。これは、Appleが提供するStoreKitフレームワークの一部です。それがチェックされると自動的にpaymentQueueRestoreCompletedTransactionsFinished()関数がトリガーされます。私が上記で提供したコードでは、それは見つけた購入に応じて異なるコードを実行し、復元する製品が見つからなければコンソールに出力します。

+0

これは受け入れられる回答である必要があります。ありがとうOlivia – oskarko

+0

これは実際には解決策です。私はこの解決策を考えていました。 Oliviaに感謝します。投票する! –

0

私はチュートリアルを話すことはできませんが、購入を処理することは非常に敏感なことです。間違いなく自分で実装することはできますが、代わりにライブラリを使用してみるように促します。私はSwiftyStoreKitを使用し、発生するエッジケースやニュアンスの多くを処理します。そこからhttps://github.com/bizz84/SwiftyStoreKit

あなたはもちろん、あなたを復元今は復元するボタンで行ったように、あなたが追加する必要がある製品が復元されたチェックする必要があり、そこに

関連する問題