Flutter 应用间跳转应用,实现唤起第三方App

这篇具有很好参考价值的文章主要介绍了Flutter 应用间跳转应用,实现唤起第三方App。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flutter 应用间跳转应用,实现唤起第三方App



前言

最近因为工作需求,做了应用间跳转应用,因为是一个flutter新手,所以在工作之余随便总结记录一下。


一、应用间跳转应用场景

1.使用第三方用户登录,跳转到需授权的App。如QQ登录,微信登录等。需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名、密码"。
2.应用程序推广,跳转到另一个应用程序(本机已经安装),或者跳转到iTunes并显示应用程序下载页面(本机没有安装)。
3.第三方支付,跳转到第三方支付App,如支付宝支付,微信支付。
4.内容分享,跳转到分享App的对应页面,如分享给微信好友、分享给微信朋友圈、分享到微博。
5.显示位置、地图导航,跳转到地图应用。
6.使用系统内置程序,跳转到打电话、发短信、发邮件、Safari打开网页等内置App中。

等等

二、配置URL Scheme

跳转应用的实现,需要使用 uni_links 第三方库来协助完成外部页面的 Scheme(在想要跳转到的应用中引入uni_links库,并配置Scheme)

Android 配置

安卓支持两种app links 和deep links.
app links需要是scheme需要指定https,并且要增加hosts文件assetlinks.json,还需要服务端配合。
deep links可以自定义scheme,也不要服务端的验证.

在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>

  <!-- App Links -->
  <intent-filter android:autoVerify="true">
    <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 https://YOUR_HOST -->
    <data
      android:scheme="https"
      android:host="[YOUR_HOST]" />
  </intent-filter>
</activity>

ios配置

ios也支持两种,“Universal Links” 和 “Custom URL schemes”,两个功能和android类似。

Universal Link需要在ios/Runner/Runner.entitlements添加一个com.apple.developer.associated-domains环境,

<?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>
  <!-- ... other keys -->
  <key>com.apple.developer.associated-domains</key>
  <array>
    <string>applinks:[YOUR_HOST]</string>
  </array>
  <!-- ... other keys -->
</dict>
</plist>

Custom URL schemes在Info.plist中添加

<key>CFBundleURLTypes</key>
	<array>
		<dict>
			<key>CFBundleTypeRole</key>
			<string>Editor</string>
			<key>CFBundleURLName</key>
			<string>Two You</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>tyfapp</string>
			</array>
		</dict>
	</array>

提示:当需要被拉起的 App 没有被安装时,这个链接就不会生效;

uni_links使用

它可以帮助我们帮助我们获取进入的链接,它有两个方法供我们使用。一个是获取初始链接,另一个是监听。
初始链接方法:

   Future<void> _handleInitialUri() async {
    // In this example app this is an almost useless guard, but it is here to
    // show we are not going to call getInitialUri multiple times, even if this
    // was a weidget that will be disposed of (ex. a navigation route change).
    if (!_initialUriIsHandled) {
      _initialUriIsHandled = true;
      _showSnackBar('_handleInitialUri called');
      try {
        final uri = await getInitialUri();
        if (uri == null) {
          print('no initial uri');
        } else {
          print('got initial uri: $uri');
        }
        if (!mounted) return;
        setState(() => _initialUri = uri);
      } on PlatformException {
        // Platform messages may fail but we ignore the exception
        print('falied to get initial uri');
      } on FormatException catch (err) {
        if (!mounted) return;
        print('malformed initial uri');
        setState(() => _err = err);
      }
    }
  }

监听链接变化:

void _handleIncomingLinks() {
    if (!kIsWeb) {
      // It will handle app links while the app is already started - be it in
      // the foreground or in the background.
      _sub = uriLinkStream.listen((Uri? uri) {
        if (!mounted) return;
        print('got uri: $uri');
        setState(() {
          _latestUri = uri;
          _err = null;
        });
      }, onError: (Object err) {
        if (!mounted) return;
        print('got err: $err');
        setState(() {
          _latestUri = null;
          if (err is FormatException) {
            _err = err;
          } else {
            _err = null;
          }
        });
      });
    }
  }

销毁监听:

@override
  void dispose() {
    _sub?.cancel();
    super.dispose();
  }

三、实现跳转

上面我们配置好了android和ios,现在只需要我们通过我们配置的deeplink来打开跳转App了。

1.引入库

url_launcher: ^6.1.8

2. 跳转

打开浏览器

const url = 'https://flutter.io';
 if (await canLaunch(url)) {
      await launch(url);
 } else {
      throw 'Could not launch $url';
 }

打开外部APP

代码如下(示例):

final Uri launch = Uri.parse('tyfapp://');
bool isInstall = await canLaunchUrl(launch);
 if(isInstall){
   print('已安装,跳转app');
   await launchUrl(launch);
 }else{
   print('未安装,做出提示或者到下载页面');
 }

提示:ios跳转到App Store可通过这样实现:

final url = "https://itunes.apple.com/cn/app/id1380512641"; // id 后面的数字换成自己的应用 id 就行了
launchUrlString(url);

H5跳转App

第一种

window.location = 'wechat://';

第二种

<a href="wechat://"></a>const a = document.createElement('a')
a.href = "wechat://";
document.body.appendChild(a);
a.click();

四、结尾

这样就完成了打开第三方app了,我只是随便简单记录了一下,后续继续完善补充。文章来源地址https://www.toymoban.com/news/detail-744490.html

到了这里,关于Flutter 应用间跳转应用,实现唤起第三方App的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • webview跳转第三方小程序

    场景,uni-app实现的微信小程序嵌套webview(h5页面),从webview跳转到第三方小程序 问题: 一、webview不可以直接跳转到第三方小程序(navigateToMiniProgram) 二、首次通过webview点击跳转到第三方小程序,出现弹窗即将打开\\\"XXX\\\"小程序,点击允许跳转到第三方小程序,然后从第三方返

    2024年02月12日
    浏览(27)
  • flutter-第三方组件

    卡片折叠 stacked_card_carousel  扫一扫组件 qr_code_scanner  权限处理组件 permission_handler 生成二维码组件 pretty_qr_code  角标组件 badges 动画组件 animations app更新  app_installer 带缓存的图片组件 cached_network_image 密码输入框 collection 图片保存 image_gallery_saver 自定义滑块 image_gal

    2024年02月13日
    浏览(32)
  • 微信小程序跳转第三方页面

    使用web-view,官方说明web-view 承载网页的容器。会自动铺满整个小程序页面, 个人类型的小程序暂不支持使用 具体实现思路: 1、首先需要配置小程序的公众平台当中的开发管理选项的业务域名,具体看官方指引 2、在小程序当中新建一个页面文件来单独存放web-view组件,sr

    2024年02月11日
    浏览(38)
  • vscode 无法跳转第三方安装包

    场景:使用 vscode 写代码时, 第三方的安装包无法使用 ctrl + 左键 ,点击进入查看, 不方便源码查看 解决办法: 使用快捷键 Ctrl + Shift + P , 进入命令搜索框 搜索 setting.json 编辑 setting.json 文件, 下边的两个值配置自己的 python 环境地址 重启 vscode , 可发现可以跳转第三方包

    2024年02月11日
    浏览(32)
  • Flutter 第三方 flutter_screenutil(屏幕适配)

    推荐一篇写的非常不过的文章:Flutter应用框架搭建(二)屏幕适配 iPhone 12 mini 初始化 - 设置参考尺寸1 ScreenUtilInit 初始化 - 设置方式2 ScreenUtil.init 可以在每个页面设置 使用这种方式只需在使用 flutter_screenutil 前进行初始化即可,一般放在根路由即第一个页面加载的时候进行初始化

    2024年02月19日
    浏览(23)
  • Flutter:第三方常用库整理

    随着Flutter的不断学习,接触了不少第三方的库。因此打算进行简单的整理。 简介 一个强大的Dart/FlutterHTTP客户端,支持全局配置, 拦截器、表单数据、请求取消、文件上传/下载、 超时和自定义适配器等。 官方地址 https://pub-web.flutter-io.cn/packages/dio 简单使用 flutter:网络请求

    2024年02月16日
    浏览(32)
  • 微信小程序跳转第三方H5的方法

    使用web-view标签进行跳转 首先建立一个新的页面,这个页面就是为了第三方H5页面准备的。 在index.wxml中,写以下代码 在index.js中,写一下代码 在需要点击跳转第三方页面的地方,js文件中用以下代码实现跳转 以上代码就实现了跳转第三方链接/H5页面 项目中大部分时候,需要

    2024年02月11日
    浏览(40)
  • 微信小程序使用nginx跳转第三方url

    先在微信公众平台配置号域名   服务器域名和业务域名都配置好 然后微信小程序使用 web-view标签进行跳转 nginx配置:域名必须有ssl证书,不然还是访问不了 sub_filter如果nginx没装的话需要装一下 首先需要git安装 ngx_http_substitutions_filter_module git没安装:yum -y install git 安装了:

    2024年02月10日
    浏览(34)
  • 微信小程序获取当前位置与跳转第三方地图

    1. 先在app.json添加配置 2. 获取定位权限,打开地址选点 3. 如果要打开跳转第三方地图的内置地图

    2024年02月15日
    浏览(41)
  • 小程序开发webview组件不跳转第三方网页的问题

    最近开发小程序,想要跳转第三方的网页,使用webview组件,src属性可以直接给到域名,然后进行跳转,但是这个组件对个人类型的小程序时不支持的,开发环境下,不校验合法域名的选项勾选后,是可以进行跳转的,包括真机调试也是没问题的,但是在生产环境上线后就不行

    2024年02月13日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包