以前の質問から私を覚えている人もいるかもしれません。Android用のアプリを作成していますが、うまくいっています。私が欲しかった機能のほとんどはうまく機能します。私は自分で基本を学びました (そしてここ StackOverflow の数人の寛大な人々の助けを借りて!) が、私はまだ自分自身を初心者だと考えています (今日の質問は、私がどれほどの初心者であるかを示します!)。
私のアプリは、特定の時点での国の歴史を示すダイナミック マップです。Google Play では、ユーザーは基本アプリ (ほとんどが空) を無料でダウンロードでき、アプリ内課金でパック (フランス、アメリカ、イギリスなど) を購入できます。それが私が立ち往生しているところです。
Milkman AndroidIAB ANE を購入し、ドキュメント ( this one ) を注意深く読みました。ライブラリに ANE を追加し、アプリケーション マニフェストを更新することができました。サンプル ファイルを変更して、公開鍵と購入可能なパックの ID を追加しました。(ANE がライセンスされているため、許可されているかどうかわからないため、ここにコードを投稿しません。)
私のアプリはそのように動作します:
最初の画面 : ウェブサイトへのリンクと「Enter」ボタンのあるロゴ。
クリックすると、ユーザーはいくつかのボタン (パック/国ごとに 1 つ) のある画面に移動します。
ユーザーが所有するパックをクリックすると、選択した国のマップに移動します。
彼がそれを所有していない場合、彼はそれを購入して購入するかどうかを尋ねられます。
問題: (警告: それらのいくつかは今月の初心者のステータスに値しますが、私はここで学ぶためにここにいますよね?)
Milkman の例から適用されたコードは、DocumentClass として使用される外部の .as ファイルにあります。画面 2 ボタンを .as ファイルの機能にリンクするにはどうすればよいですか? 私はこれを試しましたが、うまくいきません:
franceBtn.addEventListener(MouseEvent.CLICK, checkAndPurchase); function checkAndPurchase (e:MouseEvent):void{ purchasePack1(); //function from the example, it checks if the pack is owned // and send the user to the store if not };
EDIT 1:おそらく非常に簡単ですが、何をする必要があるかを理解するのに十分な経験がありません。アプリに一連のボタンがあります (「franceBtn」、「usaBtn」、「ukBtn」など)。これらのボタンをクリックすると、パック (「francePack」、「usaPack」、および「ukPack」) がユーザーによって所有されているかどうかを確認し、所有していない場合はアプリ内購入を開始する必要があります。ボタンに EventListener を追加しようとしましたが、何も起こりません。画面にもログにもありません。
2.問題1が修正されたとしましょう。私のアプリはオフラインで使用することを意図しています (追加のパックを購入する場合を除く)。私が読んだことを理解した方法は、アプリ内購入パックの「インベントリ」は Google Play を介して取得されるということです。つまり、ユーザーがオンラインである必要があることを意味します (私が間違っていなければ)。この「インベントリ」を保存するデバイス内に何らかのファイルを作成して、オフラインでアクセスできるようにする方法はありますか?
編集 2: ユーザーがオンラインでなくても、どこからでもアプリを使用できるようにしたい (明らかにパックを購入する場合を除く)。しかし、どのパックが既に所有されているかを知るために、アプリは Google Play をチェックしていると思います。そのため、所有しているパックの「インベントリ」をデバイス/アプリ内に直接保存する方法を探しています(オフラインでアクセスして、インターネットが開始するたびに更新できるようにします。より明確になることを願っています。指摘してくれてありがとうではなかった。
ドキュメントを何度も読みましたが、本当に行き詰まっています。助けていただければ幸いです。;)
前もって感謝します、ジェリル
編集 3: IAB に関連するコードの一部を次に示します (このチュートリアルに従って作成しました:ここですが、実際には理解できませんでした。学習したいと思っていますが、これは中級レベルのチュートリアルであり、何も見つかりませんでした本当の初心者のために何をすべきかを説明しているインターネット上. もし私が見つけられなかったリンクがあれば、私はすべて聞いています:D )
import com.milkmangames.nativeextensions.android.*;
import com.milkmangames.nativeextensions.android.events.*;
import flash.events.MouseEvent;
if (AndroidIAB.isSupported()) {
AndroidIAB.create();
}
// listeners for billing service startup
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.SERVICE_READY, onReady);
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.SERVICE_NOT_SUPPORTED, onUnsupported);
// start the service
AndroidIAB.androidIAB.startBillingService("my_key");
function onReady(e: AndroidBillingEvent): void {
trace("service now ready- you can now make purchases.");
}
function onUnsupported(e: AndroidBillingEvent): void {
trace("sorry, in app billing won't work on this phone!");
}
// listen for inventory events
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.INVENTORY_LOADED, onInventoryLoaded);
AndroidIAB.androidIAB.addEventListener(AndroidBillingErrorEvent.LOAD_INVENTORY_FAILED, onInventoryFailed);
function onInventoryLoaded(e: AndroidBillingEvent): void {
for each(var purchase: AndroidPurchase in e.purchases) {
trace("You own the item:" + purchase.itemId);
}
}
function onInventoryFailed(e: AndroidBillingErrorEvent): void {
trace("Something went wrong loading inventory: " + e.text);
}
// load the player's current inventory
AndroidIAB.androidIAB.loadPlayerInventory();
// listen for purchase events
AndroidIAB.androidIAB.addEventListener(AndroidBillingEvent.PURCHASE_SUCCEEDED, onPurchaseSuccess);
AndroidIAB.androidIAB.addEventListener(AndroidBillingErrorEvent.PURCHASE_FAILED, onPurchaseFailed);
function onPurchaseSuccess(e: AndroidBillingEvent): void {
var purchase: AndroidPurchase = e.purchases[0];
trace("you purchased the item " + purchase.itemId);
AndroidIAB.androidIAB.loadPlayerInventory();
}
function onPurchaseFailed(e: AndroidBillingErrorEvent): void {
trace("Something went wrong with the purchase of " + e.itemId + ": " + e.text);
}
franceBtn.addEventListener(MouseEvent.CLICK, onPackOneButtonClicked);
function onPackOneButtonClicked(e: MouseEvent) {
if (purchase.itemId == "packone") {
franceMap.visible = true;
} else {
AndroidIAB.androidIAB.purchaseItem("packone");
}
}
お待ち頂きまして、ありがとうございます!ジェリル