godot-demo-projects/misc/android_iap/iap.gd

125 lines
3.0 KiB
GDScript

extends Node
signal purchase_success(item_name)
signal purchase_fail
signal purchase_cancel
signal purchase_owned(item_name)
signal has_purchased(item_name)
signal consume_success(item_name)
signal consume_fail
signal consume_not_required
signal sku_details_complete
signal sku_details_error
onready var payment = Globals.get_singleton("GodotPayments")
func _ready():
if payment:
# set callback with this script instance
payment.setPurchaseCallbackId(get_instance_ID())
# set consume purchased item automatically after purchase, defulat value is true
func set_auto_consume(auto):
if payment:
payment.setAutoConsume(auto)
# request user owned item, callback : has_purchased
func request_purchased():
if payment:
payment.requestPurchased()
func has_purchased(receipt, signature, sku):
if sku == "":
print("has_purchased : nothing")
emit_signal("has_purchased", null)
else:
print("has_purchased : ", sku)
emit_signal("has_purchased", sku)
# purchase item
# callback : purchase_success, purchase_fail, purchase_cancel, purchase_owned
func purchase(item_name):
if payment:
# transaction_id could be any string that used for validation internally in java
payment.purchase(item_name, "transaction_id")
func purchase_success(receipt, signature, sku):
print("purchase_success : ", sku)
emit_signal("purchase_success", sku)
func purchase_fail():
print("purchase_fail")
emit_signal("purchase_fail")
func purchase_cancel():
print("purchase_cancel")
emit_signal("purchase_cancel")
func purchase_owned(sku):
print("purchase_owned : ", sku)
emit_signal("purchase_owned", sku)
# consume purchased item
# callback : consume_success, consume_fail
func consume(item_name):
if payment:
payment.consume(item_name)
# consume all purchased items
func consume_all():
if payment:
payment.consumeUnconsumedPurchases()
func consume_success(receipt, signature, sku):
print("consume_success : ", sku)
emit_signal("consume_success", sku)
# if consume fail, need to call request_purchased() to get purchase token from google
# then try to consume again
func consume_fail():
emit_signal("consume_fail")
# no purchased item to consume
func consume_not_required():
emit_signal("consume_not_required")
# detail info of IAP items
# sku_details = {
# product_id (String) : {
# type (String),
# product_id (String),
# title (String),
# description (String),
# price (String), # this can be used to display price for each country with their own currency
# price_currency_code (String),
# price_amount (float)
# },
# ...
# }
var sku_details = {}
# query for details of IAP items
# callback : sku_details_complete
func sku_details_query(list):
if payment:
var sku_list = StringArray(list)
payment.querySkuDetails(sku_list)
func sku_details_complete(result):
print("sku_details_complete : ", result)
for key in result.keys():
sku_details[key] = result[key]
emit_signal("sku_details_complete")
func sku_details_error(error_message):
print("error_sku_details = ", error_message)
emit_signal("sku_details_error")