fromReferrerPayload static method
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;
}
}