(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))