Files
gitea-docker/ios/src/clojure/advent/ios.clj
Bryce Covert 850a0a945d IAPing.
2017-09-25 11:28:48 -07:00

56 lines
2.1 KiB
Clojure

(ns advent.ios
(:require [advent.iap :as iap])
(:import [org.robovm.apple.storekit SKProductsResponse SKProduct SKMutablePayment SKPaymentQueue SKPaymentTransactionState]))
(def product (atom nil))
(defn products-did-receive-response [request ^SKProductsResponse response]
(reset! iap/can-purchase? true)
(reset! product (first (seq (.toArray (.getProducts response))))))
(defn products-did-fail [request error]
)
(defn products-did-finish [request]
)
(defn start-purchase []
(try
(.addPayment (SKPaymentQueue/getDefaultQueue)
(doto (SKMutablePayment. @product)
(.setQuantity 1)))
(catch Exception e
(println e))))
(defn updated-transactions [queue, transactions]
(let [purchased-states #{SKPaymentTransactionState/Purchased SKPaymentTransactionState/Restored}
finished-states #{SKPaymentTransactionState/Purchased SKPaymentTransactionState/Restored SKPaymentTransactionState/Failed SKPaymentTransactionState/Deferred}
is-finished (->> transactions
.toArray
seq
(every? #(finished-states (.getTransactionState %))))
has-purchased (->> transactions
.toArray
seq
(filter #(purchased-states (.getTransactionState %)))
(map #(-> % (.getPayment) (.getProductIdentifier)))
(filter #(= % "fullgame"))
seq)]
(when is-finished
(iap/set-purchase-pref (if has-purchased true false))
(doseq [^SKPaymentTransaction trans (->> transactions .toArray seq)]
(.finishTransaction (SKPaymentQueue/getDefaultQueue) trans)))))
(defn updated-downloads [queue, downloads]
(println "updated downloads" downloads))
(defn restore-completed-transactions-finished [queue]
(println "transactions finished"))
(defn restore-completed-transactions-failed [queue, error]
(println "transactions failed"))
(defn removed-transactions [queue, transactions]
(println "transactions removed" transactions))