7 Commits
4.0.0 ... 5.0.0

Author SHA1 Message Date
Mathias Westerdahl
caff4397d8 Merge pull request #54 from defold/lua-to-json
Updated to use dmScript::LuaToJson()
2022-11-02 15:00:12 +01:00
JCash
501af9c90d Updated to use dmScript::LuaToJson() 2022-11-02 14:36:36 +01:00
Björn Ritzl
961a43f732 Update index.md 2022-09-27 14:46:24 +02:00
Björn Ritzl
47f03108ab Merge branch 'master' of https://github.com/defold/extension-iap 2022-09-23 16:21:36 +02:00
Björn Ritzl
c0e1a9aef1 Fixed YAML format errors 2022-09-23 16:21:27 +02:00
Alexey Gulev
f4294a9eb5 Merge pull request #53 from defold/AGulev-patch-1
Update index.md
2022-09-12 16:26:20 +02:00
Alexey Gulev
8799860198 Update index.md 2022-09-12 16:26:07 +02:00
4 changed files with 24 additions and 86 deletions

View File

@@ -8,7 +8,7 @@ brief: This manual covers how to setup and use Google Play Game Services in Defo
This extension provides a unified, simple to use interface to several different stores for in-app purchase: This extension provides a unified, simple to use interface to several different stores for in-app purchase:
* Apples iOS Appstore - StoreKit * Apples iOS Appstore - StoreKit
* Google Play Billing 3.0 * Google Play Billing 5.0
* Amazon 'in-app billing' 2.0.61 * Amazon 'in-app billing' 2.0.61
* Facebook Canvas 'game payments' * Facebook Canvas 'game payments'
@@ -31,7 +31,7 @@ Detailed documentation from Apple, Google, Amazon and Facebook can be found here
## Installation ## Installation
To use this library in your Defold project, add the following URL to your `game.project` dependencies: To use this library in your Defold project, add the following URL to your `game.project` dependencies:
https://github.com/defold/extension-iap/archive/master.zip [https://github.com/defold/extension-iap/archive/master.zip](https://github.com/defold/extension-iap/archive/master.zip)
We recommend using a link to a zip file of a [specific release](https://github.com/defold/extension-iap/releases). We recommend using a link to a zip file of a [specific release](https://github.com/defold/extension-iap/releases).

View File

@@ -21,11 +21,11 @@
members: members:
- name: request_id - name: request_id
type: string type: string
desc: Facebook only. [icon:facebook] Optional custom unique request id to desc: Facebook only [icon:facebook]. Optional custom unique request id to
set for this transaction. The id becomes attached to the payment within the Graph API. set for this transaction. The id becomes attached to the payment within the Graph API.
- name: token - name: token
type: string type: string
desc: [icon:googleplay] Which subscription offer to use when buying a subscription. The token can be retrieved from desc: Google Play only [icon:googleplay]. Which subscription offer to use when buying a subscription. The token can be retrieved from
the subscriptions table returned when calling iap.list() the subscriptions table returned when calling iap.list()
examples: examples:
@@ -132,22 +132,22 @@
- name: price - name: price
type: number type: number
desc: The price of the product. desc: The price of the product.
[icon:googleplay]: Used only for in-app products For Google Play [icon:googleplay] this is used only for in-app products
- name: price_string - name: price_string
type: string type: string
desc: The price of the product, as a formatted string (amount and currency symbol). desc: The price of the product, as a formatted string (amount and currency symbol).
[icon:googleplay]: Used only for in-app products For Google Play [icon:googleplay] this is used only for in-app products
- name: currency_code - name: currency_code
type: string type: string
desc: [icon:ios] [icon:googleplay] [icon:facebook] The currency code. desc: The currency code.
[icon:googleplay]: The merchant's locale, instead of the user's For Google Play [icon:googleplay] this is the merchant's locale, instead of the user's.
[icon:googleplay]: Used only for in-app products For Google Play [icon:googleplay] this is used only for in-app products
- name: subscriptions - name: subscriptions
type: table type: table
desc: [icon:googleplay] List of subscription offers. desc: Only available for Google Play [icon:googleplay]. List of subscription offers.
Each offer contains a token and a list of price and billing options. Each offer contains a token and a list of price and billing options.
See https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.PricingPhase See https://developer.android.com/reference/com/android/billingclient/api/ProductDetails.PricingPhase
members: members:

View File

@@ -306,23 +306,8 @@ static void HandleProductResult(const IAPCommand* cmd)
} }
if (cmd->m_ResponseCode == BILLING_RESPONSE_RESULT_OK) { if (cmd->m_ResponseCode == BILLING_RESPONSE_RESULT_OK) {
dmJson::Document doc; const char* json = (const char*)cmd->m_Data;
dmJson::Result r = dmJson::Parse((const char*) cmd->m_Data, &doc); dmScript::JsonToLua(L, json, strlen(json)); // throws lua error if it fails
if (r == dmJson::RESULT_OK && doc.m_NodeCount > 0) {
char err_str[128];
if (dmScript::JsonToLua(L, &doc, 0, err_str, sizeof(err_str)) < 0) {
dmLogError("Failed converting product result JSON to Lua; %s", err_str);
lua_pushnil(L);
IAP_PushError(L, "failed to convert JSON to Lua for product response", REASON_UNSPECIFIED);
} else {
lua_pushnil(L);
}
} else {
dmLogError("Failed to parse product response (%d)", r);
lua_pushnil(L);
IAP_PushError(L, "failed to parse product response", REASON_UNSPECIFIED);
}
dmJson::Free(&doc);
} else { } else {
dmLogError("IAP error %d", cmd->m_ResponseCode); dmLogError("IAP error %d", cmd->m_ResponseCode);
lua_pushnil(L); lua_pushnil(L);
@@ -356,23 +341,8 @@ static void HandlePurchaseResult(const IAPCommand* cmd)
if (cmd->m_ResponseCode == BILLING_RESPONSE_RESULT_OK) { if (cmd->m_ResponseCode == BILLING_RESPONSE_RESULT_OK) {
if (cmd->m_Data != 0) { if (cmd->m_Data != 0) {
dmJson::Document doc; const char* json = (const char*)cmd->m_Data;
dmJson::Result r = dmJson::Parse((const char*) cmd->m_Data, &doc); dmScript::JsonToLua(L, json, strlen(json)); // throws lua error if it fails
if (r == dmJson::RESULT_OK && doc.m_NodeCount > 0) {
char err_str[128];
if (dmScript::JsonToLua(L, &doc, 0, err_str, sizeof(err_str)) < 0) {
dmLogError("Failed converting purchase JSON result to Lua; %s", err_str);
lua_pushnil(L);
IAP_PushError(L, "failed to convert purchase response JSON to Lua", REASON_UNSPECIFIED);
} else {
lua_pushnil(L);
}
} else {
dmLogError("Failed to parse purchase response (%d)", r);
lua_pushnil(L);
IAP_PushError(L, "failed to parse purchase response", REASON_UNSPECIFIED);
}
dmJson::Free(&doc);
} else { } else {
dmLogError("IAP error, purchase response was null"); dmLogError("IAP error, purchase response was null");
lua_pushnil(L); lua_pushnil(L);

View File

@@ -46,23 +46,7 @@ static void IAPList_Callback(void* luacallback, const char* result_json)
if(result_json != 0) if(result_json != 0)
{ {
dmJson::Document doc; dmScript::JsonToLua(L, result_json, strlen(result_json)); // throws lua error if it fails
dmJson::Result r = dmJson::Parse(result_json, &doc);
if (r == dmJson::RESULT_OK && doc.m_NodeCount > 0) {
char err_str[128];
if (dmScript::JsonToLua(L, &doc, 0, err_str, sizeof(err_str)) < 0) {
dmLogError("Failed converting list result JSON to Lua; %s", err_str);
lua_pushnil(L);
IAP_PushError(L, "Failed converting list result JSON to Lua", REASON_UNSPECIFIED);
} else {
lua_pushnil(L);
}
} else {
dmLogError("Failed to parse list result JSON (%d)", r);
lua_pushnil(L);
IAP_PushError(L, "Failed to parse list result JSON", REASON_UNSPECIFIED);
}
dmJson::Free(&doc);
} }
else else
{ {
@@ -112,23 +96,7 @@ static void IAPListener_Callback(void* luacallback, const char* result_json, int
} }
if (result_json) { if (result_json) {
dmJson::Document doc; dmScript::JsonToLua(L, result_json, strlen(result_json)); // throws lua error if it fails
dmJson::Result r = dmJson::Parse(result_json, &doc);
if (r == dmJson::RESULT_OK && doc.m_NodeCount > 0) {
char err_str[128];
if (dmScript::JsonToLua(L, &doc, 0, err_str, sizeof(err_str)) < 0) {
dmLogError("Failed converting purchase result JSON to Lua; %s", err_str);
lua_pushnil(L);
IAP_PushError(L, "failed converting purchase result JSON to Lua", REASON_UNSPECIFIED);
} else {
lua_pushnil(L);
}
} else {
dmLogError("Failed to parse purchase response (%d)", r);
lua_pushnil(L);
IAP_PushError(L, "failed to parse purchase response", REASON_UNSPECIFIED);
}
dmJson::Free(&doc);
} else { } else {
lua_pushnil(L); lua_pushnil(L);
switch(error_code) switch(error_code)