WICG / digital-goods

Other
50 stars 28 forks source link

Subscriptions: May need an "introductory price cycles" field in ItemDetails #20

Closed mgiuca closed 2 years ago

mgiuca commented 4 years ago

The ItemDetails struct currently has the following relevant fields:

But "introductory price period" shouldn't really be a duration string (e.g., "P3M" for two months); it should actually be called "introductory price cycles", an integer representing an exact multiple of the subscription period, in which to charge the reduced amount. For example, if something is normally $10 / month, but you want to charge $8 / month for the first three months, that's:

{
  price: {currency: 'USD', value: '10'},
  subscriptionPeriod: 'P1M',
  introductoryPrice: {currency: 'USD', value: '8'},
  introductoryPriceCycles: 3
}

You wouldn't want to have introductoryPricePeriod: 'P3M' because then that suggests a single lump sum for 3 months. We want to conceptualize this as a recurring payment of N payments every M units of time.

However, apparently that isn't enough either, because some developers may wish to use a different billing period during the introductory pricing phase. This seems very strange to me, but @emilieroberts has stated internally that it's possible to do with the Android Play Billing system, and some developers want to do this. That means we need both introductoryPriceCycles and introductoryPricePeriod.

For example, if something is normally $10 / month, but you want to charge $2 / week for the first three weeks, that's:

{
  price: {currency: 'USD', value: '10'},
  subscriptionPeriod: 'P1M',
  introductoryPrice: {currency: 'USD', value: '2'},
  introductoryPricePeriod: 'P3W',
  introductoryPriceCycles: 3
}

Indeed, the Android Play Billing API actually has three fields related to introductory price: SkuDetails has getIntroductoryPrice, getIntroductoryPriceCycles and getIntroductoryPricePeriod. It would not be possible for us to losslessly map those three fields onto our two fields. So I think we need to follow suit and expose all three.

emilieroberts commented 4 years ago

I think in simple cases it seems strange, but for long subscriptions or high-value subscriptions, it makes more sense. For example:

MyAwesomeMovieStreamingService $2 Halloween Madness Sale!

The dev wouldn't necessarily want to advertise a first year subscription for $200 + 2 - (200 / 12) = $185.33