dynalink_flutter 0.0.18 copy "dynalink_flutter: ^0.0.18" to clipboard
dynalink_flutter: ^0.0.18 copied to clipboard

Flutter plugin for Dynalink

0.0.18 #

  • Fix — Android App Links / iOS Universal Links returned no actualUrl. When the OS opens the app directly on a verified https://{prefix}.dynalink.app/{code} link, the fingerprint page never runs, so the SDK resolves the link through GET /api/links/{code} (Case A). That response is the raw DB row, where fallback_url, social_title, social_description, social_image and the campaign fields are nullable — LinkDetails.fromJson threw on the null, the error was swallowed, and no DynalinkEvent was ever emitted. Parsing is now null-tolerant.
  • API errors in DynalinkRemoteService are logged instead of silently swallowed.
  • _extractIdentifier ignores empty path segments (trailing slash URLs).
  • Clicks are now counted on the App Link / Universal Link path. The SDK calls the new POST /api/links/{code}/click (with the same fingerprint string the web loading page computes) so clicked_count, unique visitors and geo enrichment stay correct when the OS opens the app without going through the browser.
  • Custom domain support in link handling. The old host.contains('dynalink.app') filter dropped every link served from a custom domain — and matched lookalike hosts. Replaced by LinkDomains: exact domain/subdomain match on dynalink.app, on the domains passed to the new initialize(customDomains: [...]) parameter, on the domains returned by GET /api/projects/link-domains (resolved once, lazily), and on any URL carrying dyna_code / actual_url.

0.0.17 #

  • prioritize attribution API data for UTM parameters

0.0.14 #

  • Added fallback for clickids when the app open directly

0.0.13 #

New features #

  • Attribution API — new AttributionResult model and two public methods:
    • getAttributionByFingerprint(fingerprint) — query attribution by device fingerprint
    • getAttributionByCode(code) — query attribution by DynaLink short code
  • Click ID supportDynalinkEvent now carries all major ad-network click IDs captured during the pre-install browser session: gclid, gbraid (Google Ads), fbclid + fbclidCapturedAt (Meta), ttclid (TikTok), twclid (X/Twitter), liFatId (LinkedIn)
  • Persisted click ID gettersgetLastGclid(), getLastGbraid(), getLastFbclid(), getLastTtclid(), getLastTwclid(), getLastLiFatId() read the most recent values from SharedPreferences, available even if the stream listener was not active at attribution time
  • attributedAt timestamp on DynalinkEvent and AttributionResult indicating when the backend confirmed the install match

Improvements #

  • iOS fingerprint flow now calls the attribution API after markAsProcessed to populate click IDs on the emitted event
  • Deep link (Case A) flow now calls the attribution API after fetching link details by code
  • SharedPreferences keys are namespaced with dynalink_ prefix to avoid collision with app keys
  • CreateDynalinkForm and AttributionResult are now exported from the top-level dynalink_flutter.dart

0.0.12 #

  • Updated dependencies

0.0.11 #

  • Try to read link from clipboard on ios

0.0.10 #

  • Handle install referrer only once

0.0.9 #

  • Bug fixes

0.0.8 #

  • Fixed dyna_code parsing

0.0.7 #

  • Bumped rxdrat to 0.28.0

0.0.6 #

  • Bug fixes
  • Introduced is_deeplink field in CreateDynalinkForm to indicate if the link is a deep link or not

0.0.5 #

  • Migrated from StreamController to BehaviorSubject, so that previous emitted link is triggered when the app launches

0.0.4 #

  • Bug fixes

0.0.3 #

Breaking Changes: #

  • Changed the way plugin is initialized, you should now pass credentials when initializing Dynalink:

    await Dynalink.initialize(
        publicKey: credentials['public_key']!,
        projectId: credentials['project_id']!,
    ); 
    
  • Dynalink now uses instance to access methods:

    Dynalink.instance.dynamicLinkStream
    

0.0.2 #

  • updated example

0.0.1 #

  • initial release.