Air-Extension Inappbilling-это расширение Adobe Air Contivension (ANE) для покупки продуктов для нескольких андроидных рынков (местных жителей и глобальных).
........... راهنمــــــای فـــــــارسی ..........
Мы подготовили 2 типового шаблона проектов:

Он использует Google Play In-App Billing Version 3 API.
Поддерживаемая функциональность:
Пожалуйста, прочитайте документы и попробуйте ANE, прежде чем задать какие -либо вопросы.
http://developer.android.com/google/play/billing/index.html
http://help.adobe.com/en_us/air/extensions/index.html
Добавьте файл iabilling.ane из папки пакета в свой Air Air Project.
Учебное пособие: как встроить ANE в FlashBuilder, Flash (Animate) и FlashDevelop
Вставьте все использование элементов в массив «_items».
Получите Base64Key от рыночной консоли и замените '== 5AMP1E8A5E64KE7 =='.
Кроме того, если вы хотите добавить новый рынок, вам пришлось добавить новый корпус с «Bindeurl» и «packageUrl».
import com.gerantech.extensions.iab.Iab ;
import com.gerantech.extensions.iab.Purchase ;
import com.gerantech.extensions.iab.events.IabEvent ;
...
// provide all sku items
_items = new Array ( "my.product.id1" , "my.product.id2" , "my.product.id3" ) ;
var _marketName : String = "google" ;
var base64Key : String , bindURL : String , package URL:String;
switch ( _marketName ) {
case "google" :
base64Key = "==5AMP1E8A5E64KE7==" ;
bindURL = "com.android.vending.billing.InAppBillingService.BIND" ;
packageURL = "com.android.vending" ;
break;
case "cafebazaar" :
base64Key = "==5AMP1E8A5E64KE7==" ;
bindURL = "ir.cafebazaar.pardakht.InAppBillingService.BIND" ;
packageURL = "com.farsitel.bazaar" ;
break;
case "myket" :
base64Key = "==5AMP1E8A5E64KE7==" ;
bindURL = "ir.mservices.market.InAppBillingService.BIND" ;
packageURL = "ir.mservices.market" ;
break;
case "cando" :
base64Key = "==5AMP1E8A5E64KE7==" ;
bindURL = "com.ada.market.service.payment.BIND" ;
packageURL = "com.ada.market" ;
break;
default:
trace( "BillingManager ::: market name[" + _marketName + "] is invalid." );
break;
}
Iab . instance . addEventListener (IabEvent . SETUP_FINISHED , iabSetupFinishedHandler) ;
Iab . instance . startSetup(base64Key, bindURL, package URL);
...
function iabSetupFinishedHandler(event : IabEvent) : void {
trace( "BillingManager ::: iabSetupFinishedHandler" , event.result.message);
Iab.instance.removeEventListener(IabEvent.SETUP_FINISHED, iabSetupFinishedHandler);
queryInventory();
}Иногда пользователи не могут завершить поток покупки, вызывающие проблемы с сетью или другие фатальные ошибки. Вы можете восстановить элементы после инициализации для лучшего пользовательского опыта.
/**Getting purchased product details, Iab should be initialized first</br>
* if put items args getting purchased and not purchased product details
*/
function queryInventory() : void {
//restoring purchased in-app items and subscriptions
Iab.instance.addEventListener(IabEvent.QUERY_INVENTORY_FINISHED, iabQueryInventoryFinishedHandler);
Iab.instance.queryInventory();
}
...
function iabQueryInventoryFinishedHandler(event : IabEvent) : void {
Iab.instance.removeEventListener(IabEvent.QUERY_INVENTORY_FINISHED, iabQueryInventoryFinishedHandler);
if ( !event.result.succeed ) {
trace ( "iabQueryInventoryFinishedHandler failed to finish." ) ;
return ;
}
// consume all consumable items
/*for each(var k:String in _items) {
var purchase:Purchase = Iab.instance.getPurchase(k);
if( purchase == null || purchase.itemType == Iab.ITEM_TYPE_SUBS )
continue;
consume(purchase.sku);
}*/
} Когда пользователь нажал или нажал метод покупки кнопки «Купить». Не забывайте, чтобы приобрести этот товар, должен быть использован.
Для расходных материалов вы должны сразу же потреблять предметы после покупки в методе слушателя.
// making the purchase, Iab should be initialized first
Iab . instance . addEventListener (IabEvent . PURCHASE_FINISHED , iabPurchaseFinishedHandler) ;
Iab . instance . purchase(sku, Iab . ITEM_TYPE_INAPP , payload) ;
...
function iabPurchaseFinishedHandler(event : IabEvent) : void {
trace( "BillingManager ::: iabPurchaseFinishedHandler" , event.result.message);
Iab.instance.removeEventListener(IabEvent.PURCHASE_FINISHED, iabPurchaseFinishedHandler);
if (!event.result.succeed) {
trace (event . result . response, event . result . message ) ;
return ;
}
var purchase:Purchase = Iab.instance.getPurchase(event.result.purchase.sku);
if( purchase == null )
queryInventory();
else // if you want immediatly consume after purchase
consume(purchase.sku);
}Для неспособного элемента не нужно использовать этот метод.
function consume(sku : String ) : void {
trace( "BillingManager ::: consume" , sku);
Iab.instance.addEventListener(IabEvent.CONSUME_FINISHED, iabConsumeFinishedHandler);
Iab.instance.consume(sku);
}
function iabConsumeFinishedHandler(event : IabEvent) : void {
trace( "BillingManager ::: iabConsumeFinishedHandler" , event.result.message);
Iab.instance.removeEventListener(IabEvent.CONSUME_FINISHED, iabConsumeFinishedHandler);
if (!event.result.succeed) {
trace ( "iabConsumeFinishedHandler failed to consume:" , event . result . message ) ;
return ;
}
}Добавить разрешения на выставление счетов на основе выбранного рынка добавьте следующие строки в ваш файл Air Application-app.xml внутри <manifestadditions>
<!-- In APP Billing permissions -->
< uses-permission android : name = " android.permission.INTERNET " />
<!-- For Google --> < uses-permission android : name = " com.android.vending.BILLING " />
<!-- For CafeBazaar --> <!-- <uses-permission android:name="com.farsitel.bazaar.permission.PAY_THROUGH_BAZAAR" /> -->
<!-- For Myket --> <!-- <uses-permission android:name="ir.mservices.market.BILLING" /> -->
< application android : enabled = " true " >
< activity android : name = " com.gerantech.extensions.IabActivity "
android : theme = " @android:style/Theme.Translucent.NoTitleBar.Fullscreen "
android : background = " #30000000 "
android : screenOrientation = " portrait "
android : configChanges = " orientation|keyboardHidden " />
</ application >Добавить идентификатор идентификатора расширения: com.gerantech.extensions.iabilling
< extensions >
< extensionID >com.gerantech.extensions.iabilling</ extensionID >
</ extensions >http://developer.android.com/google/play/billing/billing_testing.html
ANE строится для Air 18.0+, чтобы восстановить для другой версии, сделайте следующее: