Xamarin 项目中的权限访问重复对话框 - 仅在 ios 中

问题描述 投票:0回答:2

我有一个 Xamarin Prism Forms 应用程序,其中包含应该获取用户当前位置的网页。 该应用程序已拥有 Android 所需的“应用程序”权限。但是在 ios 中,当我调用外部网页时,每次他们从我的内部访问该网页时,它都会重复显示弹出窗口,其中包含以下消息:“网站...想要使用您当前的位置。不允许/确定” Xamarin 应用程序。 我正在使用 WkWebViewRenderer 进行 webview。我已经尝试了所有可能的答案,但问题仍然存在。

有人可以帮我吗?

xamarin xamarin.forms xamarin.ios prism wkwebview
2个回答
1
投票

我在如何防止WKWebView重复请求访问位置权限?

找到了解决方案

我解决该问题所遵循的步骤是:

  • 在类定义中添加以下代码:

    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))");
      }
    }
    

0
投票

您说弹出窗口显示以下消息:“网站...想要使用您当前的位置。不允许/确定”,但此选项中没有“始终”选项。您可以检查您的 WkWebViewRenderer 如何请求位置权限,并且可以使用 requestAlwaysAuthorization 方法来获取 Always 授权。您还需要检查以下键是否已添加到 Info.plist 文件中:

NSLocationAlwaysUsageDescription
NSLocationWhenInUseUsageDescription
NSLocationAlwaysAndWhenInUseUsageDescription

更多详情,您可以参考以下文档:

Xamarin.iOS 中的背景位置 |微软

请求使用定位服务的授权 |苹果开发者

© www.soinside.com 2019 - 2024. All rights reserved.