Flutter Deeplink 到 Google 地图和 Waze

Flutter Deeplink to Google maps and Waze

我正在从一个 flutter 应用程序对导航应用程序(如 Google 地图或 Waze)实施深度link。我对 Google 地图或 Waze 都没有问题,我的问题是如果我为 Google 地图配置 link,用户仍然可以选择在 Waze 中打开它, 但显然没有启动导航,因为参数不同。

有没有办法限制用户对应用程序的使用选择?或者是否可以根据用户选择打开的应用程序使用不同的 link?或者更好的是,是否有适用于两个应用程序的通用 link 导航?

您可以使用 Universal link (iOS) / App link (Android) 强制打开选定的应用程序,它应该强制打开选定的应用程序被打开。当然,如果您要启动的应用程序在设备中找不到,它将在浏览器中打开它。

这里我假设您使用纬度和经度导航到该地点,但您可以轻松地将其调整为其他内容。 我也在使用 url_launcher 启动 links.

void launchWaze(double lat, double lng) async {
  var url = 'waze://?ll=${lat.toString()},${lng.toString()}';
  var fallbackUrl =
      'https://waze.com/ul?ll=${lat.toString()},${lng.toString()}&navigate=yes';
  try {
    bool launched =
        await launch(url, forceSafariVC: false, forceWebView: false);
    if (!launched) {
      await launch(fallbackUrl, forceSafariVC: false, forceWebView: false);
    }
  } catch (e) {
    await launch(fallbackUrl, forceSafariVC: false, forceWebView: false);
  }
}

void launchGoogleMaps(double lat, double lng) async {
  var url = 'google.navigation:q=${lat.toString()},${lng.toString()}';
  var fallbackUrl =
      'https://www.google.com/maps/search/?api=1&query=${lat.toString()},${lng.toString()}';
  try {
    bool launched =
        await launch(url, forceSafariVC: false, forceWebView: false);
    if (!launched) {
      await launch(fallbackUrl, forceSafariVC: false, forceWebView: false);
    }
  } catch (e) {
    await launch(fallbackUrl, forceSafariVC: false, forceWebView: false);
  }
}

您还需要将以下内容添加到您的 Info.plist 文件中:

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>googlechromes</string>
    <string>comgooglemaps</string>
    <string>waze</string>
</array>