如何使用Flutter / Dart打开Apple Maps?

问题描述 投票:2回答:2

我们的Flutter应用程序显示了许多使用Google地图的位置(如果有),或使用本地浏览器。

虽然我们之前已经上传了Apple的二进制代码,Apple已经接受并在App Store中成功发布,但现在我们已经添加了更多的位置并因此尝试发布新版本,Apple拒绝了我们的二进制代码,说明它必须使用“Apple Maps”而不是以“G”开头的任何内容,例如Google ......

拒绝消息如下:

您应用的位置功能未与内置映射功能集成,后者将用户限制为第三方地图应用。

下一步

要解决此问题,请修改您的应用,以便用户可以选择启动原生Apple Maps应用。

我发现存在一些关于名为MapKit JS的Javascript库的文档,它恰好用于与Apple Maps交互的目的:https://developer.apple.com/maps/mapkitjs/

<script src="https://cdn.apple-mapkit.com/mk/5.x.x/mapkit.js"></script>

<script>
        mapkit.init({
            authorizationCallback: function(done) {
                var xhr = new XMLHttpRequest();
                xhr.open("GET", "/services/jwt");
                xhr.addEventListener("load", function() {
                    done(this.responseText);
                });
                xhr.send();
            }
        });

        var Cupertino = new mapkit.CoordinateRegion(
            new mapkit.Coordinate(37.3316850890998, -122.030067374026),
            new mapkit.CoordinateSpan(0.167647972, 0.354985255)
        );
        var map = new mapkit.Map("map");
        map.region = Cupertino;
        </script>

尽管如此,对于我们的Flutter应用程序,我真的可以使用一些帮助,而不是如何使用DART而不是JAVA来连接这个MapKit JS。

非常感谢您的帮助!

丹尼尔

ios dart flutter mapkit
2个回答
2
投票

只是一个想法,但也许你可以尝试使用url_launch plugin按照这里给出的苹果地图网址架构中给出的模式发布网址:https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html#//apple_ref/doc/uid/TP40007899-CH5-SW1


1
投票

首先,安装url_plugin

其次:在Info.plist中添加以下代码

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

第三:

var urlAppleMaps = 'https://maps.apple.com/?q=$lat,$lng';

if (await canLaunch(urlAppleMaps)) {
  await launch(urlAppleMaps);
} else {
  throw 'Could not launch $url';
}

0
投票

我发现一个简单的解决方案是使用相同的url_launcher函数替换使用maps.apple.com等效的谷歌地图URL。

例如,Google地图的原始功能:

void _mapaBethania() async {
    const url = "https://www.google.com/maps/place/Panamanian+Institute+for+Special+Training/@9.0067418,-79.5300556,17z/data=!3m1!4b1!4m5!3m4!1s0x8faca84549395297:0x9c54b1fdb96ac590!8m2!3d9.0067365!4d-79.5278669";
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Lo sentimos, no es posible abrir: $url';
    }
  }

已经成为:

void _mapaBethania() async {
  const url = "https://maps.apple.com/?q=IPHE&ll=9.0067418,-79.5300556&z=16";
    if (await canLaunch(url)) {
      await launch(url);
    } else {
      throw 'Lo sentimos, no es posible abrir: $url';
    }
  }

尽管如此,尽管这一变化确实符合Apple强制使用自己软件而非竞争对手的义务,但Apple Maps的用户体验非常差,因为一​​旦显示地图应用程序,它就会变得有点混乱,难以返回到原创App。

因此,我计划编写支持两种选项的代码,Apple Maps以遵守Apple执法,以及Google Maps,以便提供更好的用户体验,尽管Apple。

无论如何,后者只是个人意见;事实上,使用相同的launch_url函数替换maps.apple.com等效的URL似乎可以接受Apple的要求。

© www.soinside.com 2019 - 2024. All rights reserved.