Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(native-app): Implement universal links #15961

Merged
merged 2 commits into from
Sep 16, 2024
Merged

Conversation

eirikurn
Copy link
Member

@eirikurn eirikurn commented Sep 11, 2024

  • Only runs when the user is logged in and has passed the pin screen.
  • Improves notification handling to support passkey browser.

Summary by CodeRabbit

  • New Features

    • Introduced support for Universal Links, enhancing navigation to specific content within the app.
    • Added deep link handling capabilities to improve user experience when responding to notifications and links.
  • Enhancements

    • Updated navigation functionality to allow links to be opened in a browser or within the app.
    • Improved organization of dependencies and hooks in various components for better maintainability.
  • Bug Fixes

    • Streamlined event handling by removing unnecessary logging and checks for URL processing.

@eirikurn eirikurn requested review from a team as code owners September 11, 2024 15:24
Copy link
Contributor

coderabbitai bot commented Sep 11, 2024

Walkthrough

The pull request introduces several changes to the iOS application, including the addition of support for Universal Links and deep linking through modifications to entitlement files, package dependencies, and the implementation of custom hooks. Key updates include the integration of the expo-linking package, the creation of a new hook for managing deep links and notifications, and adjustments to navigation functions to enhance user interaction with notifications and links. Additionally, some notification handling logic has been streamlined, and several import statements have been reorganized for better modularity.

Changes

File Path Change Summary
apps/native/app/ios/IslandApp/IslandApp.entitlements Added applinks:island.is to com.apple.developer.associated-domains for Universal Links support.
apps/native/app/package.json Added dependency "expo-linking": "6.3.1" to enhance deep linking capabilities.
apps/native/app/src/hooks/use-deep-link-handling.ts Introduced a custom hook for managing deep links and notification responses, including useLastNotificationResponse and useDeepLinkHandling.
apps/native/app/src/index.tsx Removed setupNotifications import and call from startApp, indicating a change in notification handling strategy.
apps/native/app/src/lib/deep-linking.ts Renamed navigateToNotification to navigateToUniversalLink and added openBrowser parameter to enhance link handling capabilities. Updated URL mappings to include new paths.
apps/native/app/src/screens/home/home.tsx Added useDeepLinkHandling hook and reorganized imports, removing some and adding others related to licenses. Commented out handleInitialNotification function call.
apps/native/app/src/screens/notifications/notifications.tsx Updated navigation function from navigateToNotification to navigateToUniversalLink, allowing for external link handling. Added openBrowser parameter to enhance flexibility in notification responses.
apps/native/app/src/utils/lifecycle/setup-event-handlers.ts Removed console logging and URL handling logic for a more concise event handling approach.
apps/native/app/src/utils/lifecycle/setup-notifications.ts Removed file that handled notifications, including functions for processing notification responses and setting up notification listeners.
apps/native/app/android/app/src/prod/AndroidManifest.xml Added new intent filter for deep links associated with the domain "island.is", enabling automatic link verification and handling of specific URL paths.

Possibly related PRs

  • feat: Configure universal links for the test app #15963: The changes in this PR involve configuring universal links, which directly relates to the addition of the applinks:island.is entry in the main PR's IslandApp.entitlements file, enhancing the app's ability to handle specific URLs.

Recent review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between 3ea1200 and aa5dd2d.

Files selected for processing (10)
  • apps/native/app/android/app/src/prod/AndroidManifest.xml (1 hunks)
  • apps/native/app/ios/IslandApp/IslandApp.entitlements (1 hunks)
  • apps/native/app/package.json (1 hunks)
  • apps/native/app/src/hooks/use-deep-link-handling.ts (1 hunks)
  • apps/native/app/src/index.tsx (0 hunks)
  • apps/native/app/src/lib/deep-linking.ts (2 hunks)
  • apps/native/app/src/screens/home/home.tsx (3 hunks)
  • apps/native/app/src/screens/notifications/notifications.tsx (4 hunks)
  • apps/native/app/src/utils/lifecycle/setup-event-handlers.ts (0 hunks)
  • apps/native/app/src/utils/lifecycle/setup-notifications.ts (0 hunks)
Files not reviewed due to no reviewable changes (3)
  • apps/native/app/src/index.tsx
  • apps/native/app/src/utils/lifecycle/setup-event-handlers.ts
  • apps/native/app/src/utils/lifecycle/setup-notifications.ts
Files skipped from review due to trivial changes (1)
  • apps/native/app/src/hooks/use-deep-link-handling.ts
Files skipped from review as they are similar to previous changes (4)
  • apps/native/app/ios/IslandApp/IslandApp.entitlements
  • apps/native/app/package.json
  • apps/native/app/src/screens/home/home.tsx
  • apps/native/app/src/screens/notifications/notifications.tsx
Additional context used
Path-based instructions (2)
apps/native/app/android/app/src/prod/AndroidManifest.xml (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/src/lib/deep-linking.ts (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
Additional comments not posted (2)
apps/native/app/android/app/src/prod/AndroidManifest.xml (1)

29-40: LGTM!

The addition of the new intent filter with android:autoVerify="true" follows the Android best practices for handling deep links. The specified path prefixes cover the required URLs for the app to handle, enabling the app to open directly from the links without additional prompts.

The past review comments regarding the manual addition of path prefixes for Android and iOS, as well as the exclusion of /minarsidur/fjarmal, are still valid and applicable to the current code segment. These points should be kept in mind for future updates.

apps/native/app/src/lib/deep-linking.ts (1)

Line range hint 191-222: LGTM! The changes improve clarity and flexibility.

The renaming of the function from navigateToNotification to navigateToUniversalLink better reflects its broader scope of handling universal links, not just notification-related navigation.

The addition of the optional openBrowser parameter allows for customization of how links are opened in the browser, enhancing flexibility.

The core logic for finding a matching app route and navigating accordingly remains intact, with the fallback of opening the link in a browser if no match is found.


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

Share
Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    -- I pushed a fix in commit <commit_id>, please review it.
    -- Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    -- @coderabbitai generate unit testing code for this file.
    -- @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    -- @coderabbitai generate interesting stats about this repository and render them as a table.
    -- @coderabbitai read src/utils.ts and generate unit testing code.
    -- @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    -- @coderabbitai help me debug CodeRabbit configuration file.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@eirikurn eirikurn changed the title feat: Implement universal links feat(native-app): Implement universal links Sep 11, 2024
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Outside diff range and nitpick comments (1)
apps/native/app/src/lib/deep-linking.ts (1)

Line range hint 191-222: LGTM with a minor suggestion!

The navigateToUniversalLink function is well-structured and handles both cases of navigating within the app and opening external links in a browser. The addition of the openBrowser parameter allows for flexibility in how links are opened.

Consider adding a comment to explain the purpose of the ComponentRegistry.HomeScreen fallback when componentId is not provided. For example:

// If componentId is not provided, use the HomeScreen component as a fallback
openBrowser(link, componentId ?? ComponentRegistry.HomeScreen)
Review details

Configuration used: .coderabbit.yaml
Review profile: CHILL

Commits

Files that changed from the base of the PR and between b3af8c0 and 3ea1200.

Files ignored due to path filters (1)
  • yarn.lock is excluded by !**/yarn.lock, !**/*.lock
Files selected for processing (8)
  • apps/native/app/ios/IslandApp/IslandApp.entitlements (1 hunks)
  • apps/native/app/package.json (1 hunks)
  • apps/native/app/src/hooks/use-deep-link-handling.ts (1 hunks)
  • apps/native/app/src/index.tsx (2 hunks)
  • apps/native/app/src/lib/deep-linking.ts (2 hunks)
  • apps/native/app/src/screens/home/home.tsx (4 hunks)
  • apps/native/app/src/screens/notifications/notifications.tsx (4 hunks)
  • apps/native/app/src/utils/lifecycle/setup-event-handlers.ts (2 hunks)
Files skipped from review due to trivial changes (1)
  • apps/native/app/src/index.tsx
Additional context used
Path-based instructions (7)
apps/native/app/ios/IslandApp/IslandApp.entitlements (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/src/hooks/use-deep-link-handling.ts (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/package.json (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/src/utils/lifecycle/setup-event-handlers.ts (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/src/lib/deep-linking.ts (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/src/screens/notifications/notifications.tsx (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
apps/native/app/src/screens/home/home.tsx (1)

Pattern apps/**/*: "Confirm that the code adheres to the following:

  • NextJS best practices, including file structure, API routes, and static generation methods.
  • Efficient state management and server-side rendering techniques.
  • Optimal use of TypeScript for component and utility type safety."
Additional comments not posted (15)
apps/native/app/ios/IslandApp/IslandApp.entitlements (1)

10-10: LGTM!

The added applinks:island.is entry for the com.apple.developer.associated-domains key is correct and matches the expected format for supporting Universal Links.

apps/native/app/src/hooks/use-deep-link-handling.ts (2)

13-33: LGTM!

The custom hook useLastNotificationResponse is implemented correctly. It handles the initial notification and listens for new notifications using the Firebase messaging API. The state is managed using the useState and useEffect hooks, and the unsubscribe function is returned to clean up the listener when the component unmounts.


35-73: LGTM!

The custom hook useDeepLinkHandling is implemented correctly. It handles deep links and notifications by using the useURL hook from expo-linking to get the current URL and the useLastNotificationResponse hook to get the last notification response. The handleUrl function navigates to the universal link if the conditions are met, and the useEffect hooks handle the URL and notification changes. The hook also marks the notification as read using the markUserNotificationAsRead mutation if the notification was handled and has a notificationId.

The hook uses the useRef hook to store the last URL to avoid unnecessary navigation and the useCallback hook to memoize the handleUrl function and avoid unnecessary re-creation.

apps/native/app/package.json (1)

60-60: LGTM!

The addition of the expo-linking package with version 6.3.1 to the dependencies is approved. This change aligns with the PR objective of implementing universal links.

apps/native/app/src/utils/lifecycle/setup-event-handlers.ts (1)

Line range hint 1-160: LGTM!

The code changes in the setupEventHandlers function adhere to TypeScript best practices, use efficient state management techniques, and are well-organized and modular. The function uses external libraries and custom utility functions appropriately and handles errors effectively.

The code changes are approved.

apps/native/app/src/lib/deep-linking.ts (2)

189-190: LGTM!

The comment clearly explains the purpose and behavior of the navigateToUniversalLink function.


Line range hint 226-248: LGTM!

The changes to the urlMapping object are approved. The addition of the new entry for /minarsidur/postholf expands the app's navigation capabilities by allowing direct access to the /inbox screen.

apps/native/app/src/screens/notifications/notifications.tsx (3)

37-37: LGTM!

The change in the import statement is approved as it aligns with the shift towards supporting universal links for notifications.


48-48: LGTM!

The addition of the useBrowser hook is approved as it enables the application to open links externally in a browser, providing more flexibility in handling notification links.


152-164: LGTM!

The changes to the onNotificationPress callback function are approved as they enhance the notification handling logic, allowing for a more versatile approach to link navigation. The application can now either navigate within the app or open the link externally in a browser, improving the user experience.

apps/native/app/src/screens/home/home.tsx (5)

23-23: LGTM!

The code changes are approved.


25-28: LGTM!

The code changes are approved.


33-37: LGTM!

The code changes are approved.


49-53: LGTM!

The code changes are approved.


153-153: LGTM!

The code changes are approved.

- Only runs when the user is logged in and has passed the pin screen.
- Improves notification handling to support passkey browser.
Copy link

codecov bot commented Sep 11, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 36.71%. Comparing base (a88bbcf) to head (aa5dd2d).
Report is 1 commits behind head on main.

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main   #15961      +/-   ##
==========================================
- Coverage   36.81%   36.71%   -0.10%     
==========================================
  Files        6721     6721              
  Lines      137868   138286     +418     
  Branches    39195    39347     +152     
==========================================
+ Hits        50753    50777      +24     
- Misses      87115    87509     +394     
Flag Coverage Δ
air-discount-scheme-backend 54.07% <ø> (ø)
air-discount-scheme-web 0.00% <ø> (ø)
api 3.39% <ø> (ø)
api-catalogue-services 77.85% <ø> (ø)
api-domains-air-discount-scheme 36.85% <ø> (ø)
api-domains-assets 26.71% <ø> (ø)
api-domains-auth-admin 49.89% <ø> (ø)
api-domains-communications 40.42% <ø> (ø)
api-domains-criminal-record 47.77% <ø> (ø)
api-domains-driving-license 44.27% <ø> (ø)
api-domains-education 31.22% <ø> (ø)
api-domains-health-insurance 34.58% <ø> (ø)
api-domains-mortgage-certificate 35.73% <ø> (ø)
api-domains-payment-schedule 41.14% <ø> (ø)
application-api-files 57.46% <ø> (ø)
application-core 72.33% <ø> (ø)
application-system-api 41.67% <ø> (ø)
application-template-api-modules 23.47% <ø> (+0.01%) ⬆️
application-templates-accident-notification 22.26% <ø> (ø)
application-templates-car-recycling 3.12% <ø> (ø)
application-templates-criminal-record 26.96% <ø> (ø)
application-templates-driving-license 18.75% <ø> (ø)
application-templates-estate 12.55% <ø> (ø)
application-templates-example-payment 25.72% <ø> (ø)
application-templates-financial-aid 14.39% <ø> (ø)
application-templates-general-petition 23.95% <ø> (ø)
application-templates-health-insurance 26.88% <ø> (ø)
application-templates-inheritance-report 6.45% <ø> (ø)
application-templates-marriage-conditions 15.35% <ø> (ø)
application-templates-mortgage-certificate 44.15% <ø> (ø)
application-templates-parental-leave 29.31% <ø> (ø)
application-types 6.74% <ø> (ø)
application-ui-components 1.52% <ø> (ø)
application-ui-shell 21.74% <ø> (ø)
auth-admin-web 2.43% <ø> (ø)
auth-nest-tools 30.83% <ø> (ø)
auth-react 22.82% <ø> (ø)
auth-shared 75.00% <ø> (ø)
clients-charge-fjs-v2 24.11% <ø> (ø)
clients-driving-license 40.56% <ø> (ø)
clients-driving-license-book 43.85% <ø> (ø)
clients-financial-statements-inao 49.10% <ø> (ø)
clients-license-client 1.83% <ø> (ø)
clients-middlewares 72.83% <ø> (+0.08%) ⬆️
clients-regulations 42.54% <ø> (ø)
clients-rsk-company-registry 29.76% <ø> (ø)
clients-rsk-personal-tax-return 38.00% <ø> (ø)
clients-smartsolutions 12.77% <ø> (ø)
clients-syslumenn 49.75% <ø> (ø)
clients-zendesk 55.65% <ø> (ø)
cms 0.42% <ø> (ø)
cms-translations 39.57% <ø> (ø)
content-search-index-manager 95.65% <ø> (ø)
content-search-toolkit 8.50% <ø> (ø)
contentful-apps 5.76% <ø> (ø)
dokobit-signing 62.85% <ø> (ø)
download-service 44.55% <ø> (ø)
email-service 60.65% <ø> (ø)
feature-flags 90.69% <ø> (ø)
file-storage 53.01% <ø> (ø)
financial-aid-backend 56.52% <ø> (ø)
financial-aid-shared 19.03% <ø> (ø)
icelandic-names-registry-backend 54.64% <ø> (ø)
infra-nest-server 48.95% <ø> (ø)
infra-tracing 43.24% <ø> (ø)
island-ui-core 28.59% <ø> (ø)
judicial-system-api 19.35% <ø> (ø)
judicial-system-audit-trail 68.53% <ø> (ø)
judicial-system-backend 55.72% <ø> (ø)
judicial-system-formatters 79.83% <ø> (ø)
judicial-system-message 66.79% <ø> (ø)
judicial-system-message-handler 47.61% <ø> (ø)
judicial-system-scheduler 68.98% <ø> (ø)
judicial-system-types 48.34% <ø> (ø)
judicial-system-web 28.71% <ø> (ø)
license-api 42.84% <ø> (-0.08%) ⬇️
localization 10.15% <ø> (ø)
logging 48.43% <ø> (ø)
message-queue 68.50% <ø> (+0.78%) ⬆️
nest-audit 68.20% <ø> (ø)
nest-config 78.07% <ø> (ø)
nest-feature-flags 51.91% <ø> (ø)
nest-problem 46.48% <ø> (ø)
nest-sequelize 94.44% <ø> (ø)
nest-swagger 51.71% <ø> (ø)
nova-sms 62.18% <ø> (ø)
portals-admin-regulations-admin 1.96% <ø> (ø)
portals-core 16.14% <ø> (ø)
reference-backend 50.57% <ø> (ø)
regulations 16.78% <ø> (ø)
residence-history 85.00% <ø> (ø)
services-auth-admin-api 52.83% <ø> (ø)
services-auth-delegation-api 61.31% <ø> (ø)
services-auth-ids-api 54.05% <ø> (+0.01%) ⬆️
services-auth-personal-representative 47.98% <ø> (ø)
services-auth-personal-representative-public 43.86% <ø> (-0.05%) ⬇️
services-auth-public-api 51.81% <ø> (ø)
services-documents 61.26% <ø> (ø)
services-endorsements-api 54.98% <ø> (ø)
services-sessions 65.74% <ø> (ø)
services-university-gateway 48.51% <ø> (+0.11%) ⬆️
services-user-notification 47.61% <ø> (ø)
services-user-profile 62.18% <ø> (-0.08%) ⬇️
shared-components 27.65% <ø> (ø)
shared-form-fields 31.58% <ø> (ø)
shared-mocking 64.62% <ø> (ø)
shared-pii 92.85% <ø> (ø)
shared-problem 87.50% <ø> (ø)
shared-utils 29.26% <ø> (ø)
skilavottord-ws 24.34% <ø> (ø)
web 1.84% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

see 17 files with indirect coverage changes


Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update a88bbcf...aa5dd2d. Read the comment docs.

@datadog-island-is
Copy link

Datadog Report

All test runs a2714b8 🔗

101 Total Test Services: 0 Failed, 99 Passed
🔻 Test Sessions change in coverage: 2 decreased, 1 increased (+0.31%), 197 no change

Test Services
This report shows up to 10 services
Service Name Failed Known Flaky New Flaky Passed Skipped Total Time Code Coverage Change Test Service View
air-discount-scheme-backend 0 0 0 81 0 33.9s N/A Link
air-discount-scheme-web 0 0 0 2 0 8.14s N/A Link
api 0 0 0 4 0 3.25s N/A Link
api-catalogue-services 0 0 0 23 0 12.96s N/A Link
api-domains-air-discount-scheme 0 0 0 6 0 20.85s N/A Link
api-domains-assets 0 0 0 3 0 13.24s N/A Link
api-domains-auth-admin 0 0 0 18 0 14.52s 1 no change Link
api-domains-communications 0 0 0 5 0 31.77s N/A Link
api-domains-criminal-record 0 0 0 5 0 9.87s N/A Link
api-domains-driving-license 0 0 0 23 0 32.31s N/A Link

🔻 Code Coverage Decreases vs Default Branch (2)

  • services-auth-delegation-api - jest 60.03% (-0.26%) - Details
  • services-auth-personal-representative-public - jest 45.9% (-0.02%) - Details

Copy link
Member

@saevarma saevarma left a comment

Choose a reason for hiding this comment

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

Core files LGTM

Copy link
Contributor

@thoreyjona thoreyjona left a comment

Choose a reason for hiding this comment

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

Nice! I think it would be good to also get review from @snaerseljan, since he has done most of the work on these files that you are changing.
I did not test it, only read over the code 👀

Copy link
Member

@snaerseljan snaerseljan left a comment

Choose a reason for hiding this comment

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

LGTM! Nice work! Tested on Android and iOS?

@eirikurn
Copy link
Member Author

Tested on iOS. Didn't have an Android phone. Will test with internal testing.

@eirikurn eirikurn added the automerge Merge this PR as soon as all checks pass label Sep 16, 2024
@kodiakhq kodiakhq bot merged commit 46a5b69 into main Sep 16, 2024
259 checks passed
@kodiakhq kodiakhq bot deleted the app-universal-links branch September 16, 2024 10:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
automerge Merge this PR as soon as all checks pass
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants