我有一个 Xamarin Prism Forms 应用程序,其中包含应该获取用户当前位置的网页。 该应用程序已拥有 Android 所需的“应用程序”权限。但是在 ios 中,当我调用外部网页时,每次他们从我的内部访问该网页时,它都会重复显示弹出窗口,其中包含以下消息:“网站...想要使用您当前的位置。不允许/确定” Xamarin 应用程序。 我正在使用 WkWebViewRenderer 进行 webview。我已经尝试了所有可能的答案,但问题仍然存在。
有人可以帮我吗?
我解决该问题所遵循的步骤是:
在类定义中添加以下代码:
const string JavaScriptFunction = "navigator.geolocation.getCurrentPosition = function(success, error, options) {window.webkit.messageHandlers.locationHandler.postMessage('getCurrentPosition');};";
在 HybridWebViewRenderer 构造函数中添加以下内容:
var script = new WKUserScript(new NSString(JavaScriptFunction),
WKUserScriptInjectionTime.AtDocumentStart, true);
userController.AddUserScript(script);
userController.AddScriptMessageHandler(this, "locationHandler");
在DidReceiveScriptMessage函数中添加以下内容:
if (message.Name == "locationHandler")
{
var messageBody = message.Body.ToString();
if (messageBody == "getCurrentPosition")
{
CLLocationManager manager=new CLLocationManager();
manager.RequestAlwaysAuthorization();
manager.StartUpdatingLocation();
((HybridWebView)Element).EvaluateJavaScriptAsync("getLocation(\"
(manager.location?.coordinate.latitude ?? 0) ,\"
(manager.location?.coordinate.longitude ?? 0))");
}
}
您说弹出窗口显示以下消息:“网站...想要使用您当前的位置。不允许/确定”,但此选项中没有“始终”选项。您可以检查您的 WkWebViewRenderer 如何请求位置权限,并且可以使用 requestAlwaysAuthorization 方法来获取 Always 授权。您还需要检查以下键是否已添加到 Info.plist 文件中:
NSLocationAlwaysUsageDescription
、NSLocationWhenInUseUsageDescription
或NSLocationAlwaysAndWhenInUseUsageDescription
。
更多详情,您可以参考以下文档: