apache / apache/cordova-plugin-inappbrowser
Unable to get location information in WKWebView on iOS 16.4+
- Dominant language
- Java
- Stars
- 1.1k
- Forks
- 2.2k
- PR merge metrics
- No merged PRs in 30d
Description
# Bug Report
## Problem
### What is expected to happen?
This is the behaviour occurring on iOS versions lower than 16.4, which is the intended one.
A popup appeared twice when retrieving location information for the first installed app. You can get location information by executing the navigator.geolocation.getCurrentPosition method on a web page opened in WKWebView. The first time, a popup location permissions for the app's domain appeared in a popup a and second requesting permission for Safari (WKWebView) location information was displayed
### What does actually happen?
This is what's happening on 16.4+.
The permission request popup for Safari (WKWebView) is not displayed, and only the permission request for the app domain is displayed in a popup. After enabling popups and running the navigator.geolocation.getCurrentPosition method does not work and I am unable to get the location. Debug log reports the following error message: `… ** whose view is not in the window hierarchy**`.
## Information
This appears to be an issue occurring due to an update Apple introduced for WKWebView on version 16.4, as a couple of threads are available online with users facing the same issues. This is occurring on `CDVWKInAppBrowser.m` on the `show:withNoAnimate:` method.
The issue seems to occur when a view controller is presented by another view controller and it's suggested that replacing `presentViewController` by `pushViewController` can temporarily fix the issue. On the InAppBrowser plugin, this is not achievable as the view to present is a `CDVInAppBrowserNavigationController` and `UINavigationController`s can't be pushed.
This is severely impacting our customers, with no fix found until now.
### Environment, Platform, Device
This happening with every version working with iOS 16.4+.
## Checklist
- [x] I searched for existing GitHub issues
- [ ] I updated all Cordova tooling to most recent version
- [x] I included all the necessary information above
Contributor guide
Research direction
Start in CDVWKInAppBrowser.m at show:withNoAnimate:, then reproduce navigator.geolocation.getCurrentPosition in a WKWebView on iOS 16.4+. Compare the permission flow with earlier iOS versions; done means the Safari (WKWebView) location permission request appears and location retrieval succeeds.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, javascript, objective-c
- Domain
- mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100