web-dev-qa-db-fra.com

Comment ouvrir Apple Maps en utilisant Flutter / Dart?

Notre application Flutter affiche un certain nombre d'emplacements à l'aide de Google Maps, si disponible, ou à l'aide du navigateur local.

Bien que nous ayons déjà téléchargé un code binaire pour iOS qui a été accepté par Apple et publié avec succès dans l'App Store, maintenant que nous avons ajouté quelques emplacements supplémentaires et avons donc tenté de publier une nouvelle version, Apple a rejeté notre binaire , déclarant qu'il est obligatoire d'utiliser "Apple Maps" au lieu de tout ce qui commence par un "G", comme Google ...

Le message de rejet se lit comme suit:

La fonction de localisation de votre application n'est pas intégrée à la fonctionnalité de cartographie intégrée, ce qui limite les utilisateurs à une application de cartes tierce.

Prochaines étapes

Pour résoudre ce problème, veuillez réviser votre application pour donner aux utilisateurs la possibilité de lancer l'application native Apple Maps)

J'ai trouvé qu'il existe de la documentation sur une bibliothèque Javascript nommée MapKit JS, qui sert précisément à interagir avec 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>

Néanmoins, je pourrais vraiment utiliser une aide pour savoir comment me connecter avec ce MapKit JS en utilisant Dart , au lieu de Java, pour notre application Flutter .

Merci infiniment pour votre aimable aide!

Daniel

7
CostaRica

Vous pouvez essayer d'utiliser un plugin Map Launcher pour lancer Apple/google maps en fonction d'une plateforme

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

Une solution simple que j'ai trouvée est de remplacer l'URL de google maps par un équivalent de maps.Apple.com, en utilisant la même fonction url_launcher.

Par exemple, la fonction d'origine de Google Maps:

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';
    }
  }

Est devenu:

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';
    }
  }

Néanmoins, bien que ce changement remplisse l'obligation imposée par Apple d'utiliser leur propre logiciel au lieu de celui de la concurrence, l'expérience utilisateur avec Apple Maps est très mauvaise, car une fois l'application Map affichée, elle devient un peu déroutant et difficile de revenir à l'application d'origine.

Par conséquent, je prévois d'écrire du code qui permet les deux options, Apple Maps afin de se conformer à Apple application, ainsi que Google Maps afin de fournir un meilleure expérience utilisateur, malgré Apple.

Quoi qu'il en soit, ce dernier n'est qu'une opinion personnelle; le fait est que remplacer l'URL d'un équivalent maps.Apple.com en utilisant la même fonction launch_url, semble acceptable pour se conformer aux exigences de Apple Apple.

0
CostaRica