안녕하세요 webview를 통해 카카오 로그인을 하는중 문제가 있어 문의를 남깁니다.
현재 웹은 카페24를 사용하고 있으며 평범한 ios safari로 접속시 에는 문제가 없는 부분입니다.
하지만 webview를 통한 카카오 로그인 진행시 ‘사용중인던 서비스로 이동하여 로그인을 완료해 주세요.’ 팝업창이 보여진후
닫기를 누르면 카카오 화면이 보여지고 상단에 생기는 앱 백버튼을 눌러 webview로 돌아와도 아무런 반응이 없습니다.
안녕하세요 webview를 통해 카카오 로그인을 하는중 문제가 있어 문의를 남깁니다.
현재 웹은 카페24를 사용하고 있으며 평범한 ios safari로 접속시 에는 문제가 없는 부분입니다.
하지만 webview를 통한 카카오 로그인 진행시 ‘사용중인던 서비스로 이동하여 로그인을 완료해 주세요.’ 팝업창이 보여진후
닫기를 누르면 카카오 화면이 보여지고 상단에 생기는 앱 백버튼을 눌러 webview로 돌아와도 아무런 반응이 없습니다.
안녕하세요~
확인을 위해 앱 ID 알려주세요~
앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다~
ex) 123456
로그상 명시적인 에러는 안보이는데요.
웹뷰로 로그인 시도하는 URL도 알려주시겠어요?
말씀하신 부분 적용 해보았는데요 처음에는
위에 사진처럼 보였다가 나중에는
첫질문과 같은 현상이 동일하게 발생합니다.
- (WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
if (!navigationAction.targetFrame.isMainFrame) {
}
WKWebViewConfiguration *wkWebViewConfig = [self setUpWkWebViewConfig];
WKWebView *popUpWebView = [[WKWebView alloc] initWithFrame: self.bounds configuration: wkWebViewConfig];
popUpWebView.UIDelegate = self;
popUpWebView.navigationDelegate = self;
[_webView addSubview:popUpWebView];
return popUpWebView;
}
...
- (WKWebViewConfiguration *)setUpWkWebViewConfig
{
WKWebViewConfiguration *wkWebViewConfig = [WKWebViewConfiguration new];
WKPreferences *prefs = [[WKPreferences alloc]init];
BOOL _prefsUsed = NO;
if (!_javaScriptEnabled) {
prefs.javaScriptEnabled = NO;
_prefsUsed = YES;
}
if (_allowFileAccessFromFileURLs) {
[prefs setValue:@TRUE forKey:@"allowFileAccessFromFileURLs"];
_prefsUsed = YES;
}
if (_javaScriptCanOpenWindowsAutomatically) {
[prefs setValue:@TRUE forKey:@"javaScriptCanOpenWindowsAutomatically"];
_prefsUsed = YES;
}
if (_prefsUsed) {
wkWebViewConfig.preferences = prefs;
}
if (_incognito) {
wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore nonPersistentDataStore];
} else if (_cacheEnabled) {
wkWebViewConfig.websiteDataStore = [WKWebsiteDataStore defaultDataStore];
}
if(self.useSharedProcessPool) {
wkWebViewConfig.processPool = [[RNCWKProcessPoolManager sharedManager] sharedProcessPool];
}
wkWebViewConfig.userContentController = [WKUserContentController new];
#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000 /* iOS 13 */
if (@available(iOS 13.0, *)) {
WKWebpagePreferences *pagePrefs = [[WKWebpagePreferences alloc]init];
pagePrefs.preferredContentMode = _contentMode;
wkWebViewConfig.defaultWebpagePreferences = pagePrefs;
}
#endif
// Shim the HTML5 history API:
[wkWebViewConfig.userContentController addScriptMessageHandler:[[RNCWeakScriptMessageDelegate alloc] initWithDelegate:self]
name:HistoryShimName];
[self resetupScripts:wkWebViewConfig];
#if !TARGET_OS_OSX
wkWebViewConfig.allowsInlineMediaPlayback = _allowsInlineMediaPlayback;
#if WEBKIT_IOS_10_APIS_AVAILABLE
wkWebViewConfig.mediaTypesRequiringUserActionForPlayback = _mediaPlaybackRequiresUserAction
? WKAudiovisualMediaTypeAll
: WKAudiovisualMediaTypeNone;
wkWebViewConfig.dataDetectorTypes = _dataDetectorTypes;
#else
wkWebViewConfig.mediaPlaybackRequiresUserAction = _mediaPlaybackRequiresUserAction;
#endif
#endif // !TARGET_OS_OSX
if (_applicationNameForUserAgent) {
wkWebViewConfig.applicationNameForUserAgent = [NSString stringWithFormat:@"%@ %@", wkWebViewConfig.applicationNameForUserAgent, _applicationNameForUserAgent];
}
return wkWebViewConfig;
}
- (void)webViewDidClose:(WKWebView *)webView {
[_webView removeFromSuperview];
}
코드는 다음과 같습니다.
재현이 안되는데요.
“webview로 돌아와도 아무런 반응이 없습니다.”
아무런 반응이 없다는 것이 로그인 페이지 그대로 멈춰 있다는 의미인가요?
재현 영상 좀 첨부해주시겠어요?
@tim.l 영상 첨부 드립니다.
https://drive.google.com/file/d/13s40FYAq3LthYbBDQisRFcrCN2roT5mP/view?usp=sharing
KakaoTalk_Video_2022-03-17-19-23-17.mp4.zip (1.4 MB)
(1) 로그를 보니
인가요청 이후, 리다이렉트 URI로 정상 이동을 못하는 것으로 보입니다.
(2) 재현 테스트를 해보니
별다른 조치를 하지 않아도 JS SDK authorize 방식 로그인은 정상 처리됩니다. 영상 첨부하였습니다.
WKWebView 객체이용하여 서비스하시는 로그인 페이지 띄워 로그인 시도해보면
카카오톡으로 로그인하던, 카카오톡이 없는 기기에서 카카오 계정페이지 ID/PW 입력 로그인하던 정상 처리됩니다.
제작하신 앱에 종속적인 문제로 판단되며
빈 프로젝트 생성하셔서 정상 로그인 되는 부분 확인해보시면 좋을 것 같습니다.
ViewController.h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@property (weak, nonatomic) IBOutlet UIView *viewWeb;
@end
ViewController.m
#import "ViewController.h"
#import <WebKit/WebKit.h>
@interface ViewController (){
WKWebView *webView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
WKWebView *webView = [[WKWebView alloc] init];
webView.frame = self.view.bounds;
[self.view addSubview:webView];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://soundgym.shop/member/login.html?returnUrl=/myshop/index.html&toMoveLoginCheckModule"]];
[webView loadRequest:request];
}
@end