Difference between revisions of "StoreKit"

From GiderosMobile
 
(9 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
__NOTOC__
 
__NOTOC__
'''Supported platforms:''' ios<br/>
+
<languages />
'''Available since:''' Gideros 2012.2.2<br/>
+
<!-- GIDEROSOBJ:StoreKit -->
=== Description ===
+
'''<translate>Supported platforms</translate>:''' [[File:Platform ios.png]]<br/>
 +
'''<translate>Available since</translate>:''' Gideros 2012.2.2<br/>
 +
=== <translate>Description</translate> ===
 
<translate><br />
 
<translate><br />
The [[StoreKit]] class provides the functionality that allow an application to request payment from a user. <br />
+
The [[Special:MyLanguage/StoreKit|StoreKit]] class provides the functionality that allow an application to request payment from a user. <br />
 
This class is only available to iOS platforms.<br />
 
This class is only available to iOS platforms.<br />
 
<br />
 
<br />
The [[StoreKit]] class is defined in module &quot;storekit&quot;. Therefore, you need to call<br />
+
The [[Special:MyLanguage/StoreKit|StoreKit]] class is defined in module &quot;storekit&quot;. Therefore, you need to call<br />
[[require(&quot;storekit&quot;)]] before using it. Loading the &quot;storekit&quot; module <br />
+
''require(&quot;storekit&quot;)'' before using it. Loading the &quot;storekit&quot; module <br />
also creates a global variable [[storekit]] of type [[StoreKit]] for direct use. <br />
+
also creates a global variable ''storekit'' of type [[Special:MyLanguage/StoreKit|StoreKit]] for direct use. <br />
 
<br />
 
<br />
 
&lt;h3&gt;State of a Transaction&lt;/h3&gt;<br />
 
&lt;h3&gt;State of a Transaction&lt;/h3&gt;<br />
Line 17: Line 19:
 
&lt;ul&gt;<br />
 
&lt;ul&gt;<br />
 
&lt;li&gt;**StoreKit.PURCHASED = &quot;purchased&quot;**: The App Store successfully processed payment. Your application should provide the content the user purchased.&lt;/li&gt;<br />
 
&lt;li&gt;**StoreKit.PURCHASED = &quot;purchased&quot;**: The App Store successfully processed payment. Your application should provide the content the user purchased.&lt;/li&gt;<br />
&lt;li&gt;**StoreKit.FAILED = &quot;failed&quot;**: The transaction failed. Check the [[event.errorCode]] and [[event.errorDescription]] fields to determine what happened.&lt;/li&gt;<br />
+
&lt;li&gt;**StoreKit.FAILED = &quot;failed&quot;**: The transaction failed. Check the ''event.errorCode'' and ''event.errorDescription'' fields to determine what happened.&lt;/li&gt;<br />
&lt;li&gt;**StoreKit.RESTORED = &quot;restored&quot;**: This transaction restores content previously purchased by the user. Read the [[event.originalTransaction]] field to obtain information about the original purchase.&lt;/li&gt;<br />
+
&lt;li&gt;**StoreKit.RESTORED = &quot;restored&quot;**: This transaction restores content previously purchased by the user. Read the ''event.originalTransaction'' field to obtain information about the original purchase.&lt;/li&gt;<br />
 
&lt;/ul&gt;<br />
 
&lt;/ul&gt;<br />
 
<br />
 
<br />
 
&lt;h3&gt;StoreKit Events&lt;/h3&gt;<br />
 
&lt;h3&gt;StoreKit Events&lt;/h3&gt;<br />
 
<br />
 
<br />
The [[StoreKit]] class dispatches the events [[Event.REQUEST_PRODUCTS_COMPLETE]], [[Event.TRANSACTION]] and [[Event.RESTORE_TRANSACTIONS_COMPLETE]].<br />
+
The [[Special:MyLanguage/StoreKit|StoreKit]] class dispatches the events [[Special:MyLanguage/Event.REQUEST_PRODUCTS_COMPLETE|Event.REQUEST_PRODUCTS_COMPLETE]], [[Special:MyLanguage/Event.TRANSACTION|Event.TRANSACTION]] and [[Special:MyLanguage/Event.RESTORE_TRANSACTIONS_COMPLETE|Event.RESTORE_TRANSACTIONS_COMPLETE]].<br />
 
<br />
 
<br />
 
&lt;h3&gt;# Event.REQUEST_PRODUCTS_COMPLETE&lt;/h3&gt;<br />
 
&lt;h3&gt;# Event.REQUEST_PRODUCTS_COMPLETE&lt;/h3&gt;<br />
 
The function [[StoreKit:requestProducts]] is used to retrieve localized information about a list of products from the Apple App Store. <br />
 
The function [[StoreKit:requestProducts]] is used to retrieve localized information about a list of products from the Apple App Store. <br />
When the request completes, [[Event.REQUEST_PRODUCTS_COMPLETE]] event is dispatched. The resulting event table contains <br />
+
When the request completes, [[Special:MyLanguage/Event.REQUEST_PRODUCTS_COMPLETE|Event.REQUEST_PRODUCTS_COMPLETE]] event is dispatched. The resulting event table contains <br />
 
these additional fields about the products:<br />
 
these additional fields about the products:<br />
 
<br />
 
<br />
Line 37: Line 39:
 
&lt;/ul&gt;<br />
 
&lt;/ul&gt;<br />
 
<br />
 
<br />
Each table in [[event.products]] array contains these fields:<br />
+
Each table in ''event.products'' array contains these fields:<br />
 
<br />
 
<br />
 
&lt;ul&gt;<br />
 
&lt;ul&gt;<br />
Line 77: Line 79:
 
<br />
 
<br />
 
&lt;ul&gt;<br />
 
&lt;ul&gt;<br />
&lt;li&gt;**event.errorCode:** (number) error code if [[event.transaction.state]] is set to [[StoreKit.FAILED]]&lt;/li&gt;<br />
+
&lt;li&gt;**event.errorCode:** (number) error code if ''event.transaction.state'' is set to [[Special:MyLanguage/StoreKit.FAILED|StoreKit.FAILED]]&lt;/li&gt;<br />
&lt;li&gt;**event.errorDescription:** (string) error description if [[event.transaction.state]] is set to [[StoreKit.FAILED]]&lt;/li&gt;<br />
+
&lt;li&gt;**event.errorDescription:** (string) error description if ''event.transaction.state'' is set to [[Special:MyLanguage/StoreKit.FAILED|StoreKit.FAILED]]&lt;/li&gt;<br />
 
&lt;li&gt;**event.payment.productIdentifier:** (string) product identifier of the transaction&lt;/li&gt;<br />
 
&lt;li&gt;**event.payment.productIdentifier:** (string) product identifier of the transaction&lt;/li&gt;<br />
 
&lt;li&gt;**event.payment.quantity:** (number) number of items the user wants to purchase&lt;/li&gt;<br />
 
&lt;li&gt;**event.payment.quantity:** (number) number of items the user wants to purchase&lt;/li&gt;<br />
Line 129: Line 131:
 
&lt;/ul&gt;<br />
 
&lt;/ul&gt;<br />
 
<br />
 
<br />
If all transactions are delivered successfully, [[event.errorCode]] and [[event.errorDescription]] will be [[nil]].<br />
+
If all transactions are delivered successfully, ''event.errorCode'' and ''event.errorDescription'' will be ''nil''.<br />
 
<br /></translate>
 
<br /></translate>
 
{|-
 
{|-
| style="width: 50%;"|
+
| style="width: 50%; vertical-align:top;"|
=== Methods ===
+
=== <translate>Methods</translate> ===
[[StoreKit:canMakePayments]] - StoreKit - returns whether the user is allowed to make payments<br/>
+
[[Special:MyLanguage/StoreKit:canMakePayments|StoreKit:canMakePayments]] ''<translate>returns whether the user is allowed to make payments</translate>''<br/><!-- GIDEROSMTD:StoreKit:canMakePayments() returns whether the user is allowed to make payments -->
[[StoreKit:finishTransaction]] - StoreKit - completes a pending transaction<br/>
+
[[Special:MyLanguage/StoreKit:finishTransaction|StoreKit:finishTransaction]] ''<translate>completes a pending transaction</translate>''<br/><!-- GIDEROSMTD:StoreKit:finishTransaction(transaction) completes a pending transaction -->
[[StoreKit:purchase]] - StoreKit - process a payment request<br/>
+
[[Special:MyLanguage/StoreKit:purchase|StoreKit:purchase]] ''<translate>process a payment request</translate>''<br/><!-- GIDEROSMTD:StoreKit:purchase(productIdentifier,quantity) process a payment request -->
[[StoreKit:requestProducts]] - StoreKit - retrieve localized information about a list of products<br/>
+
[[Special:MyLanguage/StoreKit:requestProducts|StoreKit:requestProducts]] ''<translate>retrieve localized information about a list of products</translate>''<br/><!-- GIDEROSMTD:StoreKit:requestProducts(productIdentifiers) retrieve localized information about a list of products -->
[[StoreKit:restoreCompletedTransactions]] - StoreKit - restore previously completed purchases<br/>
+
[[Special:MyLanguage/StoreKit:restoreCompletedTransactions|StoreKit:restoreCompletedTransactions]] ''<translate>restore previously completed purchases</translate>''<br/><!-- GIDEROSMTD:StoreKit:restoreCompletedTransactions() restore previously completed purchases -->
| style="width: 50%;"|
+
| style="width: 50%; vertical-align:top;"|
=== Events ===
+
=== <translate>Events</translate> ===
[[Event.REQUEST_PRODUCTS_COMPLETE]]<br/>
+
[[Special:MyLanguage/Event.REQUEST_PRODUCTS_COMPLETE|Event.REQUEST_PRODUCTS_COMPLETE]]<br/><!-- GIDEROSEVT:Event.REQUEST_PRODUCTS_COMPLETE requestProductsComplete-->
[[Event.RESTORE_TRANSACTIONS_COMPLETE]]<br/>
+
[[Special:MyLanguage/Event.RESTORE_TRANSACTIONS_COMPLETE|Event.RESTORE_TRANSACTIONS_COMPLETE]]<br/><!-- GIDEROSEVT:Event.RESTORE_TRANSACTIONS_COMPLETE restoreTransactionsComplete-->
[[Event.TRANSACTION]]<br/>
+
[[Special:MyLanguage/Event.TRANSACTION|Event.TRANSACTION]]<br/><!-- GIDEROSEVT:Event.TRANSACTION transaction-->
=== Constants ===
+
=== <translate>Constants</translate> ===
[[StoreKit.FAILED]]<br/>
+
[[Special:MyLanguage/StoreKit.FAILED|StoreKit.FAILED]]<br/><!-- GIDEROSCST:StoreKit.FAILED failed-->
[[StoreKit.PURCHASED]]<br/>
+
[[Special:MyLanguage/StoreKit.PURCHASED|StoreKit.PURCHASED]]<br/><!-- GIDEROSCST:StoreKit.PURCHASED purchased-->
[[StoreKit.RESTORED]]<br/>
+
[[Special:MyLanguage/StoreKit.RESTORED|StoreKit.RESTORED]]<br/><!-- GIDEROSCST:StoreKit.RESTORED restored-->
 
|}
 
|}

Latest revision as of 15:31, 13 September 2018


Supported platforms: Platform ios.png
Available since: Gideros 2012.2.2

Description


The StoreKit class provides the functionality that allow an application to request payment from a user.
This class is only available to iOS platforms.

The StoreKit class is defined in module "storekit". Therefore, you need to call
require("storekit") before using it. Loading the "storekit" module
also creates a global variable storekit of type StoreKit for direct use.

<h3>State of a Transaction</h3>

The state of a transaction is defined by 3 string constants:

<ul>
<li>**StoreKit.PURCHASED = "purchased"**: The App Store successfully processed payment. Your application should provide the content the user purchased.</li>
<li>**StoreKit.FAILED = "failed"**: The transaction failed. Check the event.errorCode and event.errorDescription fields to determine what happened.</li>
<li>**StoreKit.RESTORED = "restored"**: This transaction restores content previously purchased by the user. Read the event.originalTransaction field to obtain information about the original purchase.</li>
</ul>

<h3>StoreKit Events</h3>

The StoreKit class dispatches the events Event.REQUEST_PRODUCTS_COMPLETE, Event.TRANSACTION and Event.RESTORE_TRANSACTIONS_COMPLETE.

<h3># Event.REQUEST_PRODUCTS_COMPLETE</h3>
The function StoreKit:requestProducts is used to retrieve localized information about a list of products from the Apple App Store.
When the request completes, Event.REQUEST_PRODUCTS_COMPLETE event is dispatched. The resulting event table contains
these additional fields about the products:

<ul>
<li>**event.error:** (number) error code if the request failed to execute</li>
<li>**event.errorDescription:** (string) error description if the request failed to execute</li>
<li>**event.products:** (table) array of products where each element is a table which contains the product information</li>
<li>**event.invalidProductIdentifiers:** (table) array of product identifier strings that were not recognized by the Apple App Store</li>
</ul>

Each table in event.products array contains these fields:

<ul>
<li>**title:** (number) localized name of the product</li>
<li>**description:** (string) localized description of the product</li>
<li>**price:** (number) cost of the product in the local currency</li>
<li>**productIdentifier:** (string) string that identifies the product to the Apple App Store</li>
</ul>

For example, this code can be used to print the retrieved product information:
<pre><code>

local function onRequestProductsComplete(event)
if event.errorCode ~= nil then
print("error", event.errorCode, event.errorDescription)
return
end

print("products:")
for i=1,#event.products do
print("title", event.products[i].title)
print("description", event.products[i].description)
print("price", event.products[i].price)
print("productIdentifier", event.products[i].productIdentifier)
end

print("invalidProductIdentifiers:")
for i=1,#event.invalidProductIdentifiers do
print(event.invalidProductIdentifiers[i])
end
end

</code></pre>
<h3># Event.TRANSACTION</h3>

This event is dispatched when a transaction is updated. The event listener should process all successful transactions,
unlock the functionality purchased by the user, and then finish the transaction by calling StoreKit:finishTransaction method. The resulting event table can
contain these additional fields about the products:

<ul>
<li>**event.errorCode:** (number) error code if event.transaction.state is set to StoreKit.FAILED</li>
<li>**event.errorDescription:** (string) error description if event.transaction.state is set to StoreKit.FAILED</li>
<li>**event.payment.productIdentifier:** (string) product identifier of the transaction</li>
<li>**event.payment.quantity:** (number) number of items the user wants to purchase</li>
<li>**event.transaction.state:** (string) current state of the transaction</li>
<li>**event.transaction.identifier:** (string) string that uniquely identifies a successful payment transaction</li>
<li>**event.transaction.receipt:** (string) signed receipt that records all information about a successful payment transaction</li>
<li>**event.transaction.date:** (string) date the transaction was added to the App Store's payment queue</li>
<li>**event.originalTransaction.identifier:** (string) identifier of original transaction</li>
<li>**event.originalTransaction.date:** (string) date of the original transaction</li>
</ul>

This code can be used to print the transaction information and unlock the functionality purchased by the user:

<pre><code>
local function onTransaction(event)
print("payment.productIdentifier", event.payment.productIdentifier)
print("payment.quantity", event.payment.quantity)

print("transaction.state", event.transaction.state)

if event.transaction.state == StoreKit.FAILED then
print("error", event.errorCode, event.errorDescription)
else
print("transaction.identifier", event.transaction.identifier)
print("transaction.date", event.transaction.date)

if event.transaction.state == StoreKit.PURCHASED then
print("transaction.receipt", event.transaction.receipt)
end

if event.transaction.state == StoreKit.RESTORED then
print("originalTransaction.identifier", event.originalTransaction.identifier)
print("originalTransaction.date", event.originalTransaction.date)
end

-- unlock the functionality purchased by the user
end

storekit:finishTransaction(event.transaction)
end

</code></pre>
<h3># Event.RESTORE_TRANSACTIONS_COMPLETE</h3>

This event is dispatched after the transactions are delivered. The resulting event table can contain these additional fields:

<ul>
<li>**event.errorCode:** (number) error code if an error occurred while restoring transactions</li>
<li>**event.errorDescription:** (string) description of the error if an error occurred while restoring transactions</li>
</ul>

If all transactions are delivered successfully, event.errorCode and event.errorDescription will be nil.

Methods

StoreKit:canMakePayments returns whether the user is allowed to make payments
StoreKit:finishTransaction completes a pending transaction
StoreKit:purchase process a payment request
StoreKit:requestProducts retrieve localized information about a list of products
StoreKit:restoreCompletedTransactions restore previously completed purchases

Events

Event.REQUEST_PRODUCTS_COMPLETE
Event.RESTORE_TRANSACTIONS_COMPLETE
Event.TRANSACTION

Constants

StoreKit.FAILED
StoreKit.PURCHASED
StoreKit.RESTORED