🍵адрес проекта
Роль схемы URL
Введение в схему iOS
Все мы знаем, что APP в мобильном телефоне Apple имеет песочницу, а APP — это информационный остров, который не может общаться друг с другом. Но приложения iOS могут регистрировать собственную схему URL-адресов, которая предназначена для облегчения взаимных вызовов между приложениями. Мы можем открыть приложение через системный OpenURL и передать некоторые параметры.
Например, если вы введете www.alipay.com в Safari, вы сможете напрямую открыть приложение Alipay при условии, что Alipay установлен на вашем мобильном телефоне. Если у вас не установлен Alipay, должен отобразиться интерфейс загрузки Alipay.Нажав на него, вы перейдете к интерфейсу загрузки Alipay в AppStore.
Схема URL-адресов должна иметь возможность однозначно идентифицировать приложение. Если установленная вами схема URL-адресов конфликтует со схемой URL-адресов других приложений, ваше приложение может быть не активировано. Потому что, когда ваше приложение установлено, ваша схема URL-адресов была зарегистрирована в системе.
В обычных условиях будет вызвано приложение, которое было установлено первым. Но URL-схема системного приложения iOS, безусловно, самая высокая. Поэтому, когда мы определяем схему URL-адресов, старайтесь избегать схемы URL-адресов, которая была определена системным приложением.
Введение в схему Android
Схема в андроиде — протокол внутристраничного перехода;
Определив свой собственный протокол схемы, вы можете легко переходить на различные страницы в приложении;
С помощью протокола схемы сервер можно настроить так, чтобы приложение переходило на внутреннюю страницу приложения.
использоватьuni_linksбиблиотека
1 ,pubspec.yaml
файл добавить зависимость
dependencies:
uni_links: 0.4.0
2. Установка
flutter pub get
Running "flutter pub get" in dynamic_theme... 5.8s
Process finished with exit code 0
3. Используйте плагины в коде Dart
import 'package:uni_links/uni_links.dart';
Конфигурация Android
⚠️Примечание: именование схем не поддерживается.dynamic_theme
существуетiOS
Я проверил это и не мог открыть это, изменил его на все строчные буквыdynamictheme
android/app/src/main/AndroidManifest.xml
Добавьте следующий кодПосмотреть полный код
<!-- Deep Links -->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->
<data
android:scheme="[YOUR_SCHEME]"
android:host="[YOUR_HOST]" />
</intent-filter>
пример:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="dynamictheme"/>
<data
android:host="detail"
android:scheme="dynamictheme"/>
</intent-filter>
конфигурация iOS
ОткрытьXcode->Info->URL Types
настраиватьURL Scheme
После добавления это также будет напрямую отражено в конфигурационном файле.info.plist
Конечно, если вы чувствуете, что вы очень сильны, вы также можете напрямуюinfo.plist
Добавить к.
ios/Runner/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<!-- 其它配置 -->
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>dynamictheme</string>
</array>
</dict>
</array>
...
<!-- 其它配置 -->
</dict>
</plist>
Код дротика
Реализовать переход на страницу в разных состояниях
Future<void> initPlatformStateForStringUniLinks() async {
String initialLink;
// App未打开的状态在这个地方捕获scheme
try {
initialLink = await getInitialLink();
print('initial link: $initialLink');
if (initialLink != null) {
print('initialLink--$initialLink');
// 跳转到指定页面
schemeJump(context, initialLink);
}
} on PlatformException {
initialLink = 'Failed to get initial link.';
} on FormatException {
initialLink = 'Failed to parse the initial link as Uri.';
}
// App打开的状态监听scheme
_sub = getLinksStream().listen((String link) {
if (!mounted || link == null) return;
print('link--$link');
// 跳转到指定页面
schemeJump(context, link);
}, onError: (Object err) {
if (!mounted) return;
});
}
Разобрать страницу перехода схемы
я настроилscheme
даdynamictheme://
используетDeep Link
, вы также можете настроить какhttp://www.xx.com
а такжеhttps://www.xx.com
ЭтоApp Links
.
final Uri _jumpUri = Uri.parse(schemeUrl.replaceFirst(
'dynamictheme://',
'http://path/',
));
switch (_jumpUri.path) {
case '/detail':
Navigator.of(context).pushNamed(
Detail.routeName,
arguments: Detail(value: _jumpUri.queryParameters['name'] ?? '详情'),
);
break;
default:
break;
}
Scheme тестовый адрес
нужно тестить передУстановить APK(В настоящее время можно загрузить только Android APK, а iOS должна получить код и упаковать его самостоятельно).
<a href="dynamictheme://"> 打开App(dynamictheme://) </a>
<a href="dynamictheme://detail"> 打开App跳转到详情页面 </a>
<a href="dynamictheme://detail?name=flutter"> 打开App跳转到详情页面带上参数 </a>