56 lines
2.1 KiB
Clojure
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))
|