Skip to content

feat: legacy-ios-redirect cp-7.72.0#27850

Merged
ieow merged 29 commits into
mainfrom
cw/legacy-ios-redirect
Apr 1, 2026
Merged

feat: legacy-ios-redirect cp-7.72.0#27850
ieow merged 29 commits into
mainfrom
cw/legacy-ios-redirect

Conversation

@ieow

@ieow ieow commented Mar 24, 2026

Copy link
Copy Markdown
Contributor

Description

Fixes: https://github.com/MetaMask/MetaMask-planning/issues/7148

Support webcredential for ios google login
Part 3/4 - Support legacy/ webcredential ios google login based on feature flag

This pr add feature flag for the ios google login
use legacy ios google login when flag is true
use webcredential ios google login when flag is false for ios > 17.4

Part 1/ 4 - #27741
Part 2/ 4 - #27848
Part 3/ 4 - #27850 (defer to 7.72.0)
Part 4/ 4 - #27875

Changelog

CHANGELOG entry: Support legacy/ webcredential ios google login based feature flag

Related issues

Fixes:

Manual testing steps

Feature: iOS Google OAuth and token refresh (seedless)

  Scenario: Sign in with Google on iOS using legacy configuration
    Given the legacy iOS Google feature flag and OS version yield legacy client/redirect
    When the user completes seedless Google onboarding
    Then login completes and the app persists onboarding OAuth context as expected

  Scenario: Sign in with Google on iOS using web client and universal link redirect
    Given the app selects the web Google client and universal link redirect for iOS Google
    When the user completes Google OAuth via the browser/universal link flow
    Then the user returns to the app with a successful login

  Scenario: Refresh auth tokens after Google login on iOS
    Given an existing seedless Google session on iOS
    When the client refreshes JWT / auth tokens (e.g. after background or controller refresh)
    Then refresh succeeds without client_id mismatch errors

  Scenario: Wallet reset clears seedless onboarding state
    Given seedless onboarding metadata exists in Redux
    When the user deletes the wallet or resets onboarding as implemented
    Then seedless onboarding state is cleared with other onboarding fields

Screenshots/Recordings

Before

After

Pre-merge author checklist

Pre-merge reviewer checklist

  • I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed).
  • I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots.

Note

Medium Risk
Changes OAuth login/refresh behavior and auth-connection selection for iOS Google, including new Redux-persisted client IDs and feature-flagged config switching; mistakes could break Google sign-in or token refresh on iOS.

Overview
Adds persisted seedless onboarding OAuth context to Redux (new SET/CLEAR_SEEDLESS_ONBOARDING actions + reducer state) and clears it when restarting onboarding or deleting/resetting a wallet.

Updates iOS Google OAuth to switch between legacy iOS redirect/clientId and web/universal-link credentials via a new getIosGoogleConfig() helper and legacy feature flag logic (with an iOS < 17.4 safety fallback), while unifying Google web constants/redirect naming.

Ensures refresh-token requests on iOS Google reuse the original client_id by reading the persisted onboarding clientId (fallbacking to legacy IosGID), and updates OAuth authentication to pick iOS vs Android auth-connection IDs based on device/clientId. Tests were expanded/updated to cover these paths (including Google prompt select-account and state reset).

Written by Cursor Bugbot for commit 24579e7. This will update automatically on new commits. Configure here.

@github-actions

Copy link
Copy Markdown
Contributor

CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes.

@metamaskbot metamaskbot added the team-onboarding Onboarding team label Mar 24, 2026
@ieow ieow changed the title Cw/legacy-ios-redirect feat: legacy-ios-redirect Mar 24, 2026
@ieow ieow force-pushed the cw/legacy-ios-redirect branch from 29c9ef9 to 6d189d8 Compare March 24, 2026 10:51
@github-actions github-actions Bot added size-M and removed size-XL labels Mar 24, 2026
Comment thread app/util/device/utils.ts Outdated
Comment thread app/core/OAuthService/error.ts Outdated
Comment thread app/core/OAuthService/OAuthLoginHandlers/constants.ts Outdated
Comment thread app/core/OAuthService/error.ts Outdated
Comment thread app/core/OAuthService/OAuthLoginHandlers/constants.ts
@ieow ieow force-pushed the cw/legacy-ios-redirect branch from 6d189d8 to 6d3bbea Compare March 24, 2026 13:08
Comment thread app/util/device/index.js
github-merge-queue Bot pushed a commit that referenced this pull request Mar 24, 2026
<!--
Please submit this PR as a draft initially.
Do not mark it as "Ready for review" until the template has been
completely filled out, and PR status checks have passed at least once.
-->

## **Description**
Support webcredential for ios google login
Part 2/4 - Add feature flag 

This pr add feature flag for the ios google login


PR list
Part 1/ 4 - #27741
Part 2/ 4 - #27848
Part 3/ 4 - #27850
Part 4/ 4 - TBA

<!--
Write a short description of the changes included in this pull request,
also include relevant motivation and context. Have in mind the following
questions:
1. What is the reason for the change?
2. What is the improvement/solution?
-->

## **Changelog**

<!--
If this PR is not End-User-Facing and should not show up in the
CHANGELOG, you can choose to either:
1. Write `CHANGELOG entry: null`
2. Label with `no-changelog`

If this PR is End-User-Facing, please write a short User-Facing
description in the past tense like:
`CHANGELOG entry: Added a new tab for users to see their NFTs`
`CHANGELOG entry: Fixed a bug that was causing some NFTs to flicker`

(This helps the Release Engineer do their job more quickly and
accurately)
-->

CHANGELOG entry: added legacyIosGoogleConfigEnabled feature flag

## **Related issues**

Fixes:

## **Manual testing steps**

```gherkin
Feature: my feature name

  Scenario: user [verb for user action]
    Given [describe expected initial app state]

    When user [verb for user action]
    Then [describe expected outcome]
```

## **Screenshots/Recordings**

<!-- If applicable, add screenshots and/or recordings to visualize the
before and after of your change. -->

### **Before**

<!-- [screenshots/recordings] -->

### **After**

<!-- [screenshots/recordings] -->

## **Pre-merge author checklist**

- [ ] I've followed [MetaMask Contributor
Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile
Coding
Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md).
- [ ] I've completed the PR template to the best of my ability
- [ ] I've included tests if applicable
- [ ] I've documented my code using [JSDoc](https://jsdoc.app/) format
if applicable
- [ ] I've applied the right labels on the PR (see [labeling
guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)).
Not required for external contributors.

## **Pre-merge reviewer checklist**

- [ ] I've manually tested the PR (e.g. pull and build branch, run the
app, test code being changed).
- [ ] I confirm that this PR addresses all acceptance criteria described
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.



<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: adds a new remote feature flag and selector with env
override, without changing authentication flow yet; main risk is
misconfiguration since the selector defaults to enabled.
> 
> **Overview**
> Adds a new remote feature flag, `legacyIosGoogleConfigEnabled`,
including registry metadata and a dedicated selector
`selectLegacyIosGoogleConfigEnabled` (defaulting to `true`) that can be
force-overridden via `MM_LEGACY_IOS_GOOGLE_CONFIG_ENABLED`.
> 
> Includes unit tests covering default/remote/env override behavior, and
updates `babel.config.tests.js` to avoid inlining env vars for the new
selector and its tests.
> 
> <sup>Written by [Cursor
Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit
ca7e813. This will update automatically
on new commits. Configure
[here](https://cursor.com/dashboard?tab=bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
@ieow ieow marked this pull request as ready for review March 24, 2026 15:07
@ieow ieow requested a review from a team as a code owner March 24, 2026 15:07
@ieow ieow mentioned this pull request Mar 24, 2026
7 tasks
Comment thread app/core/OAuthService/OAuthLoginHandlers/constants.ts
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Apr 1, 2026
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Apr 1, 2026
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Apr 1, 2026
Comment thread app/core/OAuthService/OAuthService.test.ts
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Apr 1, 2026

@cursor cursor 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.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Fix All in Cursor

Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.

Comment thread app/core/OAuthService/OAuthService.ts Outdated
@github-actions github-actions Bot added risk-medium Moderate testing recommended · Possible bug introduction risk and removed risk-high Extensive testing required · High bug introduction risk labels Apr 1, 2026
@ieow ieow enabled auto-merge April 1, 2026 10:33
@github-actions github-actions Bot added risk-medium Moderate testing recommended · Possible bug introduction risk and removed risk-medium Moderate testing recommended · Possible bug introduction risk labels Apr 1, 2026
@github-actions github-actions Bot added risk-high Extensive testing required · High bug introduction risk and removed risk-medium Moderate testing recommended · Possible bug introduction risk labels Apr 1, 2026
@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

🔍 Smart E2E Test Selection

  • Selected E2E tags: SmokeWalletPlatform, SmokeAccounts
  • Selected Performance tags: @PerformanceOnboarding, @PerformanceLogin
  • Risk Level: high
  • AI Confidence: 88%
click to see 🤖 AI reasoning details

E2E Test Selection:
The changes primarily affect the seedless onboarding (Google/Apple OAuth) flow with several key modifications:

  1. iOS Google OAuth config routing: New getIosGoogleConfig() function uses a feature flag (legacyIosGoogleConfig) and iOS version check (< 17.4) to determine which Google client ID/redirect URI to use. This is a critical change for iOS Google login.

  2. Redux state persistence: New seedlessOnboarding state in the onboarding reducer stores clientId and authConnection after successful OAuth login. This is used by AuthTokenHandler to maintain backward compatibility for token refresh.

  3. Auth connection ID routing: getAuthConnectionIdFromClientId() properly routes Android vs iOS auth connection configs based on client ID.

  4. Wallet reset: clearSeedlessOnboarding() is now dispatched during vault reset in Authentication.ts, ensuring clean state.

  5. Onboarding flow: clearSeedlessOnboarding() is dispatched when navigating to the onboarding sheet.

  6. Google account selection: Prompt.SelectAccount added to force account selection in Google OAuth flow.

All seedless onboarding E2E tests (google-login-new-user, google-login-existing-user, google-login-lock-unlock, google-login-reset-wallet, apple-login tests) are tagged with SmokeWalletPlatform. The wallet reset flow in Authentication.ts also affects account management, warranting SmokeAccounts as well. The changes to the onboarding reducer could affect wallet creation analytics tracking also covered by SmokeWalletPlatform.

Performance Test Selection:
The changes affect the onboarding flow (OAuth login, Redux state persistence) and the login/unlock flow (token refresh with backward-compatible client ID lookup). The AuthTokenHandler now reads from Redux state during token refresh which could add latency to the login/unlock flow. The onboarding flow now dispatches additional Redux actions. These changes warrant performance validation for both onboarding and login flows.

View GitHub Actions results

@sonarqubecloud

sonarqubecloud Bot commented Apr 1, 2026

Copy link
Copy Markdown

@github-actions

github-actions Bot commented Apr 1, 2026

Copy link
Copy Markdown
Contributor

E2E Fixture Validation — Schema is up to date
17 value mismatches detected (expected — fixture represents an existing user).
View details

@ieow ieow added this pull request to the merge queue Apr 1, 2026
Merged via the queue into main with commit d6d4c1b Apr 1, 2026
95 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

release-7.73.0 Issue or pull request that will be included in release 7.73.0 risk-high Extensive testing required · High bug introduction risk size-L team-onboarding Onboarding team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants