来自 Timeline 的应用内结算 ANE
In-App Billing ANE from Timeline
我一直在尝试了解如何使用 Milkman 的应用内结算 ANE (Android) 已经有一段时间了(有些人可能还记得我之前的问题)但是对于我来说,我可以让它工作。
我使用 Flash CC 编写代码。由于我还没有完全掌握 Document Class 之类的东西,所以我仍然在时间轴的第一帧进行编码。我的应用程序已准备就绪,只是缺少该功能,所以我真的希望有人能够帮助我。
我不需要非常花哨的东西,只是一个如何设置一次性计费的示例。我已将 ANE 链接到 fla 并在 google 播放控制台中创建了对象。
我通常不会要求别人为我编写代码(我坚信从长远来看,解释比仅仅给出答案要好),但在这种情况下,我很对我会欢迎它感到沮丧(我可能会从中吸取教训)。
这是我的测试 fla 文件:test fla 和我的(不工作的)代码,用于那些没有安装 flash 的文件:
import com.milkmangames.nativeextensions.android.*;
import com.milkmangames.nativeextensions.android.events.*;
import flash.events.Event;
if (AndroidIAB.isSupported()) {
AndroidIAB.create();
} else {
trace("no");
return
}
// listeners for billing service startup
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.SERVICE_READY, onReady);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.SERVICE_NOT_SUPPORTED, onUnsupported);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.INVENTORY_LOADED, onInventoryLoaded);
AndroidIAB.androidIAB.addEventListener(AndroidBillingErrorEvent.LOAD_INVENTORY_FAILED, onInventoryFailed);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.PURCHASE_SUCCEEDED, onPurchaseSuccess);
AndroidIAB.androidIAB.addEventListener(AndroidBillingErrorEvent.PURCHASE_FAILED, onPurchaseFailed);
// start the service
AndroidIAB.androidIAB.startBillingService("LICENCE");
function onReady(e: AndroidBillingEvent): void {
ready.text = "Service Ready";
}
// load the player's current inventory
AndroidIAB.androidIAB.loadPlayerInventory();
function onInventoryLoaded(e: AndroidBillingEvent): void {
for each(var purchase: AndroidPurchase in e.purchases) {
inventory.text = "You own the item:" + purchase.itemId;
}
}
function onInventoryFailed(e: AndroidBillingErrorEvent): void {
inventory.text = "Something went wrong loading inventory: " + e.text;
}
// listen for purchase events
function onPurchaseSuccess(e: AndroidBillingEvent): void {
var purchase: AndroidPurchase = e.purchases[0];
purchased.text = "you purchased the item " + purchase.itemId;
AndroidIAB.androidIAB.loadPlayerInventory();
}
function onPurchaseFailed(e: AndroidBillingErrorEvent): void {
purchased.text = "Something went wrong with the purchase of " + e.itemId + ": " + e.text;
}
buyTest.addEventListener(MouseEvent.CLICK, fnBuy);
function fnBuy(e: Event): void {
click.text="clicked!!"
AndroidIAB.androidIAB.purchaseItem("your_itemid");
}
function onUnsupported(e: AndroidBillingEvent): void {
ready.text = "Service Not Suported";
}
有人可以帮助我从时间轴(没有文档 Class 或外部 类)设置 Milkman ANE(或任何其他用于 IAB 的 ANE)吗?非常感谢你。
很可能您需要帮助的是 AS3 事件系统,而不是那个特定的 ANE。 AS3 中事件的侦听器稍后可能 运行。这是因为 AS3 是一种异步语言。该 ANE 只能在准备就绪后执行,这正确 运行s onReady 侦听器,但这就是您的所有代码在这一点上所做的。您可能期望以下行:
AndroidIAB.androidIAB.loadPlayerInventory();
之后 到 运行 但你这样想就错了。该行代码已经 运行 并且由于 ANE 在准备就绪时尚未准备就绪,因此它从未触发您的 onInventoryLoaded 侦听器。将代码放在 methods/listener 之后并不能保证事情会按 运行 的顺序进行。在您的情况下,除了方法和侦听器之外的所有代码都将首先 运行 (是的,包括 AndroidIAB.androidIAB.loadPlayerInventory();),然后您的方法将 运行 在调用时,然后您的侦听器将 运行 触发时。
确保代码运行顺序正确,因为AS3是异步的,你必须等待一个事件触发,然后你才能尝试触发更多的事件。
因此您等待 onReady 触发,然后您尝试 运行 下一步:
function onReady(e: AndroidBillingEvent): void {
ready.text = "Service Ready";
//ANE is ready let's try to load the inventory now.
AndroidIAB.androidIAB.loadPlayerInventory();
}
我一直在尝试了解如何使用 Milkman 的应用内结算 ANE (Android) 已经有一段时间了(有些人可能还记得我之前的问题)但是对于我来说,我可以让它工作。 我使用 Flash CC 编写代码。由于我还没有完全掌握 Document Class 之类的东西,所以我仍然在时间轴的第一帧进行编码。我的应用程序已准备就绪,只是缺少该功能,所以我真的希望有人能够帮助我。 我不需要非常花哨的东西,只是一个如何设置一次性计费的示例。我已将 ANE 链接到 fla 并在 google 播放控制台中创建了对象。
我通常不会要求别人为我编写代码(我坚信从长远来看,解释比仅仅给出答案要好),但在这种情况下,我很对我会欢迎它感到沮丧(我可能会从中吸取教训)。 这是我的测试 fla 文件:test fla 和我的(不工作的)代码,用于那些没有安装 flash 的文件:
import com.milkmangames.nativeextensions.android.*;
import com.milkmangames.nativeextensions.android.events.*;
import flash.events.Event;
if (AndroidIAB.isSupported()) {
AndroidIAB.create();
} else {
trace("no");
return
}
// listeners for billing service startup
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.SERVICE_READY, onReady);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.SERVICE_NOT_SUPPORTED, onUnsupported);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.INVENTORY_LOADED, onInventoryLoaded);
AndroidIAB.androidIAB.addEventListener(AndroidBillingErrorEvent.LOAD_INVENTORY_FAILED, onInventoryFailed);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.PURCHASE_SUCCEEDED, onPurchaseSuccess);
AndroidIAB.androidIAB.addEventListener(AndroidBillingErrorEvent.PURCHASE_FAILED, onPurchaseFailed);
// start the service
AndroidIAB.androidIAB.startBillingService("LICENCE");
function onReady(e: AndroidBillingEvent): void {
ready.text = "Service Ready";
}
// load the player's current inventory
AndroidIAB.androidIAB.loadPlayerInventory();
function onInventoryLoaded(e: AndroidBillingEvent): void {
for each(var purchase: AndroidPurchase in e.purchases) {
inventory.text = "You own the item:" + purchase.itemId;
}
}
function onInventoryFailed(e: AndroidBillingErrorEvent): void {
inventory.text = "Something went wrong loading inventory: " + e.text;
}
// listen for purchase events
function onPurchaseSuccess(e: AndroidBillingEvent): void {
var purchase: AndroidPurchase = e.purchases[0];
purchased.text = "you purchased the item " + purchase.itemId;
AndroidIAB.androidIAB.loadPlayerInventory();
}
function onPurchaseFailed(e: AndroidBillingErrorEvent): void {
purchased.text = "Something went wrong with the purchase of " + e.itemId + ": " + e.text;
}
buyTest.addEventListener(MouseEvent.CLICK, fnBuy);
function fnBuy(e: Event): void {
click.text="clicked!!"
AndroidIAB.androidIAB.purchaseItem("your_itemid");
}
function onUnsupported(e: AndroidBillingEvent): void {
ready.text = "Service Not Suported";
}
有人可以帮助我从时间轴(没有文档 Class 或外部 类)设置 Milkman ANE(或任何其他用于 IAB 的 ANE)吗?非常感谢你。
很可能您需要帮助的是 AS3 事件系统,而不是那个特定的 ANE。 AS3 中事件的侦听器稍后可能 运行。这是因为 AS3 是一种异步语言。该 ANE 只能在准备就绪后执行,这正确 运行s onReady 侦听器,但这就是您的所有代码在这一点上所做的。您可能期望以下行:
AndroidIAB.androidIAB.loadPlayerInventory();
之后 到 运行 但你这样想就错了。该行代码已经 运行 并且由于 ANE 在准备就绪时尚未准备就绪,因此它从未触发您的 onInventoryLoaded 侦听器。将代码放在 methods/listener 之后并不能保证事情会按 运行 的顺序进行。在您的情况下,除了方法和侦听器之外的所有代码都将首先 运行 (是的,包括 AndroidIAB.androidIAB.loadPlayerInventory();),然后您的方法将 运行 在调用时,然后您的侦听器将 运行 触发时。
确保代码运行顺序正确,因为AS3是异步的,你必须等待一个事件触发,然后你才能尝试触发更多的事件。
因此您等待 onReady 触发,然后您尝试 运行 下一步:
function onReady(e: AndroidBillingEvent): void {
ready.text = "Service Ready";
//ANE is ready let's try to load the inventory now.
AndroidIAB.androidIAB.loadPlayerInventory();
}