In-app purchase einrichten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • In-app purchase einrichten

    Versuche nun schon seit Tagen mit meiner App weiter zu kommen, aber
    leider kommen immer wieder grösser Stolpersteine in den Weg. Einer
    dieser Steine ist die In-app purchase Funktion. Ich möchte gerne meinen
    Nutzer die Möglichkeit geben, die Werbung zu entfernen und nebenbei ein
    paar tolle Features freizuschalten. Ich legte dazu im ItunesConnect
    Center zwei Nicht-Verbrauchsartikel an und gab ihnen die ID:
    seemu.iap.addcoins und seemu.iap.removeads (Testweise). Anschliessend
    fand ich folgenden SourceCode: github.com/awseeley/Swift-In-App-Purchase-Tutorial
    und baute es in meine App ein. Ich testete anschliessend meine App.
    Im Output Fenster erscheint die Meldung: IAP is enabled, loading. Die
    Button sind aber weiterhin nicht freigeschalten und ich kann nicht
    weiter agieren. Was mache ich falsch?

    Quellcode

    1. mport UIKit
    2. import StoreKit
    3. class Shop: UIViewController, SKProductsRequestDelegate, SKPaymentTransactionObserver{
    4. @IBOutlet var lblAd: UILabel!
    5. @IBOutlet var lblCoinAmount: UILabel!
    6. @IBOutlet var outRemoveAds: UIButton!
    7. @IBOutlet var outAddCoins: UIButton!
    8. var coins = 50
    9. // 1
    10. override func viewDidLoad() {
    11. super.viewDidLoad()
    12. outRemoveAds.enabled = false
    13. outAddCoins.enabled = false
    14. // Set IAPS
    15. if(SKPaymentQueue.canMakePayments()) {
    16. print("IAP is enabled, loading")
    17. let productID:NSSet = NSSet(objects: "seemu.iap.addcoins", "seemu.iap.removeads")
    18. let request: SKProductsRequest = SKProductsRequest(productIdentifiers: productID as! Set<String>)
    19. request.delegate = self
    20. request.start()
    21. } else {
    22. print("please enable IAPS")
    23. }
    24. }
    25. // 2
    26. @IBAction func btnRemoveAds(sender: UIButton) {
    27. for product in list {
    28. let prodID = product.productIdentifier
    29. if(prodID == "seemu.iap.removeads") {
    30. p = product
    31. buyProduct()
    32. break;
    33. }
    34. }
    35. }
    36. // 3
    37. @IBAction func btnAddCoins(sender: UIButton) {
    38. for product in list {
    39. let prodID = product.productIdentifier
    40. if(prodID == "seemu.iap.addcoins") {
    41. p = product
    42. buyProduct()
    43. break;
    44. }
    45. }
    46. }
    47. // 4
    48. func removeAds() {
    49. lblAd.removeFromSuperview()
    50. }
    51. // 5
    52. func addCoins() {
    53. coins = coins + 50
    54. lblCoinAmount.text = "\(coins)"
    55. }
    56. override func didReceiveMemoryWarning() {
    57. super.didReceiveMemoryWarning()
    58. // Dispose of any resources that can be recreated.
    59. }
    60. @IBAction func RestorePurchases(sender: UIButton) {
    61. SKPaymentQueue.defaultQueue().addTransactionObserver(self)
    62. SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
    63. }
    64. var list = [SKProduct]()
    65. var p = SKProduct()
    66. // seemu.iap.removeads
    67. // seemu.iap.addcoins
    68. func buyProduct() {
    69. print("buy " + p.productIdentifier)
    70. let pay = SKPayment(product: p)
    71. SKPaymentQueue.defaultQueue().addTransactionObserver(self)
    72. SKPaymentQueue.defaultQueue().addPayment(pay as SKPayment)
    73. }
    74. func productsRequest(request: SKProductsRequest, didReceiveResponse response: SKProductsResponse) {
    75. print("product request")
    76. let myProduct = response.products
    77. for product in myProduct {
    78. print("product added")
    79. print(product.productIdentifier)
    80. print(product.localizedTitle)
    81. print(product.localizedDescription)
    82. print(product.price)
    83. list.append(product )
    84. }
    85. outRemoveAds.enabled = true
    86. outAddCoins.enabled = true
    87. }
    88. func paymentQueueRestoreCompletedTransactionsFinished(queue: SKPaymentQueue) {
    89. print("transactions restored")
    90. for transaction in queue.transactions {
    91. let t: SKPaymentTransaction = transaction
    92. let prodID = t.payment.productIdentifier as String
    93. switch prodID {
    94. case "seemu.iap.removeads":
    95. print("remove ads")
    96. removeAds()
    97. case "seemu.iap.addcoins":
    98. print("add coins to account")
    99. addCoins()
    100. default:
    101. print("IAP not setup")
    102. }
    103. }
    104. }
    105. func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
    106. print("add paymnet")
    107. for transaction:AnyObject in transactions {
    108. let trans = transaction as! SKPaymentTransaction
    109. print(trans.error)
    110. switch trans.transactionState {
    111. case .Purchased:
    112. print("buy, ok unlock iap here")
    113. print(p.productIdentifier)
    114. let prodID = p.productIdentifier as String
    115. switch prodID {
    116. case "seemu.iap.removeads":
    117. print("remove ads")
    118. removeAds()
    119. case "seemu.iap.addcoins":
    120. print("add coins to account")
    121. addCoins()
    122. default:
    123. print("IAP not setup")
    124. }
    125. queue.finishTransaction(trans)
    126. break;
    127. case .Failed:
    128. print("buy error")
    129. queue.finishTransaction(trans)
    130. break;
    131. default:
    132. print("default")
    133. break;
    134. }
    135. }
    136. }
    137. func finishTransaction(trans:SKPaymentTransaction)
    138. {
    139. print("finish trans")
    140. SKPaymentQueue.defaultQueue().finishTransaction(trans)
    141. }
    142. func paymentQueue(queue: SKPaymentQueue, removedTransactions transactions: [SKPaymentTransaction])
    143. {
    144. print("remove trans");
    145. }
    146. }
    Alles anzeigen
  • Es könnte helfen wenn du erstmal verstehst was du da machst statt einfach irgendwelchen Code zu kopieren.

    Sorry aber warum liest du dir nicht einfach die Doku von Apple dazu durch, verstehst wie es geht und programmierst es dann selber?
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Okay vieleicht doch noch nicht so ganz. Wenn der Kauf erfolgreich war wird ein Boolen auf true gesetzt. Wenn ich die App schliesse und dann wieder öffne stimmt soweit auch alles. Nur wenn ich nun testweise den Wert auf false stelle und die Wiederherstellung teste, anschliessend die Transaktion abbreche ist der Wert wieder bei true. Woran liegt das?