我们的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。
非常感谢您的帮助!
丹尼尔
只是一个想法,但也许你可以尝试使用url_launch plugin按照这里给出的苹果地图网址架构中给出的模式发布网址:https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html#//apple_ref/doc/uid/TP40007899-CH5-SW1
首先,安装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';
}
我发现一个简单的解决方案是使用相同的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的要求。