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 设备上卸载了地图应用程序(推测这种情况很少见),它会提示他们恢复地图应用程序。
我 运行 遇到一个小问题,在这个问题中,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 设备上卸载了地图应用程序(推测这种情况很少见),它会提示他们恢复地图应用程序。