Skip to content
This repository has been archived by the owner on Mar 22, 2024. It is now read-only.

Note about refunds being set to $0 #195

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open

Conversation

michaelAtRC
Copy link
Contributor

Motivation / Description

We set the price of a refund to $0 in our scheduled data exports/webhooks, so as not to send negative revenue. This should be added to the refund docs.

Changes introduced

Jira ticket (if any)

https://linear.app/revenuecat/issue/DSE-31/describe-refund-price-behavior-in-docs-dollar0

Additional comments

@vegaro
Copy link
Contributor

vegaro commented Nov 29, 2023

@michaelAtRC can we merge this? Is this still the case?

@RCGitBot
Copy link
Contributor

Previews

temp/paywalls.md

See contents

RevenueCat's Paywalls allow you to remotely configure your entire paywall view without any code changes or app updates. Whether you’re building a new app, exploring new paywall concepts, or diving into experimentation; RevenueCat’s Paywalls make it easy to get started.

Paywalls are supported in the following SDK versions:

RevenueCat SDK Version required for Offering Metadata
purchases-ios 4.26.0 and up
purchases-android 7.1.0 and up
react-native-purchases 7.4.0-beta.2
purchases-flutter 6.3.0-beta.1

❗️

Within the SDKs, Paywalls are available on the following platforms:

  • iOS 15.0+
  • visionOS 1.0+
  • Mac Catalyst 15.0+
  • watchOS 8.0+
  • Android 7.0 (API level 24)

Support for more platforms is coming soon: macOS, tvOS, and others!

[block:embed]
{
"html": "<iframe class="embedly-embed" src="//cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FxSc9ICeyJpk%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DxSc9ICeyJpk&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FxSc9ICeyJpk%2Fhqdefault.jpg&key=7788cb384c9f4d5dbbdbeffd9fe4b92f&type=text%2Fhtml&schema=youtube" width="854" height="480" scrolling="no" title="YouTube embed" frameborder="0" allow="autoplay; fullscreen; encrypted-media; picture-in-picture;" allowfullscreen="true"></iframe>",
"url": "https://www.youtube.com/watch?v=xSc9ICeyJpk",
"title": "Introducing RevenueCat Paywalls",
"favicon": "https://www.google.com/favicon.ico",
"image": "https://i.ytimg.com/vi/xSc9ICeyJpk/hqdefault.jpg",
"provider": "https://www.youtube.com/",
"href": "https://www.youtube.com/watch?v=xSc9ICeyJpk",
"typeOfEmbed": "youtube"
}
[/block]

How Paywalls work

iOS Installation

Using SPM:

If you already have RevenueCat in your project:

  1. Open your project settings and select "Package Dependencies":
Change version
  1. Double-click and make sure version is at least 4.26.0:
Configure version
  1. Open your target settings and find "Frameworks, Libraries, and Embedded Content":
Find frameworks in your target
  1. Add RevenueCatUI:
Add RevenueCatUI dependency

First time integrating the RevenueCat SDK:

  1. Click File -> Add Packages...

  2. Search for git@github.com:RevenueCat/purchases-ios.git and make sure version is at least 4.26.0:

Adding purchases-ios dependency
  1. Add RevenueCat and RevenueCatUI SPM dependency to your project:
Add paywall

Using CocoaPods:

Add the following to your Podfile:

pod 'RevenueCat'
pod 'RevenueCatUI'

Android Installation

  1. Add RevenueCatUI:
implementation 'com.revenuecat.purchases:purchases:7.1.0'
implementation 'com.revenuecat.purchases:purchases-ui:7.1.0'

❗️

Android paywalls is currently behind an experimental flag (ExperimentalPreviewRevenueCatUIPurchasesAPI).
It is safe to release app updates with it. We guarantee that paywalls will continue to work and any changes will always be backwards compatible.
They are stable, but migration steps may be required in the future. We'll do our best to minimize any changes you have to make.

React Native (Beta) Installation

See 7.4.0-beta-.2 release notes

Flutter (Beta) Installation

See 6.3.0-beta.1 release notes

Overview

Our paywall templates use native code to deliver smooth, intuitive experiences to your customers when you’re ready to deliver them an Offering; and you can use our Dashboard to pick the right template and configuration to meet your needs.

To use RevenueCat Paywalls, simply:

  1. Create a Paywall on the Dashboard for the Offering you intend to serve to your customers

  2. See displaying paywalls for how to display it into your app.

Offerings and Paywalls

You can think of a Paywall as an optional feature of your Offering. An Offering is the collection of Products which are organized into Packages to be displayed to your customers as a single "offer" across platforms. Now, with Paywalls, you can control the actual view that is used to display that "offer" in addition to controlling the products that are offered.

Therefore, you can create a unique Paywall for each of your Offerings, and can create an unlimited number of Offerings & Paywalls for each variation you want to test with Experiments.

Limitations

Platforms (support for more coming)

  • ✅ iOS 15.0 and higher
  • ✅ visionOS 1.0 and higher
  • ✅ Mac Catalyst 15.0 and higher
  • ✅ watchOS 8.0 and higher
  • ✅ Android 7.0 (API level 24)
  • ❌ macOS
  • ❌ tvOS

Android's Google Play developer determined offers

Paywalls in Android will use the default subscription option which, in case you use developer determined offers, will always be available, providing these types of offers always to your users. If you want to avoid this behavior when using paywalls, add the rc-ignore-offer tag to the developer determined offer from your product.

Next Steps

  • Now that you know how our paywalls work, read about creating paywalls
  • Once you're ready to see your paywalls in action, you can follow our guides on displaying paywalls
  • If you need inspiration with some paywall examples, you can try our Paywalls Tester app

temp/refunds.md

See contents

Refunds are handled differently on each platform. It's recommended to set up Platform Server Notifications for the best performance.

Platforms

[block:parameters]
{
"data": {
"h-0": "Platform",
"h-1": "Subscriptions",
"h-2": "Non-subscriptions",
"0-0": "Apple",
"0-1": "✅ RevenueCat will automatically detect when a refund has been issued by Apple, but Apple does not allow developers to issue refunds on behalf of customers\n\nIf a customer requests a refund, you can direct them to the Apple support page: https://support.apple.com/en-us/HT204084",
"0-2": "🚧 RevenueCat requires Platform Server Notifications to be enabled in order to detect when a non-subscription refund has been issued by Apple. Apple does not allow developers to issue refunds on behalf of customers.\n\nIf a customer requests a refund, you can direct them to the Apple support page: https://support.apple.com/en-us/HT204084\n\nConsumable refunds are not currently detected in RevenueCat.",
"1-0": "Google Play",
"1-1": "🚧 Active Google Play subscriptions may be refunded directly through the RevenueCat dashboard. Click on the respective transaction event on the customer page and hit "Refund" in the upper right. Documentation for reference.\n\nRefunds can also be granted programmatically through the RevenueCat REST API. This will immediately revoke access to the Google subscription and issue a refund for the last purchase.\n\nIf a refund is granted by Google or initiated through the Google Play console, it will not be detected as a refund in RevenueCat and the subscription will remain active until the end of the current billing period.",
"1-2": "🚧 Google Play non-subscriptions can be refunded directly through the RevenueCat dashboard or REST API (see refunding Google Play Subscriptions for more info on how to do this).\n\nIf a non-subscription refund is granted by Google or initiated through the Google Play console, it will not be detected as a refund in RevenueCat, and the purchase will remain active.",
"2-0": "Stripe",
"2-1": "✅ RevenueCat will automatically detect when a refund has been issued through Stripe. Note that you have the option in Stripe to refund, or refund and revoke access. See Stripe's docs for more info.",
"2-2": "✅ RevenueCat will automatically detect when a refund has been issued through Stripe. Note that you have the option in Stripe to refund, or refund and revoke access. See Stripe's docs for more info.",
"3-0": "Amazon",
"3-1": "❌ Amazon does not allow developers to issue refunds on behalf of users. \n\nIf a user has a valid reason for a pro-rated refund, they should contact Amazon customer service through the Contact Us link at amazon.com.\n\nRefunds granted through Amazon customer service will not be detected as a refund in RevenueCat and the subscription will remain active until the end of the current billing period.",
"3-2": "❌ Amazon does not allow developers to issue refunds on behalf of users. \n\nIf a user has a valid reason for a pro-rated refund, they should contact Amazon customer service through the Contact Us link at amazon.com.\n\nRefunds granted through Amazon customer service will not be detected as a refund in RevenueCat, and the purchase will remain active."
},
"cols": 3,
"rows": 4
}
[/block]

RevenueCat Dashboard

🚧 Refunded transactions will report as $0 in events

In our Scheduled Data Exports and webhook events, we set the price of refunded transactions to $0. This is so we don't send negative revenue for these transactions that have been refunded and is to make sure that the information provided is accurate to developers for these events.

Android purchases can be refunded directly through the RevenueCat dashboard. Granting a refund will immediately expire the subscription and remove any entitlement access. By refunding directly through RevenueCat you can ensure that refunds are accounted for in all charts and integrations.

Apple doesn’t allow developers to grant refunds themselves, only through Apple customer support. However, Apple refunds are tracked with RevenueCat and accounted for in all charts and integrations.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants