为GameHelper和IabHelper设置onActivityResult

时间:2014-12-18 05:34:43

标签: android in-app-purchase in-app-billing

在我的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.");    
        } 
    }
};

0 个答案:

没有答案