在我的Android-libGDX游戏中,我有GameHelper和IabHelper。我需要为这两个类设置onActivityResult方法。下面提到的是我遇到问题的情况。你可以帮我解决这个问题,并为GameHelper和IabHelper设置onActivityResult menthod。
场景1 当我为GameHelper专门设置onActivityResult时,如下所示。 GameHelper相关的登录/注销工作完美,但没有IabHelper。与购买相关的IabHelper相关流程在第二个产品上失败,表明已经存在异步流程。
@Override
public void onActivityResult(int request, int response, Intent data) {
super.onActivityResult(request, response, data);
Log.i("AndroidLauncher", "onActivityResult - response :" + response);
gameHelper.onActivityResult(request, response, data);
}
场景2 当我为IabHelper专门设置onActivityResult时。方案1中的上述问题不适用于IabHelper。但登录/注销相关功能在GameHelper中不起作用。
@Override
public void onActivityResult(int request, int response, Intent data) {
if (!mHelper.handleActivityResult(request, response, data)) {
// not handled, so handle it ourselves (here's where you'd
// perform any handling of activity results not related to in-app
// billing...
super.onActivityResult(request, response, data);
}
}
其他代码详情
private void iabSetup() {
// load game data
loadData();
String base64EncodedPublicKey ="KeyKeyKey";
Log.d(TAG, "Creating IAB helper.");
mHelper = new IabHelper(this, base64EncodedPublicKey);
mHelper.enableDebugLogging(true);
Log.d(TAG, "Starting setup.");
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
Log.d(TAG, "Setup finished.");
if (!result.isSuccess()) {
complain("Problem setting up in-app billing: " + result);
return;
}
if (mHelper == null) return;
Log.d(TAG, "Setup successful. Querying inventory.");
mHelper.queryInventoryAsync(mGotInventoryListener);
}
});
}
// Listener that's called when we finish querying the items and subscriptions we own
IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
Log.d(TAG, "Query inventory finished.");
// Have we been disposed of in the meantime? If so, quit.
if (mHelper == null) return;
// Is it a failure?
if (result.isFailure()) {
complain("Failed to query inventory: " + result);
return;
}
Log.d(TAG, "Query inventory was successful.");
// Do we have the additional 1 life?
Purchase life1Purchase = inventory.getPurchase(SKU_1_Life);
life1Purchased = (life1Purchase != null);
Log.d(TAG, "User life1Purchased : " + life1Purchased);
// Do we have the additional 2 life?
Purchase life2Purchase = inventory.getPurchase(SKU_2_Life);
life2Purchased = (life2Purchase != null);
Log.d(TAG, "User life2Purchased : " + life2Purchased);
// Do we have the basket Speed Purchased ?
Purchase basketSpeedPurchase = inventory.getPurchase(SKU_Increase_Bucket_Speed);
basketSpeedPurchased = (basketSpeedPurchase != null);
Log.d(TAG, "User basketSpeedPurchased : " + basketSpeedPurchased);
// Do we have the basket Speed Purchased ?
Purchase basketSizePurchase = inventory.getPurchase(SKU_Increase_Bucket_Size);
basketSizePurchased = (basketSizePurchase != null);
Log.d(TAG, "User basketSizePurchased : " + basketSizePurchased);
// Do we have the basket Speed Purchased ?
Purchase adFreeGamePurchase = inventory.getPurchase(SKU_Ads_Free_Game);
adFreeGamePurchased = (adFreeGamePurchase != null);
Log.d(TAG, "User adFreeGamePurchased : " + adFreeGamePurchased);
}
};
public void onAdd1lifeButtonClicked() {
if (!mHelper.subscriptionsSupported()) {
complain("Subscriptions not supported on your device yet. Sorry!");
return;
}
Log.d(TAG, "Launching purchase flow for Add 1 life.");
try {
new Thread(new Runnable() {
@Override
public void run() {
mHelper.launchPurchaseFlow(AndroidLauncher.this, SKU_1_Life, RC_REQUEST, mPurchaseFinishedListener, payloadString);
}
}).start();
} catch (Exception e) {
Log.d(TAG, "buyItem Exception: " + e);
}
}
public void onAdd2livesButtonClicked() {
if (!mHelper.subscriptionsSupported()) {
complain("Subscriptions not supported on your device yet. Sorry!");
return;
}
Log.d(TAG, "Launching purchase flow for Add 2 lives.");
try {
new Thread(new Runnable() {
@Override
public void run() {
mHelper.launchPurchaseFlow(AndroidLauncher.this, SKU_2_Life, RC_REQUEST, mPurchaseFinishedListener, payloadString);
}
}).start();
} catch (Exception e) {
Log.d(TAG, "buyItem Exception: " + e);
}
}
public void onIncreaseBucketSpeedButtonClicked() {
if (!mHelper.subscriptionsSupported()) {
complain("Subscriptions not supported on your device yet. Sorry!");
return;
}
Log.d(TAG, "Launching purchase flow for increasing bucket speed.");
try {
new Thread(new Runnable() {
@Override
public void run() {
mHelper.launchPurchaseFlow(AndroidLauncher.this, SKU_Increase_Bucket_Speed, RC_REQUEST, mPurchaseFinishedListener, payloadString);
}
}).start();
} catch (Exception e) {
Log.d(TAG, "buyItem Exception: " + e);
}
}
public void onIncreaseBucketSizeButtonClicked() {
if (!mHelper.subscriptionsSupported()) {
complain("Subscriptions not supported on your device yet. Sorry!");
return;
}
Log.d(TAG, "Launching purchase flow for increasing bucket speed.");
try {
new Thread(new Runnable() {
@Override
public void run() {
mHelper.launchPurchaseFlow(AndroidLauncher.this, SKU_Increase_Bucket_Size, RC_REQUEST, mPurchaseFinishedListener, payloadString);
}
}).start();
} catch (Exception e) {
Log.d(TAG, "buyItem Exception: " + e);
}
}
public void onAdsFreeGameButtonClicked() {
if (!mHelper.subscriptionsSupported()) {
complain("Subscriptions not supported on your device yet. Sorry!");
return;
}
Log.d(TAG, "Launching purchase flow for Ads Free Game.");
try {
new Thread(new Runnable() {
@Override
public void run() {
mHelper.launchPurchaseFlow(AndroidLauncher.this, SKU_Ads_Free_Game, RC_REQUEST, mPurchaseFinishedListener, payloadString);
}
}).start();
} catch (Exception e) {
Log.d(TAG, "buyItem Exception: " + e);
}
}
// Callback for when a purchase is finished
IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
public void onIabPurchaseFinished(IabResult result, Purchase purchase) {
Log.d(TAG, "Purchase finished: " + result + ", purchase: " + purchase);
// if we were disposed of in the meantime, quit.
if (mHelper == null) return;
if (result.isFailure()) {
complain("Error purchasing: " + result);
return;
}
if (!verifyDeveloperPayload(purchase)) {
complain("Error purchasing. Authenticity verification failed.");
return;
}
Log.d(TAG, "Purchase successful.");
if (purchase.getSku().equals(SKU_1_Life)) {
Log.d(TAG, "Purchase is SKU_1_Life.");
}
if (purchase.getSku().equals(SKU_2_Life)) {
Log.d(TAG, "Purchase is SKU_2_Life.");
}
if (purchase.getSku().equals(SKU_2_Life)) {
Log.d(TAG, "Purchase is SKU_Increase_Bucket_Speed.");
}
if (purchase.getSku().equals(SKU_2_Life)) {
Log.d(TAG, "Purchase is SKU_Increase_Bucket_Size.");
}
if (purchase.getSku().equals(SKU_2_Life)) {
Log.d(TAG, "Purchase is SKU_Ads_Free_Game.");
}
}
};