mapToUlink static method

Map<String, dynamic> mapToUlink(
  1. Map<String, dynamic> fdl, {
  2. required String domain,
  3. int index = 0,
  4. String? slug,
})

Map a canonical FDL link to a ULink link definition.

Implementation

static Map<String, dynamic> mapToUlink(
  Map<String, dynamic> fdl, {
  required String domain,
  int index = 0,
  String? slug,
}) {
  final android = _m(fdl['androidInfo']);
  final ios = _m(fdl['iosInfo']);
  final nav = _m(fdl['navigationInfo']);
  final analytics = _m(fdl['analyticsInfo']);
  final gpa = _m(analytics['googlePlayAnalytics']);
  final itc = _m(analytics['itunesConnectAnalytics']);
  final social = _m(fdl['socialMetaTagInfo']);

  final routing = clean({
    'android': clean({
      'packageName': android['androidPackageName'],
      'fallbackUrl': android['androidFallbackLink'],
      'minVersion': android['androidMinPackageVersionCode'],
    }),
    'ios': clean({
      'bundleId': ios['iosBundleId'],
      'appStoreId': ios['iosAppStoreId'],
      'fallbackUrl': ios['iosFallbackLink'],
      'customScheme': ios['iosCustomScheme'],
      'minVersion': ios['iosMinimumVersion'],
      'ipad': clean({
        'bundleId': ios['iosIpadBundleId'],
        'fallbackUrl': ios['iosIpadFallbackLink'],
      }),
    }),
    'desktop': clean({
      // FDL `ofl` is the cross-platform (desktop/web) fallback.
      'fallbackUrl': fdl['otherFallbackLink'],
    }),
    // FDL `efr=1` / enableForcedRedirect skips the app-preview interstitial.
    'forceRedirect':
        nav['enableForcedRedirect'] == true || nav['enableForcedRedirect'] == '1',
  });

  final attribution = clean({
    'utm': clean({
      'source': gpa['utmSource'],
      'medium': gpa['utmMedium'],
      'campaign': gpa['utmCampaign'],
      'term': gpa['utmTerm'],
      'content': gpa['utmContent'],
    }),
    'gclid': gpa['gclid'],
    'itunes': clean({
      'at': itc['at'], // affiliate token
      'ct': itc['ct'], // campaign token
      'mt': itc['mt'], // media type
      'pt': itc['pt'], // provider token
    }),
  });

  return clean({
    'slug': slug ?? deriveSlug(fdl, index),
    'domain': domain,
    'destination': fdl['link'],
    'routing': routing,
    'social': clean({
      'title': social['socialTitle'],
      'description': social['socialDescription'],
      'imageUrl': social['socialImageLink'],
    }),
    'attribution': attribution,
    'source': clean({
      'provider': 'firebase-dynamic-links',
      'originalShortLink': fdl['shortLink'],
      'originalDomainUriPrefix': fdl['domainUriPrefix'],
    }),
  });
}