2017-08-24 1 views
0

en essayant d'utiliser dans la facturation de l'application dans Android pour le moment.OnIabPurchaseFinishedListener pas appelé dans la classe d'assistance

Tout fonctionne correctement et je peux acheter des articles et interroger ceux qui existent déjà, mais mon écouteur OnIabPurchaseFinishedListener n'est pas appelé lors d'un achat réussi. Il est appelé lorsqu'il y a un problème mais pas sur un achat terminé. J'ai mon activité principale, avec des fragments et un tiroir de navigation. (Fragments ne sont pas touchés ici. J'ai une classe d'aide que toute la facturation se passe dans.

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener, MyBilling.Update {\ 

     MyBilling bill; 
     OnCreate(){ 

     bill = new MyBilling(this, this); 
     bill.onCreate(); 
     } 


     private void RemoveAdsClick() 
     { 
      bill.purchaseRemoveAds(); 

     } 

     public void NewPurchaseUpdate(){ 

     tinydb.putBoolean("Premium", true); 
     nav_Menu.findItem(R.id.remove_ad_button).setVisible(false); 
     displaySelectedScreen(R.id.distance_check); // Reload screen 

     } 


} 

public class MyBilling extends Activity { 

    ////Interface 
    public interface Update { 
     void NewPurchaseUpdate(); 
    } 

    // Debug tag, for logging 
    static final String TAG = "XXXXXX"; 

    static final String SKU_REMOVE_ADS = "remove_ads"; 

    // (arbitrary) request code for the purchase flow 
    static final int RC_REQUEST = 10111; 

    // Activity 
    Activity activity; 

    // The helper object 
    IabHelper mHelper; 

    String base64EncodedPublicKey = "xxxxxxxx"; 
    String payload = "xxxxx"; 
    public boolean isAdsDisabled = false; 
    public boolean AdCheck = false; 

    ////Instance of interface 
    Update myActivity; 


    public MyBilling(Activity launcher,Update activity) { 
     this.activity = launcher; 
     myActivity = activity; 

    } 

    // User clicked the "Remove Ads" button. 
public void purchaseRemoveAds() { 

    activity.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      mHelper.launchPurchaseFlow(activity, SKU_REMOVE_ADS, 
        RC_REQUEST, mPurchaseFinishedListener, payload); 

     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data); 
    if (mHelper == null) return; 

    // Pass on the activity result to the helper for handling 
    if (!mHelper.handleActivityResult(requestCode, resultCode, 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(requestCode, resultCode, data); 
    } 
    else { 
     Log.d(TAG, "onActivityResult handled by IABUtil."); 
    } 
} 

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_REMOVE_ADS)) { 
       // bought the premium upgrade! 
       myActivity.NewPurchaseUpdate(); 
       Log.d(TAG, "New Purchase Update Method was called"); 


      } 
     } 
    }; 






    } 

googling a montré qu'il pouvait être un problème avec onActivityResult ne pas être dans la classe d'aide. Je fait la classe de facturation étendre l'activité puis ajouté onActivityResult et @Override mais aussi n'est pas appelé avec les points d'arrêt.

Comme mentionné ci-dessus, OnIabPurchaseFinishedListener est appelé pour un achat échoué (déjà propre article), mais pas pour un succès.

Tous aider ici serait super, j'ai essayé de garder le code aussi léger que possible t o aider à la lecture. Si quelque chose me manque, veuillez me le faire savoir.

Répondre

0

J'ai résolu ce problème en abandonnant ma classe d'aide pour l'instant et en déplaçant les tâches de facturation dans l'activité principale.