apache / cordova-plugin-inappbrowser

Apache Cordova InAppBrowser Plugin
https://cordova.apache.org/
Apache License 2.0
1.12k stars 2.15k forks source link

IOS: Third part login use fingerprint login / face login, IOS failed and display a white screen. #744

Closed chenheng0910 closed 4 years ago

chenheng0910 commented 4 years ago

Bug Report

Problem

Hi there I am working for a hybrid application using IONIC v3. I use the in-app-browser (v4.0.0)to do a third-party login to Microsoft, and also to achieve the use fingerprint or facial print login. And Android worked, but IOS failed .

What is expected to happen?

success login both android and ios

What does actually happen?

Android worked, but IOS failed .

Information

Command or Code

Environment, Platform, Device

Platform: IOS

Version information

ionic: 4.2.0 angular/core: 5.2.11 cordova: 9.0.0 cordova-ios: 5.0.0 cordova-android: 8.1.0 node: 10.16.0 npm: 6.9.0 cordova-plugin-inappbrowser: 4.0.0

Checklist

timbru31 commented 4 years ago

Does the login work in plain Safari on iOS? (my guess is no)

NiklasMerz commented 4 years ago

iOS 14 will introduce FaceID and TouchID. Although I did no test it yet.

timbru31 commented 4 years ago

Yes:

Added a Web Authentication platform authenticator using Face ID or Touch ID, depending on which capability is present.

(https://developer.apple.com/documentation/safari-release-notes/safari-14-beta-release-notes), but I'll doubt they a) backport it to iOS 13 and b) that this issue is invalid since it's a Safari issue we can't workaround.

breautek commented 4 years ago

Agreed. Closing because this isn't a bug. Perhaps in the future it will be a feature request, if something needs to be enabled in the WKWebView for iOS 14+

chenheng0910 commented 4 years ago

@breautek I change in-app-browser plugin from 4.0.0 to 3.2.0 and add the code as follow in CDVUIInAppVrowser.m file in line 74, and IOS face login worked NSHTTPCookie *cookie; NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; for (cookie in [storage cookies]) { NSDate *expiresDate = [NSDate dateWithTimeIntervalSinceNow:3600*24*30*12]; NSArray *newCookies = [NSArray arrayWithObjects:cookie.name, cookie.value, expiresDate, cookie.domain, cookie.path, nil]; if(newCookies){ NSMutableDictionary *cookieProperties = [NSMutableDictionary dictionary]; [cookieProperties setObject:[newCookies objectAtIndex:0] forKey:NSHTTPCookieName]; [cookieProperties setObject:[newCookies objectAtIndex:1] forKey:NSHTTPCookieValue]; [cookieProperties setObject:[newCookies objectAtIndex:2] forKey:NSHTTPCookieExpires]; [cookieProperties setObject:[newCookies objectAtIndex:3] forKey:NSHTTPCookieDomain]; [cookieProperties setObject:[newCookies objectAtIndex:4] forKey:NSHTTPCookiePath]; NSHTTPCookie *newCookie = [NSHTTPCookie cookieWithProperties:cookieProperties]; [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:newCookie]; } } We think this problem is related to cookies. I'd like to know what you think?

NiklasMerz commented 4 years ago

Version 4.0.0 should not have the file CDVUIInAppVrowser.m. This was the UIWebView implementation that got removed in this version.

Cookies are indeed a difficult topic in inappbrowser and WKWebView but I don't understand why this should enable Fingperprint authentication that is only coming in the next major version of iOS.

Could you please provide more details? Possibly a video would help us to understand this.

chenheng0910 commented 4 years ago

@NiklasMerz Sure, i will upload test video and my application's login log both android and ios. But i don't know where should i upload these info that you could see it. Maybe Email is ok if you don't mind

NiklasMerz commented 4 years ago

If you don't mind uploading it publicly please upload it to this issue or create a sample application to show the issue.

chenheng0910 commented 4 years ago

IOS login log:

IOS-log

Android login log: Android-log

Here you can see ios return url with an error:
A silent sign-in request was sent but no user is signed in. But android return url with a code