2014-06-11 3 views
0

J'ai suivi ce document http://developer.android.com/google/play/billing/billing_integrate.html pour créer une application de test, qui démarre une procédure d'achat dans l'application, après avoir cliqué sur un bouton.
J'ai publié l'application en tant que version alpha et testé l'achat in-app et cela fonctionne.Quand ai-je besoin de la classe IabHelper pour effectuer un achat InApp?

Mon problème est, que je suis confus par d'autres exemples dans-app-achat. Ils utilisent tous une classe appelée "IabHelper" pour faire l'achat in-app. Mais il semble que l'on n'a pas besoin de cette classe pour faire un achat in-app. La classe est même utilisée dans l'exemple officiel "TrivalDrive" de V3 In-App-Billing, mais elle n'est jamais mentionnée dans le guide de facturation intégrée à l'application que j'ai posté ci-dessus.

Donc, quelqu'un pourrait m'expliquer s'il vous plaît, pourquoi et quand je devrais utiliser la classe IabHelper?

Merci d'avance.

Voici une version simplifiée du code i utiliser pour faire une in-app-achat:

private void doPurchase() { 
    try { 
     Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), "premium.upgrade", 
      "inapp", ""); 

     if (buyIntentBundle != null && buyIntentBundle.getInt("RESPONSE_CODE") == 0) { 
      PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); 

      startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), 
       Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); 
     } 
    } catch (SendIntentException e) { 
     e.printStackTrace(); 
    } catch (RemoteException e) { 
     e.printStackTrace(); 
    } 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == 1001) { 
     String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); 

     if (resultCode == RESULT_OK) { 
      try { 
       JSONObject jo = new JSONObject(purchaseData); 
       String sku = jo.getString("productId"); 
       Log.i(">>>", "You have bought the " 
        + sku 
        + ". Excellent choice, " 
        + "adventurer!"); 
      } catch (JSONException e) { 
       Log.e(">>>", "Failed to parse purchase data."); 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Répondre

1

Vous avez raison le Guide est un peu déroutant compte tenu de la IABHelper. Fondamentalement, l'IAB-Helper est une classe d'aide écrite par un employé de Google qui fait le gros du travail. Donc, si vous utilisez l'IAB-Helper, vous n'avez pas besoin d'écrire autant de code que dans votre méthode doPurchase(). Vous écrivez simplement la ligne suivante:

mHelper.launchPurchaseFlow(activity, sku, RC_REQUEST, mPurchaseFinishedListener); 

va de même pour les choses après l'achat, pas bidouiller avec des objets JSON

if (info.getSku().equals(sku)) 
    doSomething(); 

Remarque: Vous devez configurer le mHelper avant et mettre en œuvre les différents auditeurs . Et bien sûr, IABHelper fait exactement la même chose en arrière-plan comme vous l'avez fait dans vos méthodes. C'est juste une autre couche d'abstraction.

Voilà les bonnes nouvelles concernant IABHelper. La mauvaise nouvelle: IABHelper a quelques bugs assez sérieux qui conduisent à des plantages occasionnels. Bien que je recommanderais encore l'employer puisqu'il attrape un bazillion plus d'erreurs que vous ne pouvez même pas penser. Sur le site Android Developer Training suivant, vous trouverez un guide qui montre comment utiliser le IABHelper plutôt bien. https://developer.android.com/training/in-app-billing/preparing-iab-app.html#GetSample

+1

Dang. Il est assez pathétique que Google ne puisse même pas écrire une implémentation sans bug de l'achat in-app. – trans

+0

@trans Oui, c'est un peu étrange car c'est une partie si fondamentale de la plate-forme. Néanmoins, j'ai utilisé une bibliothèque appelée [Checkout] (https://github.com/serso/android-checkout) pendant un certain temps sans rencontrer de problèmes visibles. Je le recommande fortement pour tout ce qui concerne IAB. – reVerse

Questions connexes