Ödemeleri Digital Goods API ve Payment Request API ile Google Play Faturalandırma üzerinden alma

Uygulamanız Google Play üzerinden dağıtılıyorsa ve dijital ürünler satmak ya da teklif vermek istiyorsanız Google Play Faturalandırma hizmetini kullanmanız gerekir. Google Play Faturalandırma, abonelik veya hizmet yönetimi kataloğunuz, fiyatlarınız, abonelikleriniz, faydalı raporlarınız ve Play tarafından desteklenen ödeme akışı Kullanıcılarınıza aşina olan mağaza.

Güvenilir Web Etkinlikleri kullanılarak oluşturulan ve Google Play Store'dan sunulan uygulamalar için: entegrasyon için artık Payment Request API'yı ve Digital Goods API'yi kullanabilirsiniz. Google Play Faturalandırma Android ve ChromeOS için Chrome 101 ve sonraki sürümlerde kullanılabilir.

Bu kılavuzda, PWA'nıza Google Play Faturalandırma desteğini nasıl ekleyeceğinizi ve hem ChromeOS hem de Play Store için Google Play Store'da dağıtılmaktadır.

PWA'nıza Play Faturalandırma desteğini eklemek için iki web platformu API'si kullanacaksınız. İlgili içeriği oluşturmak için kullanılan Digital Goods API, SKU bilgilerini toplamak ve satın alma işlemleri ile yararlanma haklarını kontrol etmek için kullanılır. Google Play Store'dan. Payment Request API, Google Play Store'u ödeme yöntemini kullanabilir ve satın alma akışını tamamlayabilirsiniz.

Play Store'da uygulamalardan para kazanma

Uygulamanız, Play Store'da Google Play Faturalandırma ile iki şekilde para kazanabilir:

  • Uygulama içi satın alma işlemleri, ek mobil uygulamalar gibi hem dayanıklı hem de tüketilebilir sanal ürünlerin satışına olanak tanır. veya reklamları kaldırma.
  • Abonelikler, kullanıcılarınıza belirli aralıklarla ödeme yapmaları karşılığında içerik veya hizmetlere sürekli erişim imkanı sunar. haber abonelikleri veya üyelikler gibi avantajlar sunabilirsiniz.

Şartlar

Google Play Faturalandırma'yı ayarlamak için gerekenler:

BubbleWrap projesini güncelleme

Bubblepack'i yüklemediyseniz yüklemeniz gerekir. Bkz. Nasıl başlayacağınıza ilişkin ayrıntılar için Hızlı Başlangıç Kılavuzu'na bakın. Bubblepack'iniz varsa 1.8.2 veya sonraki bir sürüme güncellediğinizden emin olun.

Bubblepack ayrıca bir bayrağın arkasında da yer alıyor. İçinde Etkinleştirmek için twa-manifest.json içinde proje yapılandırmasını değiştirmeniz gerekiyor. yer alır ve hem alphaDependencies hem de playBilling öğesini etkinleştirir özellik:

  ...,
  "enableNotifications": true,
  "features": {
    "playBilling": {
      "enabled": true
    }
  },
  "alphaDependencies": {
    "enabled": true
  },
  ...

Yapılandırma dosyası güncellendikten sonra bubblewrap update komutunu çalıştırarak yapılandırmayı projesi ve ardından bubblewrap build adımları uygulayın ve yeni bir Android paketi oluşturun ve bunu Play Store'a geri yükleyebilirsiniz.

Dijital Ürünler API'sinin ve Google Play Faturalandırma'nın kullanılabilirliğini algılama özelliği

Digital Goods API şu anda Chrome tarafından yalnızca PWA'nın ve kullanılabilir olup olmadığını kontrol etmek için kullanılabilir. window nesnesinde getDigitalGoodsService:

if ('getDigitalGoodsService' in window) {
 // Digital Goods API is supported!
}

Digital Goods API herhangi bir tarayıcıda kullanılabilir ve farklı mağazaları destekleyebilir. Bu amaçla desteklenip desteklenmediğini kontrol etmek için getDigitalGoodsService(), mağaza kimliğini parametre olarak iletir. Google Play Store tanımlandı https://play.google.com/billing dizesine göre:

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
  try {
    const service =
        await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing is supported!

  } catch (error) {
    // Google Play Billing is not available. Use another payment flow.
    return;
  }
}

SKU ayrıntılarını alma

Digital Goods API, aşağıdaki gibi bilgilerin alınmasına olanak tanıyan getDetails() özelliğini sunar: ürün başlığını, açıklamasını ve en önemlisi de fiyatını ödeme arka ucundan takip edebilirsiniz.

Daha sonra bu bilgileri kullanım arayüzünüzde kullanabilir ve kullanıcıya daha fazla ayrıntı sağlayabilirsiniz:

const skuDetails = await service.getDetails(['shiny_sword', 'gem']);
for (item of skuDetails) {
  // Format the price according to the user locale.
  const localizedPrice = new Intl.NumberFormat(
      navigator.language,
      {style: 'currency', currency: item.price.currency}
    ).format(item.price.value);

  // Render the price to the UI.
  renderProductDetails(
        item.itemId, item.title, localizedPrice, item.description);
}

Satın alma akışını oluşturma

PaymentRequest oluşturucusu iki parametre alır: Bir ödeme yöntemi listesi ve ödeme bilgileri

Güvenilir Web Etkinliği'ne girdiğinizde, Google Play faturalandırma ödeme yöntemini kullanarak tanımlayıcı olarak https://play.google.com/billing ayarlamak ve ürün SKU'sunu veri üyesi:

async function makePurchase(service, sku) {
   // Define the preferred payment method and item ID
   const paymentMethods = [{
       supportedMethods: "https://play.google.com/billing",
       data: {
           sku: sku,
       }
   }];

   ...
}

Ödeme ayrıntıları istense de Play Faturalandırma bu değerleri göz ardı eder ve değerleri hatalı değerlerle doldurulabilmeleri için Play Console'da SKU'yu oluştururken ayarlanan değerler:

const paymentDetails = {
    total: {
        label: `Total`,
        amount: {currency: `USD`, value: `0`}
    }
};

const request = new PaymentRequest(paymentMethods, paymentDetails);

Ödeme akışını başlatmak için ödeme isteği nesnesindeki show() öğesini çağırın. Vaat başarılı olursa başarılı bir şekilde ayarlanmış olabilir. Ödeme başarılı olmadıysa, kullanıcı muhtemelen ödemeyi iptal etmiştir.

Taahhüt başarılı olursa satın alma işlemini doğrulamanız ve onaylamanız gerekir. Sahtekarlığa karşı koruma sağlamak için bu adım, arka ucunuz kullanılarak uygulanmalıdır. Şu bölüme göz atın: Doğrulamayı arka ucunuzda nasıl uygulayacağınızı öğrenmek için Play Faturalandırma belgelerini inceleyin. Satın alma işlemini onaylamazsanız kullanıcıya üç gün sonra geri ödeme yapılır ve Google Play, satın alma işlemini iptal eder.

...
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
    const paymentResponse = await request.show();
    const {purchaseToken} = paymentResponse.details;

    // Call backend to validate and acknowledge the purchase.
    if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
        // Optional: tell the PaymentRequest API the validation was
        // successful. The user-agent may show a "payment successful"
        // message to the user.
        const paymentComplete = await paymentResponse.complete('success');
    } else {
        // Optional: tell the PaymentRequest API the validation failed. The
        // user agent may show a message to the user.
        const paymentComplete = await paymentResponse.complete('fail');
    }
} catch(e) {
    // The purchase failed, and we can handle the failure here. AbortError
    // usually means a user cancellation
}
...

İsteğe bağlı olarak, satın alma işlemini "kullanıldı" olarak işaretlemek için purchaseToken'da consume() çağrılabilir. tekrar satın alınmasına izin verir.

Tüm bilgiler bir araya getirildiğinde, bir satın alma yöntemi aşağıdaki gibi görünür:

async function makePurchase(service, sku) {
    // Define the preferred payment method and item ID
    const paymentMethods = [{
        supportedMethods: "https://play.google.com/billing",
        data: {
            sku: sku,
        }
    }];

    // The "total" member of the paymentDetails is required by the Payment
    // Request API, but is not used when using Google Play Billing. We can
    // set it up with bogus details.
    const paymentDetails = {
        total: {
            label: `Total`,
            amount: {currency: `USD`, value: `0`}
        }
    };

    const request = new PaymentRequest(paymentMethods, paymentDetails);
    try {
        const paymentResponse = await request.show();
        const {purchaseToken} = paymentResponse.details;

        // Call backend to validate and acknowledge the purchase.
        if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
            // Optional: consume the purchase, allowing the user to purchase
            // the same item again.
            service.consume(purchaseToken);

            // Optional: tell the PaymentRequest API the validation was
            // successful. The user-agent may show a "payment successful"
            // message to the user.
            const paymentComplete =
                    await paymentResponse.complete('success');
        } else {
            // Optional: tell the PaymentRequest API the validation failed.
            // The user agent may show a message to the user.
            const paymentComplete = await paymentResponse.complete('fail');
        }
    } catch(e) {
        // The purchase failed, and we can handle the failure here.
        // AbortError usually means a user cancellation
    }
}

Mevcut satın alma işlemlerinin durumunu kontrol etme

Digital Goods API, kullanıcının mevcut yararlanma hakları (uygulama içi gerçekleştirdikleri önceki satın alma işlemlerinden elde edilen gelirler veya devam eden abonelikler başka bir cihazda, önceki bir yüklemede yapılmış, promosyon kodundan kullanılmış veya yalnızca uygulamayı son açtıklarında.


const service =
     await window.getDigitalGoodsService('https://play.google.com/billing');
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
    // Update the UI with items the user is already entitled to.
    console.log(`Users has entitlement for ${p.itemId}`);
}

Bu, daha önce yapılan ancak onaylanmayan satın alma işlemlerini kontrol etmek için de iyi bir fırsattır. Kullanıcılarınızın ödeme yapmalarını sağlamak için satın alma işlemlerini en kısa sürede onaylamanız önerilir. haklar yansıtıldığını görebilirsiniz.

const service =
     await window.getDigitalGoodsService("https://play.google.com/billing");
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
    await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);

    // Update the UI with items the user is already entitled to.
    console.log(`Users has entitlement for ${p.itemId}`);
}

Entegrasyonunuzu test etme

Geliştirme Android cihazında

Digital Goods API, geliştirme Android cihazında test amacıyla etkinleştirilebilir:

  • Geliştirici modunun etkin olması kaydıyla Android 9 veya daha yeni bir sürüme sahip olduğunuzdan emin olun.
  • Chrome 101 veya daha yeni bir sürümü yükleyin.
  • chrome://flags adresine gidip adla işaretle:
    • #enable-debug-for-store-billing
  • Sitenin bir https protokolü kullanılarak barındırıldığından emin olun. http kullanılması API'nin undefined olmasına neden olur

ChromeOS cihazda

Digital Goods API, sürüm 89'dan itibaren ChromeOS kararlı sürümünde kullanıma sunulacaktır. Dijital Ürünler API'sini test etmek de mümkündür:

  • Play Store'dan uygulamanızı cihaza yükleyin.
  • Sitenin bir https protokolü kullanılarak barındırıldığından emin olun. http kullanılması API'nin undefined olmasına neden olur

Test kullanıcıları ve kalite güvencesi ekipleri ile

Play Store, kullanıcı test hesapları ve test SKU'ları da dahil olmak üzere test için çeşitli olanaklar sağlar. Daha fazla bilgi için Google Play Faturalandırma test dokümanlarına göz atın.

Bir sonraki adım neresi?

Bu belgede açıklandığı gibi Play Faturalandırma API'sinin, yönetilen istemci tarafı bileşenleri bulunur. tarafından yapılmasını sağlayan özellikler.