Bagikan melalui


Mengelola katalog besar produk dalam aplikasi

Jika aplikasi Anda menawarkan katalog produk dalam aplikasi yang besar, Anda dapat secara opsional mengikuti proses yang dijelaskan dalam topik ini untuk membantu mengelola katalog Anda. Dalam rilis sebelum Windows 10, Store memiliki batas 200 daftar produk per akun pengembang, dan proses yang dijelaskan dalam topik ini dapat digunakan untuk mengatasi batasan tersebut. Dimulai dengan Windows 10, Store tidak memiliki batasan jumlah daftar produk per akun pengembang, dan proses yang dijelaskan dalam artikel ini tidak lagi diperlukan.

Penting

Artikel ini menunjukkan cara menggunakan anggota namespace Windows.ApplicationModel.Store . Namespace layanan ini tidak lagi diperbarui dengan fitur baru, dan kami sarankan Anda menggunakan namespace Windows.Services.Store sebagai gantinya. Namespace Windows.Services.Store mendukung jenis add-on terbaru, seperti add-on dan langganan yang dapat dikonsumsi yang dikelola Store, dan dirancang agar kompatibel dengan jenis produk dan fitur mendatang yang didukung oleh Pusat Mitra dan Toko. Namespace Windows.Services.Store diperkenalkan di Windows 10, versi 1607, dan hanya dapat digunakan dalam proyek yang menargetkan Windows 10 Anniversary Edition (10.0; Build 14393) atau rilis yang lebih baru di Visual Studio. Untuk informasi selengkapnya, lihat Pembelian dan uji coba dalam aplikasi.

Untuk mengaktifkan kemampuan ini, Anda akan membuat beberapa entri produk untuk tingkat harga tertentu, dengan masing-masing dapat mewakili ratusan produk dalam katalog. Gunakan kelebihan muatan metode RequestProductPurchaseAsync yang menentukan penawaran yang ditentukan aplikasi yang terkait dengan produk dalam aplikasi yang tercantum di Toko. Selain menentukan penawaran dan asosiasi produk selama panggilan, aplikasi Anda juga harus meneruskan objek ProductPurchaseDisplayProperties yang berisi detail penawaran katalog besar. Jika detail ini tidak disediakan, detail untuk produk yang tercantum akan digunakan sebagai gantinya.

Store hanya akan menggunakan offerId dari permintaan pembelian di PurchaseResults yang dihasilkan. Proses ini tidak secara langsung mengubah informasi yang awalnya diberikan saat mencantumkan produk dalam aplikasi di Toko.

Prasyarat

  • Topik ini mencakup dukungan Store untuk representasi beberapa penawaran dalam aplikasi menggunakan satu produk dalam aplikasi yang tercantum di Store. Jika Anda tidak terbiasa dengan pembelian dalam aplikasi, silakan tinjau Aktifkan pembelian produk dalam aplikasi untuk mempelajari informasi lisensi, dan cara mencantumkan pembelian dalam aplikasi Anda dengan benar di Toko.
  • Saat Anda membuat kode dan menguji penawaran dalam aplikasi baru untuk pertama kalinya, Anda harus menggunakan objek CurrentAppSimulator alih-alih objek CurrentApp . Dengan cara ini Anda dapat memverifikasi logika lisensi Anda menggunakan panggilan simulasi ke server lisensi alih-alih memanggil server langsung. Untuk melakukan ini, Anda perlu menyesuaikan file bernama WindowsStoreProxy.xml di %userprofile%\AppData\local\packages\<package name>\LocalState\Microsoft\Windows Store\ApiData. Simulator Microsoft Visual Studio membuat file ini saat Anda menjalankan aplikasi untuk pertama kalinya—atau Anda juga dapat memuat file kustom saat runtime. Untuk informasi selengkapnya, lihat Menggunakan file WindowsStoreProxy.xml dengan CurrentAppSimulator.
  • Topik ini juga mereferensikan contoh kode yang disediakan dalam sampel Store. Sampel ini adalah cara yang bagus untuk mendapatkan pengalaman langsung dengan berbagai opsi monetisasi yang disediakan untuk aplikasi Platform Windows Universal (UWP).

Membuat permintaan pembelian untuk produk dalam aplikasi

Permintaan pembelian untuk produk tertentu dalam katalog besar ditangani dengan cara yang sama seperti permintaan pembelian lainnya dalam aplikasi. Saat aplikasi Anda memanggil metode RequestProductPurchaseAsync baru kelebihan beban, aplikasi Anda menyediakan objek OfferId dan ProductPurchaseDisplayProperties yang diisi dengan nama produk dalam aplikasi.

string offerId = "1234";
string displayPropertiesName = "MusicOffer1";
var displayProperties = new ProductPurchaseDisplayProperties(displayPropertiesName);

try
{
    PurchaseResults purchaseResults = await CurrentAppSimulator.RequestProductPurchaseAsync(
        "product1", offerId, displayProperties);
    switch (purchaseResults.Status)
    {
        case ProductPurchaseStatus.Succeeded:
            // Grant the user their purchase here, and then pass the product ID and transaction ID
            // to currentAppSimulator.reportConsumableFulfillment to indicate local fulfillment to
            // the Windows Store.
            break;
        case ProductPurchaseStatus.NotFulfilled:
            // First check for unfulfilled purchases and grant any unfulfilled purchases from an
            // earlier transaction. Once products are fulfilled pass the product ID and transaction
            // ID to currentAppSimulator.reportConsumableFulfillment to indicate local fulfillment
            // to the Windows Store.
            break;
        case ProductPurchaseStatus.NotPurchased:
            // Notify user that the purchase was not completed due to cancellation or error.
            break;
    }
}
catch (Exception)
{
    // Notify the user of the purchase error.
}

Melaporkan pemenuhan penawaran dalam aplikasi

Aplikasi Anda harus melaporkan pemenuhan produk ke Toko segera setelah penawaran terpenuhi secara lokal. Dalam skenario katalog besar, jika aplikasi Anda tidak melaporkan pemenuhan penawaran, pengguna tidak akan dapat membeli penawaran dalam aplikasi menggunakan daftar produk Store yang sama.

Seperti disebutkan sebelumnya, Store hanya menggunakan info penawaran yang disediakan untuk mengisi PurchaseResults, dan tidak membuat asosiasi persisten antara penawaran katalog besar dan daftar produk Store. Akibatnya Anda perlu melacak pemberian izin pengguna untuk produk, dan memberikan konteks khusus produk (seperti nama item yang dibeli atau detail tentangnya) kepada pengguna di luar operasi RequestProductPurchaseAsync .

Kode berikut menunjukkan panggilan pemenuhan, dan pola olahpesan UI tempat info penawaran tertentu dimasukkan. Dengan tidak adanya info produk tertentu, contohnya menggunakan info dari listingInformation produk.

string offerId = "1234";
product1ListingName = product1.Name;
string displayPropertiesName = "MusicOffer1";

if (String.IsNullOrEmpty(displayPropertiesName))
{
    displayPropertiesName = product1ListingName;
}
var offerIdMsg = " with offer id " + offerId;
if (String.IsNullOrEmpty(offerId))
{
    offerIdMsg = " with no offer id";
}

FulfillmentResult result = await CurrentAppSimulator.ReportConsumableFulfillmentAsync(productId, transactionId);
switch (result)
{
    case FulfillmentResult.Succeeded:
        Log("You bought and fulfilled " + displayPropertiesName + offerIdMsg);
        break;
    case FulfillmentResult.NothingToFulfill:
        Log("There is no purchased product 1 to fulfill.");
        break;
    case FulfillmentResult.PurchasePending:
        Log("You bought product 1. The purchase is pending so we cannot fulfill the product.");
        break;
    case FulfillmentResult.PurchaseReverted:
        Log("You bought product 1. But your purchase has been reverted.");
        // Since the user' s purchase was revoked, they got their money back.
        // You may want to revoke the user' s access to the consumable content that was granted.
        break;
    case FulfillmentResult.ServerError:
        Log("You bought product 1. There was an error when fulfilling.");
        break;
}