Air-Extension-InAppbillingは、複数のAndroid市場(地元の人々とグローバル)向けに製品を購入するためのAdobe Air Native Extension(ANE)です。
...........را逸手ــــــیارسی.........
2つのタイププロジェクトテンプレートを準備しました。

Google In-App Billingバージョン3 APIを使用しています。
サポートされている機能:
質問をする前に、ドキュメントを読んで、ANEを試してください。
http://developer.android.com/google/play/billing/index.html
http://help.adobe.com/en_us/air/extensions/index.html
パッケージフォルダーからAdobe Airプロジェクトにiabilling.aneファイルを追加します。
チュートリアル: AnesをFlashBuilder、Flash(Animate)、FlashDevelopに埋め込む方法
すべての使用を挿入して、アイテムを「_items」配列に入れます。
Market Consoleから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 ;
}
}選択した市場に基づいて請求権限を追加する<manifestadditions>内部の空気aplication-app.xmlファイルに次の行を追加します>
<!-- 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 >拡張機能ID拡張機能ID: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+用にビルドされています。