IAPing.
This commit is contained in:
55
ios/src/clojure/advent/ios.clj
Normal file
55
ios/src/clojure/advent/ios.clj
Normal file
@@ -0,0 +1,55 @@
|
||||
(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))
|
||||
33
ios/src/java/advent/core/ProductDelegate.java
Normal file
33
ios/src/java/advent/core/ProductDelegate.java
Normal file
@@ -0,0 +1,33 @@
|
||||
package advent.core;
|
||||
|
||||
import java.util.*;
|
||||
import clojure.lang.RT;
|
||||
import clojure.lang.Symbol;
|
||||
import clojure.lang.IFn;
|
||||
|
||||
import com.badlogic.gdx.*;
|
||||
import com.badlogic.gdx.backends.iosrobovm.*;
|
||||
|
||||
import org.robovm.apple.foundation.*;
|
||||
import org.robovm.apple.uikit.UIApplication;
|
||||
import org.robovm.apple.glkit.GLKViewDrawableColorFormat;
|
||||
import org.robovm.apple.glkit.GLKViewDrawableDepthFormat;
|
||||
import org.robovm.apple.storekit.*;
|
||||
|
||||
public class ProductDelegate extends SKProductsRequestDelegateAdapter {
|
||||
|
||||
@Override
|
||||
public void didReceiveResponse(SKProductsRequest request, SKProductsResponse response) {
|
||||
((IFn) RT.var("advent.ios", "products-did-receive-response").deref()).invoke(request, response);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void didFail(SKRequest request, NSError error) {
|
||||
((IFn) RT.var("advent.ios", "products-did-fail").deref()).invoke(request, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void didFinish(SKRequest request) {
|
||||
((IFn) RT.var("advent.ios", "products-did-finish").deref()).invoke(request);
|
||||
}
|
||||
}
|
||||
43
ios/src/java/advent/core/TransactionObserver.java
Normal file
43
ios/src/java/advent/core/TransactionObserver.java
Normal file
@@ -0,0 +1,43 @@
|
||||
package advent.core;
|
||||
|
||||
import java.util.*;
|
||||
import clojure.lang.RT;
|
||||
import clojure.lang.Symbol;
|
||||
import clojure.lang.IFn;
|
||||
|
||||
import com.badlogic.gdx.*;
|
||||
import com.badlogic.gdx.backends.iosrobovm.*;
|
||||
|
||||
import org.robovm.apple.foundation.*;
|
||||
import org.robovm.apple.uikit.UIApplication;
|
||||
import org.robovm.apple.glkit.GLKViewDrawableColorFormat;
|
||||
import org.robovm.apple.glkit.GLKViewDrawableDepthFormat;
|
||||
import org.robovm.apple.storekit.*;
|
||||
|
||||
public class TransactionObserver extends SKPaymentTransactionObserverAdapter {
|
||||
|
||||
@Override
|
||||
public void updatedTransactions(SKPaymentQueue queue, NSArray<SKPaymentTransaction> transactions) {
|
||||
((IFn) RT.var("advent.ios", "updated-transactions").deref()).invoke(queue, transactions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatedDownloads(SKPaymentQueue queue, NSArray<SKDownload> downloads) {
|
||||
((IFn) RT.var("advent.ios", "updated-downloads").deref()).invoke(queue, downloads);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreCompletedTransactionsFinished(SKPaymentQueue queue) {
|
||||
((IFn) RT.var("advent.ios", "restore-completed-transactions-finished").deref()).invoke(queue);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void restoreCompletedTransactionsFailed(SKPaymentQueue queue, NSError error) {
|
||||
((IFn) RT.var("advent.ios", "restore-completed-transactions-failed").deref()).invoke(queue, error);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removedTransactions(SKPaymentQueue queue, NSArray<SKPaymentTransaction> transactions) {
|
||||
((IFn) RT.var("advent.ios", "removed-transactions").deref()).invoke(queue, transactions);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user