iOS5 이상 버전에서는 Twitter.framework와 ACAccount.framework가 추가되어 손쉽게 트위터를 연동할 수 있다. (참고 : iOS5에 내장된 Twitter.framework 사용하기)
ACAccount를 이용하여 시스템에 설정된 트위터 계정에 접근했을 때 설정된 트위터 계정이 없을 때 처리 방법을 어떻게 생각할 수 있을까?
- UIAlertView를 이용하여 현재 시스템에 설정된 계정이 없다고 사용자에게 알려 설정을 유도하고 가능하다면 설정으로 이동
- External OAuth Library를 이용하여 WebView를 통해 연동
- Twitter 개발자 사이트에서 등록한 Application의 권한을 요청(reverse_auth / xauth)하여 처리
OAuth 1.0a의 구조를 잘 알거나 External Library를 가지고 있는 경우에는 관점에 따라 2번이 가장 쉬운 방법이 될 수도 있다. (필자가 회사에서 이전에 수행했던 ‘아임리얼맛집‘은 2번의 방법으로 OAuthConsumer Library를 이용하여 연동하는 방법을 선택하였다.)
3번의 경우는 Twitter에 사용해야되는 이유를 영어로 적어 보내고 요청에 대한 답을 하염없이 기다려야 한다는 큰 단점이 있다. (영어에 자신 있다면 도전!하는 것도 추천.)
결론적으로 위에서 고려한 3가지 방안 중에 1번 방법이 가장 간단할 것이고 “가능하다면 설정으로 이동”이 관건이 되는 부분이다.
reverse_auth를 고민하며 이리저리 코딩을 하다가 bulit-in twitter composer를 사용해보게 되었다. 그러다가 아래와 같은 bulit-in 되어있는 UIAlertView를 보았다.
이 화면에서 Settings를 선택하면 설정으로 이동이 된다! 위에서 언급한 “가능하다면 설정으로 이동”이 공식적으로(?) 되는 것이다.
TWTweetComposeViewController *twit = [[TWTweetComposeViewController alloc] init]; [self presentModalViewController:twit animated:YES];
그런데.. 배경이 영 거슬린다.
유저는 Tweet을 쓸려고 하는 것이 아니고 현재 앱과 연결하기를 원하는데 배경이 저렇게 나와버려 유저는 혼란에 빠질 수 있다.
분명 방법이 있을텐데… 라고 짱돌을 굴리다가 구글신에게 물어보았더니 역시 방법은 stackoverflow에 있었다.
(결정적인 힌트를 준 stackoverflow article)
배경과 키보드 레이아웃을 나타나지 않게 하고 원하는 AlertView만 보이게 하는 방법이다.
TWTweetComposeViewController *twitViewCntrlr = [[TWTweetComposeViewController alloc] init]; /* 뒷 배경 안보이게 하기 */ twitViewCntrlr.view.hidden = YES; twitViewCntrlr.completionHandler = ^(TWTweetComposeViewControllerResult result) { [self dismissModalViewControllerAnimated:NO]; }; [self presentModalViewController:twitViewCntrlr animated:NO]; /* 키보드 레이아웃 숨기기 */ [twitViewCntrlr.view endEditing:YES];
Stackoverflow에 이 팁을 올린 개발자의 말에 의하면 이 방법을 이용했음에도 앱은 정상적으로 등록이 되었다고 하며, iOS6에서 테스트 해본 결과 역시 잘 동작함을 확인하였다.
이 부분을 Apple에서 block할까라는 의문도 들지만.. 최소한 iOS6까지는 잘 될 것이라는 생각이 든다.
필자에게는 아주 유용한 팁이었는데.. 글을 보는 분들에게도 유용한 팁이 되길 바라며… (시스템 언어를 한글로 선택해도 영어로 나오는 저 문구가 문제가 될려나..)