Difference between revisions of "Iab"
From GiderosMobile
m (Text replacement - "<source" to "<syntaxhighlight") |
m (Text replacement - "</source>" to "</syntaxhighlight>") |
||
Line 194: | Line 194: | ||
--To make a purchase I would: | --To make a purchase I would: | ||
--if iab then iab:purchase("credit50") end | --if iab then iab:purchase("credit50") end | ||
− | </ | + | </syntaxhighlight> |
{{GIDEROS IMPORTANT LINKS}} | {{GIDEROS IMPORTANT LINKS}} |
Latest revision as of 14:28, 13 July 2023
Supported platforms:
Available since: Gideros 2016.12
Inherits from: EventDispatcher
Description
The idea is to provide common In App Billing interface for most of available iap frameworks, so users could use in app purchases across platforms and iap frameworks with completely same or similar interface.
What IAB Interface provides:
- Same API through all supported In-app billing frameworks on all platforms
- Completely same workflow for all In-app Billing frameworks
- Can dynamically detect which stores are installed on device and return the list to you in prioritized order, so you can have one single binary for all stores
- Provides internal product ID usage through all In-app Billing frameworks, which might use different product IDs
- Provides unique Receipt ID even if In-app Billing does not support it
- Manages all the confirmation and consumption internally
Interface usage is quite simple:
- IAB.new(iabframework) -- initialize specified IAB framework
Available frameworks: 'amazon', 'google', 'ios'
- IAB:setUp(value1, value2, ..., valueN) -- provide all the keys/devids/appids/etc needed for the framework, which you will get in same order on Native part in Map object
- IAB:setProducts({internalId1 = "storeId1", internalId2 = "storeId2", ..., internalIdn = "storeIdn"}) -- provide list of products you will be using (key is your internal products id, value is store specific product id)
- IAB:setConsumables({"internalId1", "internalId2", ..., "internalIdn"}) -- which of your products are consumables, that people can buy many times (provide internal product ids)
- IAB:isAvailable() --check if IAB is available, raises event:
- Event.AVAILABLE --iab is available
- Event.NOT_AVAILABLE --iab is NOT available
- IAB:requestProducts() --request information for products provided in setProducts method
- Event.PRODUCTS_COMPLETE
- event.productId
- event.title
- event.description
- event.price
- Event.PRODUCTS_ERROR
- event.error
- Event.PRODUCTS_COMPLETE
- IAB:purchase(prodId) --purchase product by providing your internal product id, raises two events:
- Event.PURCHASE_COMPLETE
- event.productId
- event.receiptId
- Event.PURCHASE_ERROR
- event.error
- Event.PURCHASE_COMPLETE
- iab:restore() --raise purchase events for each previously purchases entitled (not consumed) items, raises two events:
- Event.RESTORE_COMPLETE
- Event.RESTORE_ERROR
- event.error
Example
if not tv then pcall(function() require "iab" end) end
if IAB then
if android then
if kindle then
iab=IAB.new("amazon")
iab:setProducts({
credit50="credit_50",
credit100="credit_100",
credit500="credit_500",
credit1000="credit_1000"
})
else
iab=IAB.new("google")
iab:setUp(googleLicence)
iab:setProducts({
credit50="credit50",
credit100="credit100",
credit500="credit500",
credit1000="credit1000"
})
end
elseif ios then
iab=IAB.new("ios")
iab:setProducts({
credit50="credit50",
credit100="credit100",
credit500="credit500",
credit1000="credit1000"
})
end
if iab then
iab:setConsumables({"credit50","credit100","credit500","credit1000"})
iab:addEventListener(Event.AVAILABLE,function(e)
print("iab is available")
iabCheck=false
iab:requestProducts()
end)
--usually here we would set a flag that it is possible to make purchases
--basically you can allow doing all the iap stuff after this event is called
--[[ REQUESTING PRODUCTS ]]--
--if this event is called, we received the list of products and information about them
iab:addEventListener(Event.PRODUCTS_COMPLETE,function(e)
print("Product list completed")
for i = 1, #e.products do
local p=e.products[i]
--id, title, description and price
print(p.productId,p.title,p.description,p.price)
if p.productId=="fullgame" then
iabCheck=true
iabFullGame=false
end
for loop=1,#creditText do
local c=creditText[loop]
if p.productId==c[1] then
c[2]=p.price
c[3]=true
end
end
end
iab:restore()
end)
--else we could not retrieve information about products now
iab:addEventListener(Event.PRODUCTS_ERROR,function(e)
print(e:getType(),e.error)
end)
iab:addEventListener(Event.PURCHASE_COMPLETE,function(e)
--purchases successfully completed
--here you need to check if receiptId was not already saved previously
--as in if purchase was not already made
--then you can unlock the item here
--and store receiptId presistently to know
--that you have already provided this item to user
print("Purchase completed")
if remainingCredits<0 then remainingCredits=0 end
if e.productId=="credit50" then
remainingCredits+=50
saveSettings()
elseif e.productId=="credit100" then
remainingCredits+=100
saveSettings()
elseif e.productId=="credit500" then
remainingCredits+=500
saveSettings()
elseif e.productId=="credit1000" then
remainingCredits+=1000
saveSettings()
elseif e.productId=="fullgame" then
iabCheck=true
iabFullGame=true
end
print(e:getType(),e.productId,e.receiptId)
end)
iab:addEventListener(Event.PURCHASE_ERROR,function(e)
--it was not possible to complete the purchase,
--inform user
--if e.error=="Unable to buy item (response: 7:Item Already Owned)" then
iab:isAvailable()
--end
-- print(e:getType(),e.error)
end)
iab:addEventListener(Event.RESTORE_COMPLETE,function(e)
--restore successfully completed
--here you need to check if receiptId was not already saved previously
--as in if purchase was not already made
--then you can unlock the item here
--and store receiptId presistently to know
--that you have already provided this item to user
if iabCheck then
fullgame=iabFullGame
saveSettings()
end
print("restore complete")
--iab:purchase("credit500")
end)
iab:addEventListener(Event.RESTORE_ERROR,function(e)
--it was not possible to complete the restore,
--inform user
-- print(e:getType(),e.error)
end)
iab:isAvailable()
-- iab:purchase("credit100")
else
print("iab provider not available")
end
else
print("iab not available")
end
--To make a purchase I would:
--if iab then iab:purchase("credit50") end