一、url_launcher插件
可支持iOS和Android,有个缺点就是Android不能指定包名,所以第一次打开会提示选择APP或者浏览器打开,存在歧义对话框,如下图:
注:歧义对话框存在的原因,应该是跳转时没有指定Android的packageName
歧义对话框.png
1.在pubspec.yaml文件添加下面依赖,然后运行flutter pub get
dependencies:
url_launcher: ^6.1.5
2.在dart文件引入头文件
import 'package:url_launcher/url_launcher.dart';
- 在需要打开外部APP的地方使用 ,会根据url判断在APP还是浏览器打开
if (!await launchUrl(
url,
mode: LaunchMode.externalApplication, //设置外部浏览器打开
)) {
throw 'Could not launch $url';
}
二、external_app_launcher插件
可支持iOS和Android,也可以跳转到App Store,有个缺点就是不能传入url,如果用户想跳到指定页面则无法成功,没有歧义对话框
1.在pubspec.yaml文件添加下面依赖,然后运行flutter pub get
dependencies:
external_app_launcher: ^3.1.0
2.在dart文件引入头文件
import 'package:external_app_launcher/external_app_launcher.dart';
- 在需要打开外部APP的地方使用
var openAppResult = await LaunchApp.openApp(
androidPackageName: 'com.XXX.app',
iosUrlScheme: 'XXXX://',
appStoreLink:
'itms-apps://itunes.apple.com/us/app/pulse-secure/id945832041',
// openStore: false
);
print(
'openAppResult => $openAppResult ${openAppResult.runtimeType}');
三、android_intent_plus插件,可以消除歧义对话框
只支持Android,既能指定packageName,也能传入url,可以跳转到指定APP的某个页面,不适用iOS
1.在pubspec.yaml文件添加下面依赖,然后运行flutter pub get
dependencies:
android_intent_plus: ^3.1.1+1
2.在dart文件引入头文件
import 'package:android_intent_plus/android_intent.dart';
- 在需要打开外部APP的地方使用 ,会根据url判断在APP还是浏览器打开
urls = “https:XXXXXXXXXXXXXXX”;
final intent = AndroidIntent(
action: 'action_view',
data: Uri.encodeFull(urls),
package: 'com.XXXX.app', //package Name
);
await intent.launch().catchError((e) {
throw 'Could not launch $e';
});
插件链接如下,可进行深层次研究:
https://pub.dev/packages/url_launcher/example
https://pub.flutter-io.cn/packages/external_app_launcher/example
https://pub.dev/packages/android_intent_plus/example