Skip to content

[in_app_purchase_storekit] Add show manage subscriptions path - #12454

Merged
auto-submit[bot] merged 2 commits into
flutter:mainfrom
Hari-07:storekit2-manage-subscriptions
Oct 17, 2026
Merged

auto-submit[bot] merged 2 commits into
flutter:mainfrom
Hari-07:storekit2-manage-subscriptions

Conversation

@Hari-07

@Hari-07 Hari-07 commented Aug 13, 2026

Copy link
Copy Markdown
Member

Adds a new showManageSubscriptions method which wraps around storekit's showManageSubscriptions(in:)

Fixes flutter/flutter#159664

Pre-Review Checklist

If you need help, consider asking for advice on the #hackers-new channel on Discord.

Note: The Flutter team is currently trialing the use of Gemini Code Assist for GitHub. Comments from the gemini-code-assist bot should not be taken as authoritative feedback from the Flutter team. If you find its comments useful you can update your code accordingly, but if you are unsure or disagree with the feedback, please feel free to wait for a Flutter team member's review for guidance on which automated comments should be addressed.

Footnotes

  1. Regular contributors who have demonstrated familiarity with the repository guidelines only need to comment if the PR is not auto-exempted by repo tooling. ↩ ↩2

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces the showManageSubscriptions method to the InAppPurchaseStoreKitPlatformAddition class, enabling users to manage subscriptions via the App Store sheet on iOS 15+ using StoreKit 2. The changes include the Swift implementation, Pigeon-generated code, an example app button, and corresponding unit tests. Feedback recommends moving UIKit property access inside the @MainActor task block in Swift to ensure thread safety, and catching potential exceptions in the example app's onPressed callback to prevent unhandled asynchronous errors.

backgroundColor: Theme.of(context).colorScheme.primary,
foregroundColor: Colors.white,
),
onPressed: () => _iapStoreKitPlatformAddition.showManageSubscriptions(),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The showManageSubscriptions method returns a Future<void> and can throw an exception (for example, on unsupported platforms like macOS or iOS versions below 15). Since this future is not awaited or caught in the onPressed callback, any thrown error will result in an unhandled asynchronous exception. It is highly recommended to catch the error and display a user-friendly message (e.g., using a SnackBar) to handle these expected platform limitations gracefully.

            onPressed: () async {
              try {
                await _iapStoreKitPlatformAddition.showManageSubscriptions();
              } catch (e) {
                if (mounted) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Error: $e')),
                  );
                }
              }
            },

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is ok for the internal example

@Hari-07

Hari-07 commented Aug 13, 2026

Copy link
Copy Markdown
Member Author

I wasn't sure if we need to do something in in_app_purchase. From what I can see the code change will get picked up automatically maybe just need to update the readme. And bump dependency to ^0.4.12 so that the readme is correct, if we want to

@elliette
elliette requested a review from LouiseHsu September 22, 2026 20:40
@elliette elliette added the triage-ios Should be looked at in iOS triage label Sep 22, 2026
@cbracken

cbracken commented Oct 1, 2026

Copy link
Copy Markdown
Member

/cc @LouiseHsu friendly ping

@LouiseHsu LouiseHsu left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for your work! This looks great.

/// Presents the App Store sheet that lets the user manage their subscriptions.
func showManageSubscriptions(completion: @escaping (Result<Void, Error>) -> Void) {
#if os(iOS)
if #available(iOS 15.0, *) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you can drop this check. The entire file/extension is already guarded with @available(iOS 15.0, macOS 12.0, *)

@vashworth

Copy link
Copy Markdown
Contributor

from triage: @Hari-07 Can you resolve the comments and merge conflicts? Thanks!

@Hari-07
Hari-07 force-pushed the storekit2-manage-subscriptions branch from c8e0510 to 585d5c1 Compare October 15, 2026 17:53
@Hari-07 Hari-07 added the autosubmit Merge PR when tree becomes green via auto submit App label Oct 17, 2026
@auto-submit
auto-submit Bot merged commit 817b650 into flutter:main Oct 17, 2026
13 checks passed
@Hari-07
Hari-07 deleted the storekit2-manage-subscriptions branch October 17, 2026 01:08
opensource-fork-sync Bot pushed a commit to cla7aye15I4nd/opensource-flutter__flutter that referenced this pull request Oct 19, 2026
flutter/packages@93eede7...10a178c

2026-10-19 [email protected] [material_ui]
Fixes SearchAnchor and SearchBar semantics (flutter/packages#12680)
2026-10-17 [email protected] [shared_preferences] switch to ffi/jni
pigeon (flutter/packages#12329)
2026-10-17 [email protected]
[in_app_purchase_storekit] Add show manage subscriptions path
(flutter/packages#12454)
2026-10-17 [email protected] [material_ui] Fix installing command
material UI (flutter/packages#13135)
2026-10-16 [email protected] [file_selector_ios] Drop deprecated
UIDocumentPickerMode code path (flutter/packages#13292)
2026-10-16 [email protected] [camera_avfoundation] Fixes sendability
mismatch in completion handler (flutter/packages#13298)
2026-10-16 [email protected] [local_auth_darwin] Fix Swift 6 concurrency
analyzer errors from lifecycle delegate methods (flutter/packages#13296)
2026-10-16 [email protected] [pointer_interceptor_ios] Use 'let' for
unmutated var (flutter/packages#13297)
2026-10-16 [email protected] [image_picker_ios] Fix Swift warnings in
ImagePickerPluginTests (flutter/packages#13299)
2026-10-16 [email protected] [camera]delete
fake bitrate/fps integration tests (flutter/packages#13291)
2026-10-16 [email protected] [google_maps_flutter_ios] Use 'let' for
unmutated var (flutter/packages#13300)
2026-10-16 [email protected] [VPAT] Declare input purpose on
a11y_assessments text fields (flutter/packages#13243)
2026-10-16 [email protected] [cupertino_ui]
Fix CupertinoMagnifier focalPointOffset animation scaling
(flutter/packages#13118)
2026-10-16 [email protected] [tool] Exempt `test_apps/` from version
and changelog checks (flutter/packages#13255)
2026-10-16 [email protected] [material_ui] Fallback theme
follows platform cherry pick (flutter/packages#13278)
2026-10-16 [email protected] Roll Flutter from
5c7e45a to a3d71d8 (26 revisions) (flutter/packages#13290)
2026-10-16 [email protected] [camera]do not
sleep to avoid hang due to merged thread (flutter/packages#13289)
2026-10-16 [email protected] [camera]fix
camera failure due to wrong jpg extension (flutter/packages#13285)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
suryaKommana2662 pushed a commit to suryaKommana2662/flutter that referenced this pull request Oct 29, 2026
flutter/packages@93eede7...10a178c

2026-10-19 [email protected] [material_ui]
Fixes SearchAnchor and SearchBar semantics (flutter/packages#12680)
2026-10-17 [email protected] [shared_preferences] switch to ffi/jni
pigeon (flutter/packages#12329)
2026-10-17 [email protected]
[in_app_purchase_storekit] Add show manage subscriptions path
(flutter/packages#12454)
2026-10-17 [email protected] [material_ui] Fix installing command
material UI (flutter/packages#13135)
2026-10-16 [email protected] [file_selector_ios] Drop deprecated
UIDocumentPickerMode code path (flutter/packages#13292)
2026-10-16 [email protected] [camera_avfoundation] Fixes sendability
mismatch in completion handler (flutter/packages#13298)
2026-10-16 [email protected] [local_auth_darwin] Fix Swift 6 concurrency
analyzer errors from lifecycle delegate methods (flutter/packages#13296)
2026-10-16 [email protected] [pointer_interceptor_ios] Use 'let' for
unmutated var (flutter/packages#13297)
2026-10-16 [email protected] [image_picker_ios] Fix Swift warnings in
ImagePickerPluginTests (flutter/packages#13299)
2026-10-16 [email protected] [camera]delete
fake bitrate/fps integration tests (flutter/packages#13291)
2026-10-16 [email protected] [google_maps_flutter_ios] Use 'let' for
unmutated var (flutter/packages#13300)
2026-10-16 [email protected] [VPAT] Declare input purpose on
a11y_assessments text fields (flutter/packages#13243)
2026-10-16 [email protected] [cupertino_ui]
Fix CupertinoMagnifier focalPointOffset animation scaling
(flutter/packages#13118)
2026-10-16 [email protected] [tool] Exempt `test_apps/` from version
and changelog checks (flutter/packages#13255)
2026-10-16 [email protected] [material_ui] Fallback theme
follows platform cherry pick (flutter/packages#13278)
2026-10-16 [email protected] Roll Flutter from
5c7e45a to a3d71d8 (26 revisions) (flutter/packages#13290)
2026-10-16 [email protected] [camera]do not
sleep to avoid hang due to merged thread (flutter/packages#13289)
2026-10-16 [email protected] [camera]fix
camera failure due to wrong jpg extension (flutter/packages#13285)

If this roll has caused a breakage, revert this CL and set the roller
to dry run mode using the controls here:
https://autoroll.skia.org/r/flutter-packages-flutter-autoroll
Please CC [email protected] on the revert to ensure that a
human
is aware of the problem.

To file a bug in Flutter:
https://github.com/flutter/flutter/issues/new/choose

To report a problem with the AutoRoller itself, please file a bug:
https://issues.skia.org/issues/new?component=1389291&template=1850622

Documentation for the AutoRoller is here:
https://skia.googlesource.com/buildbot/+doc/main/autoroll/README.md
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

autosubmit Merge PR when tree becomes green via auto submit App CICD Run CI/CD p: in_app_purchase platform-ios platform-macos triage-ios Should be looked at in iOS triage

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[in_app_purchase_storekit] Add AppStore.showManageSubscriptions() for StoreKit2 wrapper

5 participants