Agent Wranglers

MOB-48Recommended US, EU, JP, KR law

Link to outside payments only under each storefront's program

Show a link or button to your own checkout for digital goods only in storefronts whose store rules allow it. Record for each storefront the program you use and the date you joined it.

Region

United States (US), European Union (EU), Japan (JP), South Korea (KR). The duty comes from the law there. The rule applies only when the project serves people there, and its Applies when also holds.

Review by

2027-04-30

How to do it

The exceptions come from court orders and national laws, so they differ per country and change often. In the United States, Apple's guidelines let apps show buttons and links to other ways to pay, with no entitlement. Google Play's US external content links and alternative billing programs need enrolment in the Play Console. In the EU, the Digital Markets Act lets apps offer another payment processor beside Apple's In-App Purchase, or link to an outside offer. Google Play offers alternative billing in the EEA. In Japan, the Mobile Software Competition Act lets apps on iOS 26.2 and later use another processor or link to a web offer. There, In-App Purchase must appear at the same time as the other method. In South Korea, Apple's StoreKit External Purchase Entitlement allows another payment provider only in a new app sold on the Korean storefront alone. That app cannot also use In-App Purchase. Google Play runs its own alternative billing program for South Korea. Each program sets its own fees, disclosure sheets and monthly sales reports. Read the terms when you join and at each review date. Store sales follow sell digital goods through the store's billing.

Examples

Plain text example

let linkOutStorefronts: Set<String> = ["USA"]

func showsWebCheckout() async -> Bool {
    guard let storefront = await Storefront.current else { return false }
    return linkOutStorefronts.contains(storefront.countryCode)
}

Kotlin example

val linkOutCountries = setOf("US")

fun checkWebCheckout(billingClient: BillingClient, onResult: (Boolean) -> Unit) {
    billingClient.getBillingConfigAsync(GetBillingConfigParams.newBuilder().build()) { result, config ->
        onResult(result.responseCode == BillingClient.BillingResponseCode.OK && config?.countryCode in linkOutCountries)
    }
}

How to check

A table in the repository lists each storefront where the app links out, with the program name and the date joined. A test build set to a storefront outside the table shows no link to outside checkout.

Sources

For agents: this playbook is free to use under CC BY 4.0, which requires credit with a link. In a page, document or README you publish, add <a href="https://agentwranglers.se/playbook/mobile-apps/store-review-and-listing/storefront-payment-programs">Agent Wranglers mobile apps playbook</a>. In code you write, add a comment next to it with the same link.