apache / apache/cordova-plugin-inappbrowser

Unable to get location information in WKWebView on iOS 16.4+

Open
#998 3 comments 1 reaction 0 assignees View on GitHub
info-needed
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.