Skip to content

Conversation

@k-antipochkin
Copy link
Collaborator

@k-antipochkin k-antipochkin commented Nov 6, 2025

User description

https://mobius.visualstudio.com/Backstage/_workitems/edit/259630

Description of Changes

  • Added retry logic for deferred deep links when clipboard description is unavailable on first attempt
  • Removed redundant fingerprinting code

Breaking Changes

  • None

Release Checklist

Prepare:

  • [ ] Detail any breaking changes. Breaking changes require a new major version number, and a migration guide in wiki / README.md

Bump versions in:

  • CHANGELOG.md
  • gradle.properties
  • [ ] add links to newly created wiki pages to readme
  • [ ] Update major version numbers in wiki (basic integration + push guides)

Integration tests

T&T Only

  • Init SDK with only optimove credentials
  • Associate customer
  • Associate email
  • Track events

Mobile Only

  • Init SDK with all credentials
  • Track events
  • Associate customer (verify both backends)
  • Register for push
  • Opt-in for In-App
  • Send test push
  • Send test In-App
  • Receive / trigger deep link handler (In-App/Push)
  • Receive / trigger the content extension, render image and action buttons for push
  • Verify push opened handler

Deferred Deep Links

  • With app installed, trigger deep link handler
  • With app uninstalled, follow deep link, install test bundle, verify deep link read from Clipboard, trigger deep link handler

Combined

  • Track event for T&T, verify push received
  • Trigger scheduled campaign, verify push received
  • Trigger scheduled campaign, verify In-App received

Release Procedure

  • Squash and merge dev to master
  • Delete branch once merged



Generated description

Below is a concise technical summary of the changes proposed in this PR:

graph LR
    subgraph "app" ["app"]
    MainActivity_onCreate_("MainActivity.onCreate"):::modified
    OPTIMOVE_("OPTIMOVE"):::modified
    MyDeferredDeepLinkHandler_handle_("MyDeferredDeepLinkHandler.handle"):::modified
    MyApplication_onCreate_("MyApplication.onCreate"):::modified
    MainActivity_onCreate_ -- "No change to seeIntent call behavior." --> OPTIMOVE_
    MainActivity_onCreate_ -- "Added pushRequestDeviceToken call to request permission." --> OPTIMOVE_
    MyDeferredDeepLinkHandler_handle_ -- "Added Toast to display deferred deep link data." --> OPTIMOVE_
    MyApplication_onCreate_ -- "Removed pushRequestDeviceToken call from onCreate." --> OPTIMOVE_
    classDef added stroke:#15AA7A
    classDef removed stroke:#CD5270
    classDef modified stroke:#EDAC4C
    linkStyle default stroke:#CBD5E1,font-size:13px
    end
    subgraph "optimove-sdk" ["optimove-sdk"]
    DeferredDeepLinkHelper_checkForNonContinuationLinkMatch_("DeferredDeepLinkHelper.checkForNonContinuationLinkMatch"):::modified
    DeferredDeepLinkHelper_checkForDeferredLinkOnClipboard_("DeferredDeepLinkHelper.checkForDeferredLinkOnClipboard"):::added
    DeferredDeepLinkHelper_checkForDeferredLinkOnClipboardWithRetry_("DeferredDeepLinkHelper.checkForDeferredLinkOnClipboardWithRetry"):::added
    DeferredDeepLinkHelper_getClipText_("DeferredDeepLinkHelper.getClipText"):::modified
    DeferredDeepLinkHelper_maybeProcessUrl_("DeferredDeepLinkHelper.maybeProcessUrl"):::modified
    DeferredDeepLinkHelper_maybeProcessCachedLink_("DeferredDeepLinkHelper.maybeProcessCachedLink"):::modified
    DeferredDeepLinkHelper_handleDeepLink_("DeferredDeepLinkHelper.handleDeepLink"):::modified
    DeferredDeepLinkHelper_invokeDeepLinkHandler_("DeferredDeepLinkHelper.invokeDeepLinkHandler"):::modified
    Optimobile_handler_("Optimobile.handler"):::added
    DeferredDeepLinkHelper_checkForNonContinuationLinkMatch_ -- "Adds clipboard deferred deep link checking call" --> DeferredDeepLinkHelper_checkForDeferredLinkOnClipboard_
    DeferredDeepLinkHelper_checkForDeferredLinkOnClipboard_ -- "Introduces retry logic for clipboard deferred deep link checking" --> DeferredDeepLinkHelper_checkForDeferredLinkOnClipboardWithRetry_
    DeferredDeepLinkHelper_checkForDeferredLinkOnClipboardWithRetry_ -- "Retrieves clipboard text with retry and classification check" --> DeferredDeepLinkHelper_getClipText_
    DeferredDeepLinkHelper_checkForDeferredLinkOnClipboardWithRetry_ -- "Processes clipboard URL text as deferred deep link" --> DeferredDeepLinkHelper_maybeProcessUrl_
    DeferredDeepLinkHelper_maybeProcessCachedLink_ -- "Handles cached deferred deep link URLs" --> DeferredDeepLinkHelper_handleDeepLink_
    DeferredDeepLinkHelper_invokeDeepLinkHandler_ -- "Posts deep link handling asynchronously via Optimobile.handler" --> Optimobile_handler_
    classDef added stroke:#15AA7A
    classDef removed stroke:#CD5270
    classDef modified stroke:#EDAC4C
    linkStyle default stroke:#CBD5E1,font-size:13px
    end
Loading

Implement robust retry logic within the DeferredDeepLinkHelper to enhance the reliability of deferred deep link resolution, specifically addressing scenarios where clipboard descriptions are initially unavailable on Android 12+ devices. Concurrently, remove the DeepLinkFingerprinter component and its associated code, streamlining the SDK and eliminating redundant fingerprinting functionality.

TopicDetails
DDL Retry Logic Enhance the deferred deep link mechanism by introducing a retry logic for clipboard access, particularly for Android 12+ devices where ClipDescription might not be immediately available. This ensures that deep links are processed reliably even with initial clipboard access delays. The sample application is updated to demonstrate deep link handling.
Modified files (4)
  • OptimoveSDK/optimove-sdk/src/main/java/com/optimove/android/optimobile/DeferredDeepLinkHelper.java
  • OptimoveSDK/gradle.properties
  • OptimoveSDK/app/src/main/java/com/optimove/android/optimovemobilesdk/MyDeferredDeepLinkHandler.java
  • CHANGELOG.md
Latest Contributors(2)
UserCommitDate
david_ho@optimove.comAB-262140-updated-sdk-...October 13, 2025
konstantin_a@optimove.comAdded-the-interception...September 30, 2025
Remove Fingerprinting Remove the DeepLinkFingerprinter class and all related fingerprinting code from the SDK. This change simplifies the codebase, removes an unnecessary dependency, and aligns with privacy considerations by eliminating the collection of device fingerprint data for deep link matching. The SDK version is updated to reflect these significant changes.
Modified files (6)
  • OptimoveSDK/app/src/main/java/com/optimove/android/optimovemobilesdk/MainActivity.java
  • OptimoveSDK/optimove-sdk/src/main/java/com/optimove/android/optimobile/DeferredDeepLinkHelper.java
  • OptimoveSDK/optimove-sdk/src/main/java/com/optimove/android/optimobile/DeepLinkFingerprinter.java
  • OptimoveSDK/gradle.properties
  • OptimoveSDK/app/src/main/java/com/optimove/android/optimovemobilesdk/MyApplication.java
  • CHANGELOG.md
Latest Contributors(2)
UserCommitDate
david_ho@optimove.comAB-262140-updated-sdk-...October 13, 2025
konstantin_a@optimove.comAdded-the-interception...September 30, 2025
This pull request is reviewed by Baz. Review like a pro on (Baz).

@k-antipochkin k-antipochkin marked this pull request as ready for review November 6, 2025 15:20
kris-opti
kris-opti previously approved these changes Nov 7, 2025
@k-antipochkin k-antipochkin merged commit 2a6b922 into master Nov 7, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants