どのようにお手伝いできますか?

お知らせ:旧レシート検証機能の廃止について

  • 更新
セクション 詳細
What's new

レシート検証無料で利用可能なソリューションです。新しい validateAndLogメソッドを使用し、アプリストアと直接連携して購入を検証します。

In addition, the legacy method will be removed from the SDK starting from AppsFlyer SDK v7.0.0. Apps that upgrade to v7.0.0 or later will not be able to call the legacy method.

To continue measuring validated purchases, AppsFlyer provides two alternatives:

  • 非推奨となったvalidateAndLogInAppPurchaseのメソッドは、上記 SDK バージョンでは引き続き存在しますが、将来のアップデートで削除されます。
  • ROI360 ストア収益有償のプレミアム収益計測ソリューションです。 返金トラッキング、サブスクリプションのライフサイクルの可視化、純収益(ネットレベニュー)の算出などを含みます。
適用日

The following dates apply:

  • 更新日:2025年12月24日
  • Full sunset date: September 7, 2026
What you need to know
  • Onboarding is now required. Unlike Legacy, the new Receipt validation only works after the product type and store credentials are configured in AppsFlyer. Without this setup, the SDK returns an error.
  • Gross revenue replaces custom revenue values. The new Receipt validation records the gross revenue returned by the store, not the value you pass in the SDK call. If you previously passed a custom value (for example, net after store fee deduction), expect a difference in dashboards and partner postbacks after migration. For net revenue, use ROI360 Store Revenue.
  • Dashboards and postbacks use only the price and currency from the store validation response. Unlike Legacy, the new validateAndLogInAppPurchase does not accept price or currency in the SDK call. These values are extracted directly from the store validation response. Any af_revenue you pass as an additional parameter lands in the event's custom_data object but is not used for dashboards or postbacks.
  • New mandatory parameter: PurchaseType. Tells the SDK whether the transaction is a one-time purchase or a subscription.
What you need to do

To migrate to one of the two solutions (before September 7, 2026), perform one of the following:

For more information, see:

FAQ

How do I know which of my apps still use Legacy Receipt validation?

Legacy does not appear as a product type in the Revenue settings page, so you cannot confirm Legacy usage from the UI alone. Use the following methods together:

  • Scan raw data first. Look for af_purchase events with event_source: SDK and is_receipt_validated: true. These are candidates, but logEvent calls can produce similar events, so this is not conclusive on its own.
  • Confirm in the SDK code. If your app calls validateAndLogInAppPurchase with the legacy signature, it is on Legacy. The legacy signature includes:
    • Android: license key, JSON payload, price, currency
    • iOS: product ID, price, currency, transaction ID
  • Contact your CSM. They can confirm which of your apps are still on Legacy.

What exactly happens on September 7, 2026?

The Legacy Receipt validation backend service shuts down. From that day:

  • 以下の SDK バージョン以降、 validateAndLogInAppPurchaseのメソッドは非推奨(deprecated)として扱われます。
  • メソッドが削除された後は、この方式を利用しているアプリは AppsFlyer 経由でアプリ内課金を検証できなくなります。
  • Dashboards, raw data, and partner postbacks no longer receive purchase data from Legacy.

To keep capturing validated purchases, migrate to one of the supported alternatives before September 7, 2026.

Will enabling the new Receipt validation affect my live app versions that still call the legacy method?

No. The two products run in parallel until September 7, 2026. Enabling the new Receipt validation in AppsFlyer has no effect on app versions that still call the legacy method. They continue to work as before until the sunset date.

What happens to users on old app versions that never get updated?

Users on old app versions continue to generate validated af_purchase events until September 7, 2026. To continue getting validated purchase data, release your updated app version with enough lead time to reach most of your user base before the sunset.

Can I switch from Receipt validation to ROI360 Store Revenue later?

Yes. Both products use the same validateAndLogInAppPurchase (v2) SDK method, so switching from Receipt validation to ROI360 Store Revenue does not require an SDK change or app release. To switch, change the Product type on the Revenue settings page and complete the additional ROI360 setup (App Store server notifications for iOS, Google Play RTDN for Android). See Switch to ROI360 Store Revenue from Receipt validation.

If you want to go further and enable automatic purchase detection, full subscription lifecycle coverage (including renewals, upgrades, and existing subscribers), and subscription price-change handling, integrate the Purchase Connector SDK component. That's an app update, but it's optional. The manual validateAndLogInAppPurchase (v2) flow works in ROI360 Store Revenue without it.

Can I skip AppsFlyer purchase validation entirely?

Yes. You can report in-app purchase events with the standard logEvent API. But you'll miss out on:

  • Receipt validation against the app stores, which filters out fraudulent purchases
  • The af_validated flag on events: set to true when AppsFlyer successfully verifies the purchase with the store, false when it fails. Without validation, this flag is absent.
  • Accurate revenue postbacks to your UA partners. Without validation, any af_revenue you pass is recorded and sent to networks as-is, with no confirmation that the purchase actually occurred

For these reasons, AppsFlyer recommends using either Receipt validation or ROI360 Store Revenue rather than skipping validation entirely.

What happens if Apple's or Google's validation service has an outage?

It depends on which product you use:

  • Receipt validation: the SDK callback returns an error code. Your app needs to handle the failure and implement its own retry logic.
  • ROI360 Store Revenue: AppsFlyer retries validation automatically once the store service recovers, and regenerates any missed events for the outage window.

Why did my dashboard revenue change after migration?

The revenue source changed. Legacy used the value you passed in the SDK call. The new Receipt validation uses the gross revenue returned by the store. If you previously passed a custom value, for example net revenue after store fee deduction, your dashboards and partner postbacks will reflect a different number after migration.

If you need net revenue, use ROI360 Store Revenue. It records both gross and net (gross minus store fees and taxes).

What happens to my custom af_revenue value?

If you still pass the af_revenue value, it's preserved on the event inside the custom_data object. Dashboards and partner postbacks use the gross value from the store response, not your custom value.

Will my partners see the new gross revenue in postbacks?

Yes. After migration, af_purchase postbacks carry the gross revenue from the store. If you previously passed a custom value under Legacy, your partners will see a different number. Make sure to inform your UA partners before rolling out the migration, especially those partners that use revenue data for campaign optimization.

How do event names change after migration?

Legacy produced a single af_purchase event for all transaction types. The new Receipt validation uses distinct event names:

  • One-time purchase: af_purchase
  • Trial start: af_ars_trial_started
  • Subscription start: af_ars_subscription_started
  • Sandbox purchase: af_purchase_sandbox_sdk
  • Sandbox subscription or trial: af_ars_sandbox_sdk

Full subscription lifecycle events (renewals, cancellations, refunds, upgrades) are only available in ROI360 Store Revenue. For the full event list, see About Receipt validation.

Can I use the SDK validation response to control access to purchased content?

The new Receipt validation still returns a validation result to your SDK callback that you can use to control access to purchased content. The result is more accurate because it relies on the latest validation mechanisms provided by the Apple App Store and Google Play, so the signal you receive in the callback is more trustworthy.

How does the new method distinguish between subscriptions and one-time purchases?

The new validateAndLogInAppPurchase requires a mandatory PurchaseType parameter. Set it to one-time or subscription based on the transaction type.

アプリ内課金向けの 旧レシート検証機能(Legacy Receipt Validation) は、AppsFlyer のすべての SDK において 正式に非推奨となりました。

Your app has integrated the new validateAndLogInAppPurchase (v2) method, but the product isn't configured in the AppsFlyer dashboard. Open Settings > ROI360 > Revenue settings > Purchases & subscriptions, select either Receipt validation or ROI360, and complete the setup steps.

Why is my new SDK build only logging sandbox events, not af_purchase?

af_purchase is logged only for production transactions. Sandbox transactions are logged as af_purchase_sandbox_sdk. To produce a real af_purchase event, test through a production pipeline (non-TestFlight on iOS, non-Licensed Tester on Android).