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

Cos*_*ica 9 mapkit ios dart flutter

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

虽然我们之前已经为 iOS 上传了一个被苹果接受并成功发布在 App Store 的二进制代码,但现在我们添加了更多位置并因此尝试发布新版本,苹果拒绝了我们的二进制文件,并表示它必须使用“Apple Maps”而不是任何以“G”开头的东西,比如谷歌......

拒绝消息如下:

您的应用程序的位置功能未与内置地图功能集成,这会将用户限制为第三方地图应用程序。

下一步

要解决此问题,请修改您的应用程序,让用户可以选择启动本机 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>
Run Code Online (Sandbox Code Playgroud)

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

非常感谢您的帮助!

丹尼尔

BaD*_*aDo 8

首先,安装url_launcher插件

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

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

第三:

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

if (await canLaunch(urlAppleMaps)) {
  await launch(urlAppleMaps);
} else {
  throw 'Could not launch $url';
}
Run Code Online (Sandbox Code Playgroud)

我们可以这样使用它:

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


小智 7

您可以尝试使用地图启动器插件来根据平台启动苹果/谷歌地图

import 'dart:io';
import 'package:map_launcher/map_launcher.dart';

if (Platform.isIOS) {
  await MapLauncher.launchMap(
    mapType: MapType.apple,
    coords: Coords(31.233568, 121.505504),
    title: "Shanghai Tower",
    description: "Asia's tallest building",
  );
} else {
  await MapLauncher.launchMap(
    mapType: MapType.google,
    coords: Coords(31.233568, 121.505504),
    title: "Shanghai Tower",
    description: "Asia's tallest building",
  );
}

Run Code Online (Sandbox Code Playgroud)


小智 3

只是一个想法,但也许您可以尝试使用url_launch 插件按照此处给出的苹果地图 url 模式中给出的模式启动 url: https: //developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/ MapLinks.html#//apple_ref/doc/uid/TP40007899-CH5-SW1