Ios webview 카카오 로그인 관련 문의 드립니다

안녕하세요 webview를 통해 카카오 로그인을 하는중 문제가 있어 문의를 남깁니다.

현재 웹은 카페24를 사용하고 있으며 평범한 ios safari로 접속시 에는 문제가 없는 부분입니다.

하지만 webview를 통한 카카오 로그인 진행시 ‘사용중인던 서비스로 이동하여 로그인을 완료해 주세요.’ 팝업창이 보여진후

닫기를 누르면 카카오 화면이 보여지고 상단에 생기는 앱 백버튼을 눌러 webview로 돌아와도 아무런 반응이 없습니다.

IMG_2468

안녕하세요~
확인을 위해 앱 ID 알려주세요~


앱ID
https://developers.kakao.com/ 의 내 애플리케이션>앱 설정>요약 정보 : 기본정보에 있는 앱 ID
숫자로된 ID 입니다~
ex) 123456

219327 입니다

@tim.l

로그상 명시적인 에러는 안보이는데요.

웹뷰로 로그인 시도하는 URL도 알려주시겠어요?

iOS 웹뷰에서 기재해주신 URL로 로그인 시도 해보니 정상 처리됩니다.

하이브리드앱 적용하기 관련 처리 되어 있는지 확인 부탁드려요.

JavaScript | Kakao Developers 문서

@tim.l

말씀하신 부분 적용 해보았는데요 처음에는
Image from iOS
위에 사진처럼 보였다가 나중에는

첫질문과 같은 현상이 동일하게 발생합니다.

- (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];
}

코드는 다음과 같습니다.

@lea.ju

@tim.l 보시면 답변 부탁드립니다.

안녕하세요.

개인 메시지 @tim.l 로 info.plist 설정 부 보내주시겠어요?

재현이 안되는데요.

“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