티스토리 뷰



기본적으로 Facebook, Kakao 로그인 시 앱이 설치되어 있는 경우 앱에 로그인되어 있는 정보를 이용해 로그인을 한다.

즉, 우리 앱에서 Facebook 혹은 Kakao 로 앱이 이동했다가 다시 우리 앱으로 돌아온다.

(이를 Facebook 에서는 FAS, Fast App Switching 이라 표현한다.)


예외가 있다면, iOS 9 부터 iOS 가 앱 간 이동을 지양한다는 정책을 발표함에 따라

Facebook 로그인 시 무조건 Safari WebView 가 노출된다.


참고 사이트 : https://developers.facebook.com/blog/post/2015/10/29/Facebook-Login-iOS9




1. Facebook



WebView 노출의 경우 (iOS 9 이상 or 앱 미설치)


WebView 를 가진 ViewController 가 우리 앱 위에 Present 된다.

이에 따라 Facebook 로그인 버튼을 누르면 내 ViewController 에서는 viewWillDisappear, viewDidDisappear 가 호출된다.





FAS 의 경우 (iOS 9 미만 and 앱 설치)


가장 처음이면 App을 이동하겠냐는 System Alert 가 뜨고 한번 이동한 이후에는 앱이 System Alert 없이 노출되는 것으로 보인다. (정확한 테스트는 못해봄)

System Alert 가 노출되거나 앱이 이동하면 "applicationWillResignActive:" 가 노출된다.







2. Kakaotalk



WebView 노출의 경우 (앱 미설치 시)


WebView 를 가진 View 가 우리 앱 위에 Present 된다.

이에 따라 Kakao 로그인 버튼을 누르면 내 ViewController 에서는 viewWillDisappear, viewDidDisappear 가 호출되지 않는다.

"applicationWillResignActive" 도 당연히 호출되지 않는다.





FAS 의 경우 (앱 설치)


Facebook 과 동일하다.






3. Facebook, Kakao 로그인 동작 시 사용자 Input을 막고 싶을 때는 어떻게 해야하는가?


 

1) Facebook WebView 의 경우

로그인 버튼이 눌렸을 때 Progress 를 돌리고 "viewWillDisappear" 와 같은 곳에서 Progress 를 멈춰주면 된다.



2) Facebook FAS, Kakao FAS 의 경우

로그인 버튼이 눌렸을 때 Progress 를 돌리고 "applicationWillResignActive" Notification(UIApplicationWillResignActiveNotification) 을 

ViewController 에 Add 하여 detecting 이 가능하다.



3) Kakao WebView 의 경우

아무 이벤트도 들어오지 않는 경우이다. "viewWillDisappear" 도 "applicationWillResignActive" 도 호출되지 않는다.

애매하지만, 로그인 버튼이 눌렸을 때 View 에 존재하는 모든 버튼의 userInteractionEnabled 를 꺼주고

dispatch_after 혹은 NSTimer 를 이용하여 일정 시간 (0.5초 정도?) 이후 userInteractionEnabled 를 켜준다.






4. Kakao WebView 노출 시 화면


카카오 앱 미설치의 경우 WebView 를 포함한 View 가 ViewController 위에 노출되는데,

카카오 View 가 노출된 상태에서 왼쪽 모서리에서 오른쪽 모서리로 Slide 하면

아래에 있는 ViewController 에서 Sliding Pop Event (interactivePopGestureRecognizer) 가 된다.


이게 싫다면 카카오 로그인 버튼이 눌렸을 때 앱 설치 여부를 확인하여

viewController.navigationController.interactivePopGestureRecognizer.enable = NO 로 만들어 준 후

로그인 결과 값이 오는 CallBack Block 에서 YES 로 만들어주면 된다.


앱 설치 여부를 확인할 수 있는 (정확한 API 는 아닌걸로 보인다.) 카카오 API 는

[KOAppCall canOpenKakaoTalkAppLink] 이다.


참고) https://devtalk.kakao.com/t/api/2135


위 메소드를 호출할 때는 plist 의 LSApplicationQueriesSchemes 에 "kakaolink" 가 반드시 들어가 있어야한다.







공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함