Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Economy v1-APIs befinden sich im Wartungsmodus und erhalten keine neuen Features, nur Fehlerbehebungen. Die v1-APIs werden auf absehbare Zeit beibehalten. Weitere Informationen zur nächsten Version von PlayFab Economy finden Sie in der Übersicht über Die Wirtschaft v2 !
In diesem Tutorial erfahren Sie, wie Sie In-App Purchase (IAP) mithilfe von PlayFab, dem Unity + IAP-Dienst und der Android-Abrechnungs-API einrichten.
Bevor wir beginnen
Die Einrichtung von IAP kann mühsam sein, insbesondere wenn Sie nicht sicher sind, wie verschiedene Dienste integriert und zusammenarbeiten sollen.
Die folgende Abbildung veranschaulicht, wie die Android-Abrechnungs-API und PlayFab zusammenarbeiten, um Ihrem Client eine solide IAP-Erfahrung zu bieten.
Beginnen Sie, indem Sie Ihre Produkt-IDs und Preise über PlayMarket einrichten. Anfangs sind alle Produkte gesichtslos - es sind digitale Entitäten, die Ihr Spieler kaufen kann - aber sie haben keine Bedeutung für PlayFab-Spieler.
Damit diese Entitäten nützlich sind, müssen wir sie in den PlayFab-Elementkatalogen Spiegel. Dadurch werden gesichtslose Entitäten in Bündel, Container und einzelne Elemente umgewandelt.
Jede hat ihr eigenes, einzigartiges Gesicht, mit:
- Titel
- Beschreibungen
- Schilder
- Arten
- Bilder
- Verhaltensweisen
All dies ist mit Marktprodukten verknüpft, indem IDs geteilt werden.
Die beste Möglichkeit für den Zugriff auf Echtgeldartikel, die zum Kauf verfügbar sind, ist die Verwendung von GetCatalogItems und GetStoreItems. Dies sind die gleichen API-Methoden, die von Free-Currency-Stores verwendet werden, daher sollte der Prozess vertraut sein.
Die ID des Elements ist die Verknüpfung zwischen PlayFab und einem beliebigen externen IAP-System. Daher übergeben wir die Element-ID an den IAP-Dienst.
An diesem Punkt beginnt der Kaufprozess. Der Spieler interagiert mit der IAP-Schnittstelle und - wenn der Kauf erfolgreich ist - erhalten Sie eine Quittung.
PlayFab ist dann in der Lage, den Beleg zu überprüfen und den Kauf zu registrieren, sodass der PlayFab-Spieler die soeben gekauften Elemente erhält.
Dies ist eine grobe Vorstellung davon, wie die IAP-Integration funktioniert, und das folgende Beispiel zeigt den größten Teil davon in Aktion.
Einrichten einer Clientanwendung
In diesem Abschnitt erfahren Sie, wie Sie eine sehr primitive Anwendung konfigurieren, um IAP mit PlayFab, UnityIAP und der Android-Abrechnungs-API zu testen.
Voraussetzungen:
- Ein Unity-Projekt.
- Das PlayFab SDK wurde importiert und konfiguriert, um mit Ihrem Titel zu arbeiten.
Unser erster Schritt ist das Einrichten von UnityIAP:
- Navigieren Sie zu Dienste.
- Stellen Sie sicher, dass die Registerkarte Dienste ausgewählt ist.
- Wählen Sie Ihr Unity Services-Profil oder organization aus.
- Wählen Sie die Schaltfläche Erstellen aus.
- Navigieren Sie als Nächstes zum Dienst In-App Purchase (IAP).
Stellen Sie sicher, dass Sie den Dienst aktivieren, indem Sie die Umschaltfläche Plattformübergreifende IAP vereinfachen festlegen.
Wählen Sie dann die Schaltfläche Weiter aus.
Eine Seite mit einer Liste von Plug-Ins wird angezeigt.
- Wählen Sie die Schaltfläche Importieren aus.
Setzen Sie die Unity-Installation und den Importvorgang bis zu dem Punkt fort, an dem alle Plug-Ins importiert wurden.
- Vergewissern Sie sich, dass die Plug-Ins vorhanden sind.
- Erstellen Sie dann ein neues Skript namens AndroidIAPExample.cs.
AndroidIAPExample.cs
enthält den unten gezeigten Code (weitere Erläuterungen finden Sie in den Codekommentaren).
using PlayFab;
using PlayFab.ClientModels;
using PlayFab.Json;
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Purchasing;
public class AndroidIAPExample : MonoBehaviour, IStoreListener {
// Items list, configurable via inspector
private List<CatalogItem> Catalog;
// The Unity Purchasing system
private static IStoreController m_StoreController;
// Bootstrap the whole thing
public void Start() {
// Make PlayFab log in
Login();
}
public void OnGUI() {
// This line just scales the UI up for high-res devices
// Comment it out if you find the UI too large.
GUI.matrix = Matrix4x4.TRS(new Vector3(0, 0, 0), Quaternion.identity, new Vector3(3, 3, 3));
// if we are not initialized, only draw a message
if (!IsInitialized) {
GUILayout.Label("Initializing IAP and logging in...");
return;
}
// Draw menu to purchase items
foreach (var item in Catalog) {
if (GUILayout.Button("Buy " + item.DisplayName)) {
// On button click buy a product
BuyProductID(item.ItemId);
}
}
}
// This is invoked manually on Start to initiate login ops
private void Login() {
// Login with Android ID
PlayFabClientAPI.LoginWithAndroidDeviceID(new LoginWithAndroidDeviceIDRequest() {
CreateAccount = true,
AndroidDeviceId = SystemInfo.deviceUniqueIdentifier
}, result => {
Debug.Log("Logged in");
// Refresh available items
RefreshIAPItems();
}, error => Debug.LogError(error.GenerateErrorReport()));
}
private void RefreshIAPItems() {
PlayFabClientAPI.GetCatalogItems(new GetCatalogItemsRequest(), result => {
Catalog = result.Catalog;
// Make UnityIAP initialize
InitializePurchasing();
}, error => Debug.LogError(error.GenerateErrorReport()));
}
// This is invoked manually on Start to initialize UnityIAP
public void InitializePurchasing() {
// If IAP is already initialized, return gently
if (IsInitialized) return;
// Create a builder for IAP service
var builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance(AppStore.GooglePlay));
// Register each item from the catalog
foreach (var item in Catalog) {
builder.AddProduct(item.ItemId, ProductType.Consumable);
}
// Trigger IAP service initialization
UnityPurchasing.Initialize(this, builder);
}
// We are initialized when StoreController and Extensions are set and we are logged in
public bool IsInitialized {
get {
return m_StoreController != null && Catalog != null;
}
}
// This is automatically invoked automatically when IAP service is initialized
public void OnInitialized(IStoreController controller, IExtensionProvider extensions) {
m_StoreController = controller;
}
// This is automatically invoked automatically when IAP service failed to initialized
public void OnInitializeFailed(InitializationFailureReason error) {
Debug.Log("OnInitializeFailed InitializationFailureReason:" + error);
}
// This is automatically invoked automatically when purchase failed
public void OnPurchaseFailed(Product product, PurchaseFailureReason failureReason) {
Debug.Log(string.Format("OnPurchaseFailed: FAIL. Product: '{0}', PurchaseFailureReason: {1}", product.definition.storeSpecificId, failureReason));
}
// This is invoked automatically when successful purchase is ready to be processed
public PurchaseProcessingResult ProcessPurchase(PurchaseEventArgs e) {
// NOTE: this code does not account for purchases that were pending and are
// delivered on application start.
// Production code should account for such case:
// More: https://docs.unity3d.com/ScriptReference/Purchasing.PurchaseProcessingResult.Pending.html
if (!IsInitialized) {
return PurchaseProcessingResult.Complete;
}
// Test edge case where product is unknown
if (e.purchasedProduct == null) {
Debug.LogWarning("Attempted to process purchase with unknown product. Ignoring");
return PurchaseProcessingResult.Complete;
}
// Test edge case where purchase has no receipt
if (string.IsNullOrEmpty(e.purchasedProduct.receipt)) {
Debug.LogWarning("Attempted to process purchase with no receipt: ignoring");
return PurchaseProcessingResult.Complete;
}
Debug.Log("Processing transaction: " + e.purchasedProduct.transactionID);
// Deserialize receipt
var googleReceipt = GooglePurchase.FromJson(e.purchasedProduct.receipt);
// Invoke receipt validation
// This will not only validate a receipt, but will also grant player corresponding items
// only if receipt is valid.
PlayFabClientAPI.ValidateGooglePlayPurchase(new ValidateGooglePlayPurchaseRequest() {
// Pass in currency code in ISO format
CurrencyCode = e.purchasedProduct.metadata.isoCurrencyCode,
// Convert and set Purchase price
PurchasePrice = (uint)(e.purchasedProduct.metadata.localizedPrice * 100),
// Pass in the receipt
ReceiptJson = googleReceipt.PayloadData.json,
// Pass in the signature
Signature = googleReceipt.PayloadData.signature
}, result => Debug.Log("Validation successful!"),
error => Debug.Log("Validation failed: " + error.GenerateErrorReport())
);
return PurchaseProcessingResult.Complete;
}
// This is invoked manually to initiate purchase
void BuyProductID(string productId) {
// If IAP service has not been initialized, fail hard
if (!IsInitialized) throw new Exception("IAP Service is not initialized!");
// Pass in the product id to initiate purchase
m_StoreController.InitiatePurchase(productId);
}
}
// The following classes are used to deserialize JSON results provided by IAP Service
// Please, note that JSON fields are case-sensitive and should remain fields to support Unity Deserialization via JsonUtilities
public class JsonData {
// JSON Fields, ! Case-sensitive
public string orderId;
public string packageName;
public string productId;
public long purchaseTime;
public int purchaseState;
public string purchaseToken;
}
public class PayloadData {
public JsonData JsonData;
// JSON Fields, ! Case-sensitive
public string signature;
public string json;
public static PayloadData FromJson(string json) {
var payload = JsonUtility.FromJson<PayloadData>(json);
payload.JsonData = JsonUtility.FromJson<JsonData>(payload.json);
return payload;
}
}
public class GooglePurchase {
public PayloadData PayloadData;
// JSON Fields, ! Case-sensitive
public string Store;
public string TransactionID;
public string Payload;
public static GooglePurchase FromJson(string json) {
var purchase = JsonUtility.FromJson<GooglePurchase>(json);
purchase.PayloadData = PayloadData.FromJson(purchase.Payload);
return purchase;
}
}
- Erstellen Sie ein neues Game-Objekt namens Code.
- Fügen Sie ihr die
AndroidIAPExample
Komponente hinzu (2-Schritt-Prozess). - Fügen Sie ihr die
AndroidIAPExample
Komponente hinzu. - Stellen Sie sicher, dass Sie die Szene speichern .
Navigieren Sie abschließend zu Buildeinstellungen.
- Vergewissern Sie sich, dass Ihre Szene dem Bereich Szenen im Build hinzugefügt wurde.
- Stellen Sie sicher, dass die Android-Plattform ausgewählt wurde.
- Wechseln Sie zum Bereich Spielereinstellungen .
- Weisen Sie Ihren Paketnamen zu.
Notiz
Stellen Sie sicher, dass Sie Ihren eigenen Paketnamen verwenden, um PlayMarket-Konflikte zu vermeiden.
Erstellen Sie schließlich die Anwendung wie gewohnt, und stellen Sie sicher, dass Sie über einen APK-Sicheren und Sound verfügen.
Wir haben noch keine Möglichkeit, es zu testen. Wir müssen zuerst PlayMarket und PlayFab konfigurieren, was in den folgenden Abschnitten beschrieben wird.
Einrichten einer PlayMarket-Anwendung für IAP
In diesem Abschnitt werden die Besonderheiten der Aktivierung von IAP für Ihre PlayMarket-Anwendung beschrieben.
Notiz
Das Einrichten der Anwendung selbst geht über den Rahmen dieses Tutorials hinaus. Wir gehen davon aus, dass Sie bereits über eine Anwendung verfügen, die so konfiguriert ist, dass mindestens Alphaversionen veröffentlicht werden.
Nützliche Hinweise:
- Bis zu diesem Punkt müssen Sie ein APK hochladen. Bitte verwenden Sie das APK, das wir im vorherigen Abschnitt erstellt haben.
- Wenn Sie aufgefordert werden, das APK hochzuladen, können Sie es als Alpha- oder Betaanwendung hochladen, um die IAP-Sandbox zu aktivieren.
- Das Konfigurieren der Inhaltsbewertung enthält Fragen zur Aktivierung von IAP in der Anwendung.
- PlayMarket erlaubt Herausgebern nicht , IAP zu verwenden oder zu testen. Wählen Sie daher ein anderes Google-Konto zu Testzwecken aus, und fügen Sie es als Tester für Ihren Alpha/Beta-Build hinzu.
Nachdem Sie den Anwendungsbuild veröffentlicht haben:
- Wählen Sie im Menü In-App-Produkte aus.
- Wenn Sie nach einem Händlerkonto gefragt werden, verknüpfen oder erstellen Sie eins.
- Wählen Sie die Schaltfläche Neues Produkt hinzufügen aus.
- Wählen Sie auf diesem unten gezeigten Bildschirm Verwaltetes Produkt aus.
- Geben Sie ihm eine beschreibende Produkt-ID.
- Wählen Sie Weiter aus.
PlayMarket erfordert, dass Sie einen Titel (1) und eine Beschreibung (2) eingeben. In unserem Fall sind dies jedoch nicht sehr nützt.
Wir greifen Datenelementdaten ausschließlich aus dem PlayFab-Dienst ab und erfordern nur IDs, die übereinstimmen.
- Scrollen Sie weiter, und wählen Sie die Schaltfläche Add a price (Preis hinzufügen) aus .
- Geben Sie einen gültigen Preis ein (beachten Sie, wie der Preis für jedes Land/jede Region unabhängig konvertiert wird).
- Wählen Sie die Schaltfläche Übernehmen aus.
- Scrollen Sie schließlich zurück zum oberen Bildschirmrand, und ändern Sie den status des Elements in Aktiv.
Dies schließt zwar die Konfiguration der App ab, aber wir benötigen noch ein paar weitere Optimierungen. Zunächst speichern wir den Lizenzierungsschlüssel (dies wird für die Verknüpfung von PlayFab mit PlayMarket nützlich sein.
- Navigieren Sie im Menü zu Dienste &-APIs .
- Suchen Und speichern Sie dann die Base64-Version des Schlüssels.
Der nächste Schritt besteht darin, IAP-Tests zu aktivieren. Die Sandbox ist zwar automatisch für Alpha- und Betabuilds aktiviert, aber wir müssen Konten einrichten, die zum Testen der App autorisiert sind:
- Navigieren Sie zu Start.
- Suchen Sie im Menü auf der linken Seite die Kontodetails , und wählen Sie sie aus.
- Suchen Sie den Bereich Lizenztests .
- Vergewissern Sie sich, dass Ihre Testkonten in der Liste enthalten sind.
- Stellen Sie sicher, dass die Lizenztestantwort auf RESPOND_NORMALLY festgelegt ist.
Vergessen Sie nicht, die Einstellungen anzuwenden!
Die Play Market-Seite der Integration sollte an diesem Punkt eingerichtet werden.
Einrichten eines PlayFab-Titels
Unser letzter Schritt besteht darin, einen PlayFab-Titel so zu konfigurieren, dass er unsere Produkte widerspiegelt, und die Integration in die Google-Abrechnungs-API.
- Wählen Sie Add-Ons aus.
- Wählen Sie dann das Google-Add-On aus.
- Geben Sie Ihre Paket-ID ein.
- Geben Sie den Google App-Lizenzschlüssel ein, den Sie im vorherigen Abschnitt erworben haben.
- Committen Sie Ihre Änderungen, indem Sie die Schaltfläche Google installieren auswählen.
Unser nächster Schritt spiegelt unser Golden Sword-Element in PlayFab wider:
- Wählen Sie Wirtschaft aus.
- Vergewissern Sie sich, dass die Unterregisterkarte Kataloge ausgewählt ist.
- Wählen Sie Neuer Katalog aus.
- Geben Sie einen Katalogversionsnamen an.
- Wählen Sie Katalog speichern aus.
Wenn der Katalog keine Elemente enthält, wird er automatisch entfernt. Aus diesem Grund enthält jeder neue Katalog ein vorab hinzugefügtes Element namens One.
Wir können immer ein neues Element erstellen, aber um dinge sauber zu halten, ändern wir das vorhandene One-Element.
- Wählen Sie das Element aus, um die Element-ID so zu bearbeiten, dass sie mit der ID in PlayMarket übereinstimmt.
- Bearbeiten Sie nun den Anzeigenamen , und fügen Sie eine Beschreibung hinzu.
Notiz
Beachten Sie, dass diese Daten nichts mit dem Titel und der Beschreibung des Play Market-Elementszu tun haben - sie sind völlig unabhängig.
- Weisen Sie Ihrem Artikel einen Preis zu.
- Wählen Sie Element speichern aus, um Ihre Änderungen zu committen.
Notiz
In diesem Tutorial bezieht sich IAP hauptsächlich auf Käufe für echtes Geld. Deshalb verwenden wir RM - spezielle Real Money-Währung. Der PlayFab-Betrag ist in US-Cent definiert.
- Beobachten Sie Ihr Element in der Liste Element-ID .
Dies schließt das Setup für Ihren PlayFab-Titel ab.
Testen
Laden Sie die App zu Testzwecken mithilfe der Alpha/Beta-Version herunter.
- Stellen Sie sicher, dass Sie ein Testkonto und ein echtes Android-Gerät verwenden.
- Nachdem Sie die App gestartet haben, sollte IAP initialisiert und eine Schaltfläche angezeigt werden, die Ihr Element darstellt.
- Wählen Sie diese Schaltfläche aus.
Der IAP-Kauf wird initiiert. Befolgen Sie die Anweisungen von Google Play bis zu dem Punkt, an dem der Kauf erfolgreich ist.
Navigieren Sie schließlich im PlayFab Game Manager-Dashboard zu Ihrem Titel, und suchen Sie nach Neue Ereignisse.
Dies bedeutet, dass der Kauf erfolgreich bereitgestellt, überprüft und an das PlayFab-Ökosystem weitergeleitet wurde.
An diesem Punkt haben Sie UnityIAP und die Android-Abrechnungs-API erfolgreich in Ihre PlayFab-Anwendung integriert.