使用 url_launcher 从 flutter 应用程序打开社交媒体应用程序

Abh*_*hay 4 dart flutter

我想使用个人资料/业务 URL 从我的 flutter 应用程序重定向到社交媒体平台应用程序。我正在使用 url_launcher dart 包。我能够找到重定向到 Facebook 个人资料的端点,但不知道如何打开特定的 Instagram 和 Twitter 页面。

_launchFacebook(String? facebook) async {
    final url = 'fb://facewebmodal/f?href=https://' + facebook!;
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }

  _launchTwitter(String? twitter) async {
    final url = 'tw://' + twitter!;
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
  }

  _launchInstagram(String? instagram) async {
    final url = 'in://' + instagram!;
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Could not launch $url';
    }
Run Code Online (Sandbox Code Playgroud)

小智 8

Facebook 在这里有点奇怪,它需要一个特定的协议fb://facewebmodal/f?href=$url

通常,应用程序会注册其网站的 URL 以进行深层链接,这意味着如果您没有安装相应的应用程序,它们将在您的浏览器中打开;如果您安装了相应的应用程序,它们将直接在其应用程序中打开。

这是我通常使用的实现,它绝对适用于 Facebook、Twitter、Instagram 和 LinkedIn。我对 Android 进行了特殊检查,这样如果您没有安装 Facebook,它将在浏览器中正确打开链接。

  @override
  Future<void> launchUrl(String url) async {
    final _canLaunch = await canLaunch(url);
    if (kIsWeb) {
      if (_canLaunch) {
        await launch(url);
      } else {
        throw "Could not launch $url";
      }
      return;
    }
    if (TargetPlatform.android) {
      if (url.startsWith("https://www.facebook.com/")) {
        final url2 = "fb://facewebmodal/f?href=$url";
        final intent2 = AndroidIntent(action: "action_view", data: url2);
        final canWork = await intent2.canResolveActivity();
        if (canWork) return intent2.launch();
      }
      final intent = AndroidIntent(action: "action_view", data: url);
      return intent.launch();
    } else {
      if (_canLaunch) {
        await launch(url, forceSafariVC: false);
      } else {
        throw "Could not launch $url";
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

您可以毫无问题地打开 及其https://instagram.com/username格式的链接https://twitter.com/username

希望能帮助到你 !


Osa*_*awi 5

一个简单的方法来做到这一点:

Future<void> _launchSocialMediaAppIfInstalled({
  String url,
}) async {
  try {
    bool launched = await launch(url, forceSafariVC: false); // Launch the app if installed!

    if (!launched) {
      launch(url); // Launch web view if app is not installed!
    }
  } catch (e) {
    launch(url); // Launch web view if app is not installed!
  }
}
Run Code Online (Sandbox Code Playgroud)

然后简单地这样调用它:

_launchSocialMediaAppIfInstalled(
  url: 'https://www.instagram.com/avey.world/', //Instagram
);

_launchSocialMediaAppIfInstalled(
  url: 'https://www.facebook.com/avey.pal/', // Facebook
);

_launchSocialMediaAppIfInstalled(
  url: 'https://twitter.com/avey_pal', // Twitter
);

_launchSocialMediaAppIfInstalled(
  url: 'https://www.linkedin.com/company/avey-ai/', // Linkedin
);

...
Run Code Online (Sandbox Code Playgroud)

不要忘记将示例页面替换为您的示例页面;)就这样!