Mengaktifkan pembelian aplikasi dan add-on dalam aplikasi
Artikel ini menunjukkan cara menggunakan anggota di namespace Windows.Services.Store untuk meminta pembelian aplikasi saat ini atau salah satu add-on-nya untuk pengguna. Misalnya, jika pengguna saat ini memiliki versi uji coba aplikasi, Anda dapat menggunakan proses ini untuk membeli lisensi penuh untuk pengguna. Atau, Anda dapat menggunakan proses ini untuk membeli add-on, seperti tingkat permainan baru untuk pengguna.
Untuk meminta pembelian aplikasi atau add-on, namespace Windows.Services.Store menyediakan beberapa metode berbeda:
- Jika Anda mengetahui ID Toko aplikasi atau add-on, Anda dapat menggunakan metode RequestPurchaseAsync dari kelas StoreContext .
- Jika Anda sudah memiliki objek StoreProduct, StoreSku, atau StoreAvailability yang mewakili aplikasi atau add-on, Anda dapat menggunakan metode RequestPurchaseAsync dari objek ini. Untuk contoh berbagai cara untuk mengambil StoreProduct dalam kode Anda, lihat Mendapatkan info produk untuk aplikasi dan add-on.
Setiap metode menyajikan UI pembelian standar kepada pengguna dan kemudian selesai secara asinkron setelah transaksi selesai. Metode mengembalikan objek yang menunjukkan apakah transaksi berhasil.
Catatan
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. Jika aplikasi Anda menargetkan versi Windows 10 yang lebih lama, Anda harus menggunakan namespace Windows.ApplicationModel.Store alih-alih namespace Windows.Services.Store . Untuk informasi selengkapnya, lihat artikel ini.
Prasyarat
Contoh ini memiliki prasyarat berikut:
- Proyek Visual Studio untuk aplikasi Platform Windows Universal (UWP) yang menargetkan Windows 10 Anniversary Edition (10.0; Build 14393) atau rilis yang lebih baru.
- Anda telah membuat pengiriman aplikasi di Pusat Mitra dan aplikasi ini diterbitkan di Toko. Anda dapat secara opsional mengonfigurasi aplikasi sehingga tidak dapat ditemukan di Store saat Anda mengujinya. Untuk informasi selengkapnya, lihat panduan pengujian kami.
- Jika Anda ingin mengaktifkan pembelian dalam aplikasi untuk add-on untuk aplikasi, Anda juga harus membuat add-on di Pusat Mitra.
Kode dalam contoh ini mengasumsikan:
- Kode berjalan dalam konteks Halaman yang berisi ProgressRing bernama
workingProgressRing
dan TextBlock bernamatextBlock
. Objek ini digunakan untuk menunjukkan bahwa operasi asinkron terjadi dan untuk menampilkan pesan output, masing-masing. - File kode memiliki pernyataan penggunaan untuk namespace Windows.Services.Store .
- Aplikasi ini adalah aplikasi pengguna tunggal yang hanya berjalan dalam konteks pengguna yang meluncurkan aplikasi. Untuk informasi selengkapnya, lihat Pembelian dan uji coba dalam aplikasi.
Catatan
Jika Anda memiliki aplikasi desktop yang menggunakan Desktop Bridge, Anda mungkin perlu menambahkan kode tambahan yang tidak ditampilkan dalam contoh ini untuk mengonfigurasi objek StoreContext . Untuk informasi selengkapnya, lihat Menggunakan kelas StoreContext di aplikasi desktop yang menggunakan Desktop Bridge.
Contoh kode
Contoh ini menunjukkan cara menggunakan metode RequestPurchaseAsync dari kelas StoreContext untuk membeli aplikasi atau add-on dengan ID Store yang diketahui. Untuk aplikasi sampel lengkap, lihat sampel Store.
private StoreContext context = null;
public async void PurchaseAddOn(string storeId)
{
if (context == null)
{
context = StoreContext.GetDefault();
// If your app is a desktop app that uses the Desktop Bridge, you
// may need additional code to configure the StoreContext object.
// For more info, see https://aka.ms/storecontext-for-desktop.
}
workingProgressRing.IsActive = true;
StorePurchaseResult result = await context.RequestPurchaseAsync(storeId);
workingProgressRing.IsActive = false;
// Capture the error message for the operation, if any.
string extendedError = string.Empty;
if (result.ExtendedError != null)
{
extendedError = result.ExtendedError.Message;
}
switch (result.Status)
{
case StorePurchaseStatus.AlreadyPurchased:
textBlock.Text = "The user has already purchased the product.";
break;
case StorePurchaseStatus.Succeeded:
textBlock.Text = "The purchase was successful.";
break;
case StorePurchaseStatus.NotPurchased:
textBlock.Text = "The purchase did not complete. " +
"The user may have cancelled the purchase. ExtendedError: " + extendedError;
break;
case StorePurchaseStatus.NetworkError:
textBlock.Text = "The purchase was unsuccessful due to a network error. " +
"ExtendedError: " + extendedError;
break;
case StorePurchaseStatus.ServerError:
textBlock.Text = "The purchase was unsuccessful due to a server error. " +
"ExtendedError: " + extendedError;
break;
default:
textBlock.Text = "The purchase was unsuccessful due to an unknown error. " +
"ExtendedError: " + extendedError;
break;
}
}