• flutter 使用 url_launcher 唤起三方应用【转】


    简介

    最近在fluttergo的issue中看到一条信息.笔者去pub库中简单的查了一个这个库的使用方法, 这个库的文档延续了google简约的风格. 查阅了baidu. google后也没有发现什么有意义的文档. 除了将英文翻译转化成中文, 就没有直接伸手党可以用的东西. 所以笔者亲自进行尝试.

    求问flutter如何打开第三方app,,我想flutter一件打开淘宝app,但是我发现我,我无法打开,我通过搜索引擎拿到的方法都是 url_launcher这个插件,这个插件,好像无法打开淘宝,,,,我目前的做法是 拿到了 手机淘宝app在ios的app Store链接,用url_launcher打开这个链接, 然后会跳转到app Store,app store在一建打开淘宝,,但是安卓我就没辙了,,求大神们,提供一下 flutter如何一键打开淘宝app fluttergo issue

    文档

    大家可以自行参考官方文档: 简约的文档

    安装

    将包的信息添加到pubspec.yaml:

    dependencies:
      url_launcher: ^5.1.3
    
    

    使用

    使用方法比较简单, 只要为某个按钮增加点击事件, 调用launch即可

    import 'package:url_launcher/url_launcher.dart';
    ...
        _launchURL() async {
            const url = 'xxx'; // 这个xx就是唤起三方应用的重要因素
        
            if (await canLaunch(url)) { // 判断当前手机是否安装某app. 能否正常跳转
              await launch(url);
            } else {
              throw 'Could not launch $url';
            }
         }
        @override
        Widget build(BuildContext context) {
            ...
            RaisedButton(
              onPressed: _launchURL,
              child: Text("打开三方应用"),
            ),
            ...
        }
    
    

    注意

    在笔者按照官方的说明一步一步的调用的时候. 在点击按钮的时候模拟器竟然报错了. 报错的信息如下:

    Unhandled Exception: MissingPluginException(No implementation found for method launch on channel)

    这个错误显示的是Plugin的方法没有找到,也许是Plugin没有注册成功。 拿到这条消息的时候, 我们也是一脸蒙蔽的. 在尝试了以下二种方案后app成功运行

    1. flutter clean 然后 flutter run/build
    2. 杀掉 flutter run 然后 flutter run/build

    以上二个方案, 不知道是哪个解决的这个问题. 我是挨个做了一遍后成功运行.

    总结

    在flutter打开三方应用, 除了官方文档中举例外. 我们通常需要打开类似于 淘宝,支付宝, 微信, 京东等app, 打开这一类的app需要知道对应 app的url schema, 即可顺滑的打开三方app

    这里以taobao做举例, 淘宝的schema是 taobao:

    _launchURL() async {
        String url ="taobao://item.taobao.com/item.html?id=41700658839";
        if (await canLaunch(url)) { 
          await launch(url);
        } else {
          throw 'Could not launch $url';
        }
     }
    
    

    最后附上一个网上搜来schema的集合, 原文地址

    QQ: mqq:// 
    微信: weixin:// 
    京东: openapp.jdmoble:// 
    淘宝: taobao:// 
    美团: imeituan:// 
    点评: dianping:// 
    1号店: wccbyihaodian:// 
    支付宝: alipay:// 
    微博: sinaweibo:// 
    腾讯微博: TencentWeibo:// 
    weico微博: weico:// 
    知乎: zhihu:// 
    豆瓣fm: doubanradio:// 
    网易公开课: ntesopen:// 
    Chrome: googlechrome:// 
    QQ浏览器: mqqbrowser:// 
    uc浏览器: ucbrowser:// 
    搜狗浏览器: SogouMSE:// 
    百度地图: baidumap:// bdmap:// 
    优酷: youku:// 
    人人: renren:// 
    我查查: wcc:// 
    有道词典: yddictproapp:// 
    微盘: sinavdisk:// 
    名片全能王: camcard://
    
    

    项目地址

    更多:跳转QQ聊天会话和QQ群聊

      /// 吊起QQ
      /// [number]QQ号
      /// [isGroup]是否是群号,默认是,不是群号则直接跳转聊天
      void callQQ({int number = 12345678, bool isGroup = true}) async {
        String url = isGroup
            ? 'mqqapi://card/show_pslcard?src_type=internal&version=1&uin=${number ?? 0}&card_type=group&source=qrcode'
            : 'mqqwpa://im/chat?chat_type=wpa&uin=${number ?? 0}&version=1&src_type=web&web_src=oicqzone.com';
        if (await canLaunch(url)) {
          await launch(url);
        } else {
          print('不能访问');
        }
      }
    

    参考链接:
    https://juejin.im/post/6844903945047916558
    https://www.jianshu.com/p/8dc54ef6329c
    https://www.jianshu.com/p/821a759fa56e

  • 相关阅读:
    java实现第七届蓝桥杯平方圈怪
    Java三大器之过滤器(Filter)的工作原理和代码演示
    spring mvc 防止重复提交表单的两种方法,推荐第二种
    防止订单重复提交
    Swagger入门教程
    BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
    很认真的聊一聊程序员的自我修养
    JAVA利用反射映射JSON对象为JavaBean
    Eclipse导出JavaDoc(并解决中文乱码问题)
    Eclipse注释模板设置详解
  • 原文地址:https://www.cnblogs.com/KillBugMe/p/13601832.html
Copyright © 2020-2023  润新知