Okay, dies ist eines der Dinge, für die online nicht viel Dokumentation verfügbar ist. Deshalb werde ich mein Bestes geben, um alles Schritt für Schritt zu erklären. Entnommen aus meinem Blog-Beitrag, der eine detailliertere Version davon (mit Screenshots) ist, hier auf The Millibit . Ohne weiteres,
Erster Schritt: Berechtigungen Dies ist der einfachste Schritt. Navigieren Sie zu Ihrer Datei manifest.xml und fügen Sie die folgende Zeile unter Ihrem Tag hinzu:
<uses-permission android:name="com.android.vending.BILLING" />
Dadurch erhält Ihre App die Berechtigung, auf die In-App-Abrechnung zuzugreifen. Wenn Sie auf Versionen über API 22 abzielen, müssen Sie sicherstellen, dass diese Berechtigung zur Laufzeit erteilt wird.
Schritt 2: Play Console Jetzt müssen Sie Ihre App auf die Google Play Console hochladen. Wir veröffentlichen unsere App noch nicht für die Öffentlichkeit (keine Sorge). Wir laden sie lediglich in den Bereich BETA RELEASE hoch, in dem wir In-App-Käufe testen können. Der Grund dafür ist, dass Google eine Version Ihrer APK hochladen muss, damit die Abrechnungsprozesse tatsächlich funktionieren.
Gehen Sie zu https://play.google.com/apps/publish/
Erstellen Sie die Anwendung
Befolgen Sie die Schritte, um Ihre App einzurichten
Gehen Sie zu App-Versionen
Navigieren Sie zu Beta
Erstellen Sie eine APK Ihrer App in Android Studio und laden Sie sie in die Beta-Produktion in der Play Console hoch
(Stellen Sie vor der Veröffentlichung sicher, dass Sie die Store-Liste, die Inhaltsbewertung sowie die Preisgestaltung und Verteilung bereits ausgefüllt haben.)
- Drücke den magischen Knopf (veröffentlichen!)
Schritt 3: Projekt einrichten Okay, dies ist der Teil, in dem Sie eine Reihe von Dateien kopieren und einfügen müssen.
Nehmen Sie zuerst diese Datei, laden Sie sie herunter und platzieren Sie sie unter. src/main
Sie sollte sich in einen Ordner einfügen. Nehmen Sie als Nächstes den gesamten util-Ordner und fügen Sie ihn ein. Erstellen Sie src/java folder.
dann Ihr Projekt neu, um Fehler zu beheben. Der Util-Ordner enthält die folgenden Klassen:
- IabBroadcastReceiver
- IabException
- IabHelper
- IabResult
- Inventar
- Kauf
- Sicherheit
- SkuDetails
Schritt vier: Produkte erstellen
Verwaltetes Produkt erstellen
Klicken Sie auf Speichern und erstellen Sie eine "Preisvorlage".
Hier wählen Sie den Preis für dieses Produkt aus. Sie können den Preis für verschiedene Länder auswählen oder ihn automatisch anpassen lassen, wenn Sie nur alle Länder unter Ihrem Preis auswählen:
- Stellen Sie sicher, dass das In-App-Produkt ein letztes Mal aktiviert und mit der richtigen Anwendung in der Konsole verknüpft ist.
Notieren Sie abschließend die ID Ihres Produkts. Wir werden diese ID in den nächsten Schritten verwenden.
- Holen Sie sich Ihren Base64EncodedString
Gehen Sie zu "Services & APIs" und holen Sie sich Ihren Base64EncodedString. Kopieren Sie diese und fügen Sie sie irgendwo in einen Notizblock ein, damit Sie darauf zugreifen können. Teilen Sie dies nicht mit anderen, sie werden in der Lage sein, böswillige Dinge damit zu tun.
Fünfter Schritt: Endlich! Wir können mit dem Codieren beginnen: Wir binden zuerst an die In-App-Abrechnungsbibliothek und fragen ab, was der Benutzer gekauft hat / nicht gekauft hat. Dann kaufen wir das Produkt, das wir zuvor eingerichtet haben.
Importieren Sie zunächst alles, was wir zuvor eingerichtet haben:
import util.*;
Jetzt werden wir ein IabHelper-Objekt namens mHelper verwenden und alles damit machen.
base64EncodedPublicKey = "";
mHelper = new IabHelper(this, base64EncodedPublicKey);
mHelper.enableDebugLogging(false);
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {
public void onIabSetupFinished(IabResult result) {
if (!result.isSuccess()) {
if (result.getResponse() == 3) {
new AlertDialog.Builder(MainActivity.this)
.setTitle("In app billing")
.setMessage("This device is not compatible with In App Billing, so" +
" you may not be able to buy the premium version on your phone. ")
.setPositiveButton("Okay", null)
.show();
}
Log.v(TAG, "Problem setting up In-app Billing: " + result);
} else {
Log.v(TAG, "YAY, in app billing set up! " + result);
try {
mHelper.queryInventoryAsync(mGotInventoryListener);
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
}
}
});
Okay, lassen Sie mich zusammenfassen, was hier los ist. Grundsätzlich rufen wir "startSetup" auf, um unseren "IabHelper" zu initialisieren. Wenn das Setup erfolgreich ist, fragen wir ab, welche Käufe der Benutzer bereits hat, und speichern die Antworten in mGotInventoryListener
, die wir als Nächstes codieren:
IabHelper.QueryInventoryFinishedListener mGotInventoryListener
= new IabHelper.QueryInventoryFinishedListener() {
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
i = inventory;
if (result.isFailure()) {
Log.v(TAG, "failure in checking if user has purchases");
} else {
if (inventory.hasPurchase("premium_version")) {
premiumEditor.putBoolean("hasPremium", true);
premiumEditor.commit();
Log.v(TAG, "Has purchase, saving in storage");
} else {
premiumEditor.putBoolean("hasPremium", false);
premiumEditor.commit();
Log.v(TAG, "Doesn't have purchase, saving in storage");
}
}
}
};
Der obige Code ist ziemlich selbsterklärend. Grundsätzlich wird nur geprüft, welche Einkäufe der Benutzer bereits hat. Jetzt, da wir wissen, ob der Benutzer unser Produkt bereits gekauft hat oder nicht, wissen wir, ob wir ihn bitten sollen, unseren Artikel zu kaufen! Wenn sie unser Produkt noch nie gekauft haben, starten wir eine Kaufanfrage:
public void buyPremium() {
try {
mHelper.flagEndAsync();
mHelper.launchPurchaseFlow(this, "premium_version", 9, mPurchaseFinishedListener, "SECURITYSTRING");
} catch (Exception e) {
e.printStackTrace();
mHelper.flagEndAsync();
new AlertDialog.Builder(MainActivity.this)
.setTitle("Error")
.setMessage("An error occurred in buying the premium version. Please try again.")
.setPositiveButton("Okay", null)
.show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivityResult(" + requestCode + "," + resultCode + "," + data);
if (!mHelper.handleActivityResult(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.v(TAG, "purchase finished");
if (purchase != null) {
if (purchase.getSku().equals("premium_version")) {
Toast.makeText(MainActivity.this, "Purchase successful!", Toast.LENGTH_SHORT).show();
premiumEditor.putBoolean("hasPremium", true);
premiumEditor.commit();
}
} else {
return;
}
if (result.isFailure()) {
return;
}
}
};
Hier kaufen wir den Artikel (mit der ID, die wir zuvor in der Spielkonsole generiert haben) wie folgt:
mHelper.launchPurchaseFlow(this, "premium_version", 9, mPurchaseFinishedListener, "SECURITYSTRING");
Beachten Sie, dass wir mPurchaseFinishedListener
die Parameter übergeben haben. Dies bedeutet, dass das Ergebnis des Kaufs an diesen Hörer zurückgegeben wird. Dann prüfen wir einfach, ob der Kauf null ist, und geben dem Benutzer, falls nicht, die von ihm gekaufte Funktion.
Lass die Zuhörer nicht lecken! Wir müssen sie zerstören, wenn die App zerstört.
@Override
public void onDestroy() {
super.onDestroy();
if (mHelper != null)
try {
mHelper.dispose();
mHelper = null;
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
}
Wenn Sie Ihren Einkauf konsumieren und ihn wieder zum Kauf anbieten möchten, können Sie dies ganz einfach tun. Ein Beispiel hierfür ist, wenn ein Benutzer Benzin für ein virtuelles Auto gekauft hat und es ausgegangen ist. Sie müssen dasselbe Produkt erneut kaufen, und Sie können es für einen zweiten Kauf verfügbar machen, indem Sie es konsumieren:
public void consume(){
try {
mHelper.flagEndAsync();
mHelper.queryInventoryAsync(mGotInventoryListener);
if(i.getPurchase("gas")==null){
Toast.makeText(this, "Already consumed!", Toast.LENGTH_SHORT).show();
}
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
Toast.makeText(this, "Error, try again", Toast.LENGTH_SHORT).show();
mHelper.flagEndAsync();
}
try {
mHelper.flagEndAsync();
this.mHelper.consumeAsync(this.i.getPurchase("gas"), new IabHelper.OnConsumeFinishedListener() {
public void onConsumeFinished(Purchase paramAnonymousPurchase, IabResult paramAnonymousIabResult) {
}
});
return;
} catch (IabHelper.IabAsyncInProgressException localIabAsyncInProgressException) {
localIabAsyncInProgressException.printStackTrace();
Toast.makeText(this, "ASYNC IN PROGRESS ALREADY!!!!" +localIabAsyncInProgressException, Toast.LENGTH_LONG).show();
Log.v("myTag", "ASYNC IN PROGRESS ALREADY!!!");
mHelper.flagEndAsync();
}
}
Das ist es! Sie können jetzt anfangen, Geld zu verdienen. So einfach ist das wirklich!
Wenn Sie eine detailliertere Version dieses Tutorials mit Screenshots und Bildern wünschen, besuchen Sie den Originalbeitrag hier . Lassen Sie mich in den Kommentaren wissen, wenn Sie weitere Fragen haben.