Difference between revisions of "Iab"
From GiderosMobile
Line 32: | Line 32: | ||
===== '''Code example:''' ===== | ===== '''Code example:''' ===== | ||
<source lang="lua"> | <source lang="lua"> | ||
− | + | if not tv then | |
− | if | + | pcall(function() require "iab" end) |
− | |||
− | |||
− | |||
− | |||
− | |||
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) | + | 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 ]]-- | |
− | end) | + | --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 | |
</source> | </source> |
Revision as of 05:24, 30 November 2019
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
- 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_COMPLETE
- event.error
Code 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