首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从iOS上的颤音应用打开youtube应用程序

从iOS上的颤音应用打开youtube应用程序
EN

Stack Overflow用户
提问于 2019-05-02 12:16:05
回答 3查看 11K关注 0票数 9

我基本上是想打开一个特定的youtube视频从我的应用,当一个按钮被按下。如果youtube应用程序安装在用户的设备上,那么视频应该在youtube应用程序中打开(而不是在浏览器或单独的user视图中)。

我使用了url_launcher软件包,它在安卓系统上运行得很好。然而,在iOS上,youtube应用程序即使安装了也不会打开,而是打开一个单独的网页窗口,其中相应的youtube url显示为一个网页。

我想,我可以推翻这样的行为:

代码语言:javascript
运行
复制
_launchURL() async {
  if (Platform.isIOS) {
    if (await canLaunch('youtube://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw')) {
      await launch('youtube://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw');
    } else {
      if (await canLaunch('https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw')) {
        await launch('https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw');
      } else {
        throw 'Could not launch https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw';
      }
    }
  } else {
    const url = 'https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw';
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }
}

但没起作用。如果您想知道,我使用以下导入:

代码语言:javascript
运行
复制
import 'dart:io' show Platform;
import 'package:url_launcher/url_launcher.dart';

我很确定,youtube:// URL-Scheme可以工作(启动YouTube应用程序),因为我在第三方应用程序(launches和Pythonista)上测试了它。

最后一件我无法测试的事情是,Platform.isIOS在我的IPhone上是否真的是真的。

有没有一种工作方式,从颤振中打开YouTube应用?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-03 20:09:14

我修好了。我不得不设置forceSafariVC: false,因为它在默认情况下是正确的,这将导致在应用程序内部的某种set视图中打开url。

代码语言:javascript
运行
复制
_launchURL() async {
  if (Platform.isIOS) {
    if (await canLaunch('youtube://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw')) {
      await launch('youtube://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw', forceSafariVC: false);
    } else {
      if (await canLaunch('https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw')) {
        await launch('https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw');
      } else {
        throw 'Could not launch https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw';
      }
    }
  } else {
    const url = 'https://www.youtube.com/channel/UCwXdFgeE9KYzlDdR7TG9cMw';
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
}

这实际上是在url_launcher文档中记录的,但有些隐藏.

票数 16
EN

Stack Overflow用户

发布于 2020-10-17 00:04:22

你不必有所有的if/else条款。需要考虑的最重要的事情是,设备是否有YouTube应用程序,而不管as是什么(记住将您的功能定义为未来,因为异步):

代码语言:javascript
运行
复制
Future<void> _launchYoutubeVideo(String _youtubeUrl) async {
if (_youtubeUrl != null && _youtubeUrl.isNotEmpty) {
  if (await canLaunch(_youtubeUrl)) {
    final bool _nativeAppLaunchSucceeded = await launch(
      _youtubeUrl,
      forceSafariVC: false,
      universalLinksOnly: true,
    );
    if (!_nativeAppLaunchSucceeded) {
      await launch(_youtubeUrl, forceSafariVC: true);
    }
  }
 }
}

这里要突出显示的是避免几个if/设置为true的属性universalLinksOnly。

票数 5
EN

Stack Overflow用户

发布于 2022-03-26 07:49:49

我已经解决了这个问题。您可以尝试以下代码:

代码语言:javascript
运行
复制
    import 'package:flutter/material.dart';  
    import 'package:url_launcher/url_launcher.dart';  

    void main() => runApp(const HomePage());  

    class HomePage extends StatelessWidget {  
      const HomePage({Key? key}) : super(key: key);  
      @override  
      Widget build(BuildContext context) {  
        return const MaterialApp(  
          debugShowCheckedModeBanner: false,  
          home: MyApp(),  
        );  
      }  
    }  

    class MyApp extends StatefulWidget {  
      const MyApp({Key? key}) : super(key: key);  
      @override  
      _MyAppState createState() => _MyAppState();
    }  

    class _MyAppState extends State<MyApp> {  
      Future<void>? _launched;  
      @override  
      Widget build(BuildContext context) {  
        const String toLaunch = 'https://www.youtube.com/watch?v=WcZ8lTRTNM0';  
        return Scaffold(  
          appBar: AppBar(title: const Text('Flutter Demo')),  
          body: Center(  
            child: ElevatedButton(  
              onPressed: () => setState(() {  
                _launched = _launchInBrowser(toLaunch);  
              }),  
              child: const Text('Launch in browser'),  
            ),  
          ), );  
      }  
      Future<void> _launchInBrowser(String url) async {  
        if (!await launch(  
          url,  
          forceSafariVC: true,  
          forceWebView: false,  
          headers: <String, String>{'my_header_key': 'my_header_value'},  
        )) {  
          throw 'Could not launch $url';  
        }  
      }  
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55952274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档