Flutter Deeplink 到 Google 地图和 Waze

Gui*_*ira 3 google-maps flutter waze

我正在从 flutter 应用程序实现到导航应用程序(如 Google 地图或 Waze)的深层链接。我对 Google 地图或 Waze 这样做都没有问题,我的问题是,如果我为 Google 地图配置链接,用户仍然可以选择在 Waze 中打开它,但显然不会启动导航,因为参数不同。

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

z00*_*00x 11

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

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

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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>googlechromes</string>
    <string>comgooglemaps</string>
    <string>waze</string>
</array>
Run Code Online (Sandbox Code Playgroud)