Skip to main content

Cheat sheet for working with iOS, iTunes, AppStore auto-renewables or Android, GooglePlay subscriptions

How to test auto-renewable subscriptions on iOS and Android?

Test purchases

Sandbox Live
iOS Sandbox account TestFlight internal/external
Android License testing group via Alpha Channel

Release Management > App releases > Manage Alpha > Manage testers
License testing account via Alpha/Internal Channel

Settings > Account details > Gmail accounts with testing access


Reduced test subscription time

Test subscriptions renew more quickly than normal to aid in testing. The following table identifies the testing renewal times for subscriptions of various durations.

Note: Test subscriptions will renew a maximum of 6 times.


iOS AppStore Connect



Note: Test subscriptions will renew a maximum of 6 times; after that you can continue testing with the user.


Actual Duration
Test Duration
1 week3 minutes
1 month5 minutes
2 months10 minutes
3 months15 minutes
6 months30 minutes
1 year1 hour


Android Google Play


Production subscription periodTest subscription renewal
1 week5 minutes
1 month5 minutes
3 months10 minutes
6 months15 minutes
1 year30 minutes

The time-based features available for subscriptions, such as free-trials, are also shortened for testing. The following table identifies the testing time periods associated with time-based subscription features:

Feature
Test period
Free trial3 minutes
Introductory price periodSame as subscription test period
Grace period (both 3- and 7-day) 5 minutes
Account hold10 minutes



Testing Google Play Billing Responses


There are three reserved product IDs for testing static Google Play Billing responses:

android.test.purchased

When you make an Google Play Billing request with this product ID, Google Play responds as though you successfully purchased an item. The response includes a JSON string, which contains fake purchase information (for example, a fake order ID).

android.test.canceled

When you make an Google Play Billing request with this product ID Google Play responds as though the purchase was canceled. This can occur when an error is encountered in the order process, such as an invalid credit card, or when you cancel a user's order before it is charged.

android.test.item_unavailable

When you make an Google Play Billing request with this product ID, Google Play responds as though the item being purchased was not listed in your application's product list.

Cancelling test purchases or sandbox purchases


Android
Google Play accumulates completed test purchases for each user but does not pass them on to financial processing.

Test purchases are not automatically canceled, so you might want to manually cancel a test purchase to continue testing. To do so, open the app page in the Play Store. If the test purchase that you want to cancel is a subscription, you can also use the cancel() method of the Purchases.subscriptions API.

Important: The refund() and revoke() methods of the Purchases.subscriptions API don't support test purchases.


iOS
You cannot continue to test the auto-renewing aspect of the subscription for that test user after 5 renewals. To test the auto-renewing aspect you must create a new test user.


Server-side real-time update of subscription changes



There are events available for iOS:
To receive status update notifications, configure a subscription status URL for your app in App Store Connect. The App Store will deliver JSON objects via an HTTP POST to your server for the key subscription events. Your server is responsible for parsing, interpreting, and responding to all statusUpdateNotification posts.

Apple Developer
How we implemented Apple Server To Server notifications


And Android:
Google Play Billing provides server push notifications that let you monitor state changes for Play-managed subscriptions. By enabling Real-Time Developer Notifications, you'll receive a purchase token directly from Cloud Pub/Sub anytime there is an update to an existing subscription.

Android Developer

iOS Deeplinks


Additionally, your app can deep link customers to the payment details page within App Store on their device by opening this URL


For users who wish to cancel their subscription, your app can open the following URL:


Links


iOS

Comments

Most Favorite Posts

TechLead: React Native vs Flutter vs WebView - Hybrid Mobile App Development for 2018

Topics covered: Xamarin, Cordova, Flutter, Titanium, React Native, Flutter React Native Web Views Native Development: iOS and Android Types of apps: Fully native high interactivity expensive: iOS and Android high interactivity, personalization, performance worth for top 50 apps less and less apps are installed you need to shine to be discovered user picks only best app among similar featured apps Hybrid Technologies Xamarin, Cordova, Flutter, Titanium, React Native, Flutter Be aware of the maturity lock-in effect infrastructure and tooling required might get worst of both world should be incrementable updatable check where it makes sense WebViews only Native App shells: Amazon App, Apple App Store, WeChat Mainly for smaller companies Trending on Google Links: AirBnB is sunsetting its React Native development What’s Next for Mobile at Airbnb Server-Driven Rendering Even though we’re not using React Native, we still see the val...

iOS and Android native App Install Banner

Android Native App install banners are similar to Web app install banners, but instead of adding to the home screen, they will let the user install your native app without leaving your site. Developer Google iOS Promoting Apps with Smart App Banners: Safari has a new Smart App Banner feature in iOS 6 and later that provides a standardized method of promoting apps on the App Store from a website. Developer Apple

Dark Theme (Dark Mode) in Android WebViews, WKWebViews and CSS

So your apps just implemented a shiny new dark theme and it’s looking 👌 There are lots of benefits to having a dark theme in your application, and having it consistent throughout your application allows for a great user experience. But what happens when the the user runs into a WebView in your app? Support: if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) { ... } Set: WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON) Current setting: val forceDarkMode = WebSettingsCompat.getForceDark(webView.settings) Joe Birch Assuming your question is asking how to change the colors of the HTML content you are displaying in a WKWebView based on whether light or dark mode is in effect, there is nothing you do in your app's code. All changes need to be in the CSS being used by your HTML content. CSS dark mode via :root variables, explicit colors and @media query: :root {     color-scheme: light dark;      ...

Firebase realtime database stability - and monitoring

Firebase SLA Firebase will use commercially reasonable efforts to make Firebase available with a Monthly Uptime Percentage (defined below) of at least 99.95%, in each case during any monthly billing cycle (the "Service Commitment"). Firebase SLA Service Level Agreement for Hosting and Realtime Database Firebase Status Page Why Firebase sucks In the 3 years since starting to use Firebase we’ve suffered from so many outages I’ve literally lost count. @ Medium.com Status History Overview Statusgator Does anyone has real-life experience with the stability of Firebase or Firestore? Please leave a comment! We heared that Firestore is much more stable than Firebase which usage for new project is discouraged...

Understanding Automatic Reference Counting in Objective-C

Automatic Reference Counting (ARC) largely removes the burden of manual memory management, not to mention the chore of tracking down bugs caused by leaking or over-released objects! Despite its awesomeness, ARC does not let you ignore memory management altogether. This post covers the following key aspects of ARC to help you get up and running quickly. Reference Counted Memory: Quick Revision How Automatic Reference Counting Works Enabling ARC in Your Project New Rules Enforced by ARC ARC Qualifiers – Declared Properties ARC Qualifiers – Regular Variables Migrating Existing Projects to ARC Including Code that is not ARC Compliant Should I Use ARC? The Long Weekend Website

Returns and refunds on Google Play

Refunds may be available for purchases on Google Play: If something was bought on your account or with your payment method that you didn’t permit, we can usually help. If the purchase you made wasn’t delivered, doesn’t work, or isn’t what you expected, we can usually help. If you bought something by accident, or bought something then changed your mind, we may be able to help depending on the specific situation. If you give your account or payment details to someone else, appear to be abusing our policies, or don’t protect your account with authentication, we usually can’t issue a refund. It’s important that you make a refund request as soon as possible after you find an issue. Select a link below for more information and to find out how to make a request. Refund times: Payment method Estimated Refund time Credit card 3–5 business days Processing time can be affected by the card issuer and sometimes takes up to 10 business days. If yo...

Validity Time Auto-Renewables in Sandbox

The subscription durations, sandbox durations and incentive durations of auto-renewables. Hint: In Sandbox the validity time differs from live environment!!! Durations Sandbox Duration Incentive Durations (optional) 7 days 3 minutes 7 days 1 month 5 minutes 7 days, 1 month 2 months 10 minutes 7 days, 1 month 3 months 15 minutes 1 month 6 months 30 minutes 1 month, 2 months 1 year 1 hour 1 month, 2 months, 3 months After 6 extensions the abo is cancelled automatically in the sandbox environment.