Apple 地图 Link 在本机应用程序之前在 Safari 中打开

Apple Maps Link Opens in Safari before native app

我 运行 遇到一个小问题,在这个问题中,Safari 在直接启动到 Xamarin 中的本机 Apple 地图应用程序之前正在打开。我稍微遵循了本教程:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/map/native-map-app

        var locationUrl = Device.RuntimePlatform == Device.iOS ?
            $"http://maps.apple.com/?q={address}" :
            $"http://maps.google.com/?q={address}";

        var uri = new Uri( locationUrl ).AbsoluteUri;

        try
        {
            await Launcher.OpenAsync( uri );
        }

        catch
        {
            await AppState.Current.NavigateToExternalBrowserAsync( uri );
        }

这在 Android 中完美运行,并直接启动到本机应用程序。我遵循了这个苹果地图方案:https://developer.apple.com/library/archive/featuredarticles/iPhoneURLScheme_Reference/MapLinks/MapLinks.html。任何帮助将不胜感激!

我相信这是Apple的意图。来自 developer.apple.com:

Map links are specified as regular http links and are opened either in Safari or the Maps app on the target platform.

如果它在 Safari 中短暂打开,很可能是在浏览器中识别 URI 并将其移植到应用程序(就像您如何在某些网站上“在应用程序中打开”,但这是自动的)。

根据Apple document: 与某些方案不同,地图 URL 不以“地图”方案标识符开头。相反,地图链接被指定为常规 http 链接,并在目标平台上的 Safari 或地图应用程序中打开。

与文档在档案和之前的答案中所说的相反,maps:// 方案似乎产生了我预期的行为。,

因此,将 Apple URI 更新为:

$"maps://http://maps.apple.com/?q={address}"

做工精美。

整个片段:

        var locationUrl = Device.RuntimePlatform == Device.iOS ?
        $"maps://http://maps.apple.com/?q={address}" :
        $"http://maps.google.com/?q={address}";

        var uri = new Uri( locationUrl );
        try
        {
            await Launcher.OpenAsync( locationUrl );
        }

        catch
        {
            await AppState.Current.NavigateToExternalBrowserAsync( uri.AbsoluteUri );
        }

创建在没有 Safari 作为中介的情况下在地图应用程序中本地打开的预期行为。唯一的缺点是,如果用户在 Apple 设备上卸载了地图应用程序(推测这种情况很少见),它会提示他们恢复地图应用程序。