Flutter url_launcher 未在发布模式下启动 url

Fai*_*mal 4 url launcher dart flutter

我不知道出于某种原因url_launcherhttps://pub.dev/packages/url_launcher)从 google Playstore 下载应用程序后无法正常工作。在调试模式下,它按应有的方式工作。但是在Playstore上上传应用程序并从那里下载后,url启动器没有启动任何url。这是为什么?

import 'package:url_launcher/url_launcher.dart';

 onTap: () {
  launchURL("https://www.google.com");
},
..............
  launchURL(String url) async {
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }
Run Code Online (Sandbox Code Playgroud)

pubspec.yaml url_launcher: ^5.7.6

我也添加了 android.permission.INTERNET

我没有使用最新版本,url_launcher所以可能使用最新版本可以解决问题,但问题是最新版本 url_launcher需要最新版本的颤振。升级flutter版本安全吗?由于我的应用程序已经投入生产,我不能冒险引发更多问题

这就是我尝试升级到 url_launcher: ^5.7.10最新版本并运行flutter pub get 时得到的结果

[xxxxx] flutter pub get
Running "flutter pub get" in xxxxx...                       
The current Flutter SDK version is 1.22.0-9.0.pre.

Because url_launcher >=5.7.7 <6.0.0-nullsafety depends on url_launcher_platform_interface >=1.0.9 <2.0.0-nullsafety which requires Flutter SDK version >=1.22.0 <2.0.0, url_launcher >=5.7.7 <6.0.0-nullsafety is forbidden.

So, because xxxxx depends on url_launcher ^5.7.10, version solving failed.
pub get failed (1; So, because storeifie depends on url_launcher ^5.7.10, version solving failed.)
exit code 1
Run Code Online (Sandbox Code Playgroud)

小智 19

我在 Android 11(API 级别 30)上遇到了同样的问题——在软件更新之前(以及在我运行早期版本的测试设备上)一切正常——以下似乎让我走上了正确的轨道 https://developer。 android.com/training/basics/intents/package-visibility#all-apps

我通过在 AndroidManifest.xml 中添加以下内容解决了我的问题(尽管它可能不是必需的。)

<activity android:name="io.flutter.plugins.urllauncher.WebViewActivity"
           android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
           android:exported="false"/>
Run Code Online (Sandbox Code Playgroud)

仅此一项是行不通的,然后我添加到 <manifest ... package="com.example.app" 正下方的行中:

<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
Run Code Online (Sandbox Code Playgroud)

  • 看起来 url_launcher 包现在有这方面的文档,但建议采用不同的方法。请参阅下面@RITTIK的答案或查看https://pub.dev/packages/url_launcher#android (5认同)
  • Google 正在严厉打击 QUERY_ALL_PACKAGES,因此最好避免使用此解决方案。2022 年 4 月发表讲话。 (5认同)
  • 多谢!添加权限效果很好,API 级别 30 也有同样的问题。 (3认同)
  • 添加权限也对我有用,但是我必须卸载并重新安装该应用程序。Flutter clean 没有通过明显的更改进行重建。 (3认同)

Kie*_* Vu 15

我跳过了调用 canLaunch(url) 并在 try-catch 中调用 launch(url),它可以工作


小智 12

看起来从 Android API 30 开始,您应该需要添加明确的意图。例如,如果您要打开一个 URL,则需要将以下代码添加到您的 AndroidManifest.xml 中:

<queries>
    <!-- to opens https URLs -->
    <intent>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="https" />
    </intent>
</queries>
Run Code Online (Sandbox Code Playgroud)

您可以在 url_launcher read.me 中看到更新: https: //pub.dev/packages/url_launcher


Gok*_*nan 3

首先,您处于 flutter 的开发频道(1.22.0-9.0.pre 是开发版本,于 2/9/2020 发布)。由于您的应用程序正在生产中,请将频道更改为稳定版,因为它没有重大错误。

flutter channel stable
Run Code Online (Sandbox Code Playgroud)

然后进行flutter升级。

 flutter upgrade
Run Code Online (Sandbox Code Playgroud)

现在,尝试将 url_launcher 包升级到最新版本。它应该有效。

PS:不用担心flutter升级,只要是在stable分支升级即可。始终建议运行最新版本。