diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 18fd9dd8c..b6f7d9b33 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -66,6 +66,8 @@ + + diff --git a/lib/utils/link_parsers.dart b/lib/utils/link_parsers.dart index cbf77785d..823030032 100644 --- a/lib/utils/link_parsers.dart +++ b/lib/utils/link_parsers.dart @@ -10,27 +10,20 @@ abstract class LinkParser { static String generateSubShareLink(String url, [String? name]) { final uri = Uri.tryParse(url); if (uri == null) return ''; - return Uri( - scheme: 'hiddify', - host: 'install-sub', - queryParameters: { - "url": uri.toString(), - if (name != null) "name": name, - }, - ).toString(); + final modifiedUri = Uri( + scheme: uri.scheme, + host: uri.host, + path: uri.path, + query: uri.query, + fragment: name??uri.fragment, + ); + return 'hiddify://import/$modifiedUri'; + } // protocols schemas static const protocols = {'clash', 'clashmeta', 'sing-box', 'hiddify'}; - static const rawProtocols = { - 'ss', - 'vmess', - 'vless', - 'trojan', - 'tuic', - 'hysteria2', - 'ssh', - }; + static ProfileLink? parse(String link) { return simple(link) ?? deep(link); @@ -86,6 +79,10 @@ abstract class LinkParser { !queryParams.containsKey('url')) return null; return (url: queryParams['url']!, name: queryParams['name'] ?? ''); case 'hiddify': + if (uri.authority=="import") { + return (url: uri.path+(uri.hasQuery?"?${uri.query}":""), name: uri.fragment); + } + //for backward compatibility if ((uri.authority != 'install-config' && uri.authority != 'install-sub') || !queryParams.containsKey('url')) return null;