web-dev-qa-db-ja.com

開く方法Apple Flutter / Dartを使用したマップ?

Flutterアプリは、Googleマップを使用して、またはローカルブラウザを使用して、いくつかの場所を表示します。

以前にiOSのバイナリコードをアップロードしましたが、これはAppleで承認され、App Storeで正常に公開されましたが、場所を追加して新しいバージョンを公開しようとしたため、 Appleはバイナリを拒否し、 "Apple Maps" "G"で始まるものではなく、Google...

拒否メッセージは次のようになります。

アプリの位置情報機能は、ユーザーをサードパーティのマップアプリに制限する組み込みのマッピング機能と統合されていません。

次のステップ

この問題を解決するには、アプリを修正して、ユーザーがネイティブAppleマップアプリを起動するオプションを提供するようにしてください。

MapKit JSという名前のJavascriptライブラリに関するドキュメントがいくつかあり、Apple Mapshttps://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>

それにもかかわらず、代わりにDartを使用してこれに接続する方法がないMapKit JSいくつかのヘルプを実際に使用できましたJavaのFlutterアプリケーションの場合。

ご親切にありがとうございました!

ダニエル

7
CostaRica

Map Launcher プラグインを使用して、プラットフォームに応じてApple/googleマップを起動しようとすることができます

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",
  );
}

2
Alex Moran

私が見つけた簡単な解決策は、同じurl_launcher関数を使用して、google maps URLをmaps.Apple.comの同等のものに置き換えることです。

たとえば、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のユーザーエクスペリエンスは非常に貧弱です。MapAppが表示されると、少しわかりにくく、元のアプリに戻すのが困難です。

したがって、AppleマップをApple実施に準拠するためのマップ、およびGoogleマップを提供するためにマップするための両方のオプションを有効にするコードを書くことを計画していますアップルにもかかわらず、より良いユーザーエクスペリエンス。

とにかく、後者は個人的な意見です。本当の事実は、同じlaunch_url関数を使用してmaps.Apple.comの同等のURLを置き換えると、Apple要件に準拠することは許容できるように見えることです。

0
CostaRica