fromReferrerPayload static method

SmartLinkData? fromReferrerPayload(
  1. String payload
)

Decodes a deferred install referrer payload (Base64 JSON or plain JSON).

Implementation

static SmartLinkData? fromReferrerPayload(String payload) {
  if (payload.trim().isEmpty) return null;

  try {
    Map<String, dynamic>? json;

    final trimmed = payload.trim();
    if (trimmed.startsWith('{')) {
      json = jsonDecode(trimmed) as Map<String, dynamic>?;
    } else {
      final decoded = utf8.decode(base64Url.decode(_padBase64(trimmed)));
      json = jsonDecode(decoded) as Map<String, dynamic>?;
    }

    if (json == null) return null;

    final path = json['path'] as String? ?? '/';
    final params = json['params'];
    final queryParams = params is Map
        ? params.map((k, v) => MapEntry(k.toString(), v.toString()))
        : <String, String>{};

    final uri = Uri(
      scheme: 'smartlink',
      host: 'deferred',
      path: path.startsWith('/') ? path : '/$path',
      queryParameters: queryParams.isEmpty ? null : queryParams,
    );

    return SmartLinkData(
      uri: uri,
      path: path.startsWith('/') ? path : '/$path',
      queryParams: Map<String, String>.from(queryParams),
      isDeferred: true,
      source: SmartLinkSource.deferredInstall,
      timestamp: json['timestamp'] != null
          ? DateTime.fromMillisecondsSinceEpoch(
              (json['timestamp'] as num).toInt(),
              isUtc: true,
            ).toLocal()
          : null,
    );
  } catch (_) {
    return null;
  }
}