2014년 5월 15일 목요일

[iOS6] Twitter에 이미지와 링크 올리기

iOS6에서 트위터에 이미지와 글을 올릴 수 있는 방법을 자체 Framework으로 제공하고 있습니다.
Social.framework를 추가하고, social/social.h 를 임포트한 후에 실행 시킬 수 있습니다.

1. 트윗을 보낼 수 있는지 확인하는 코드
  SLComposerViewController의 isAvailableForServiceType 함수를 통해서 확인할 수 있으며, 전송하지 못할 경우, 사용자에게 적절한 문구를 보여줘야 합니다.

2. 전송한 결과값을 받아야 하는 경우
  completionHandler에 블록 함수를 설정해서, 결과를 받아올 수 있습니다.

3. 초기 메시지 추가
 - setInitialText를 통해서 초기 메시지를 넣을 수 있습니다.

4. 이미지 추가
 - addImage : 이미지를 추가할 수 있습니다.

5. URL 추가
 - addURL: NSURL객체를 추가할 수 있습니다.

source code
#import 
@import Social;
...
- (IBAction)tweetThisPage:(UIBarButtonItem *)sender
{
    if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
        SLComposeViewController *composer = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
        [composer setInitialText:@"This is my first tweet in my app!"];
        [composer addImage:[self loadImage]];
        [composer addURL:[NSURL URLWithString:APP_URL_IN_ITUNES]];
        composer.completionHandler = ^(SLComposeViewControllerResult result){
            switch(result) {
                    //  This means the user cancelled without sending the Tweet
                case SLComposeViewControllerResultCancelled:
                    NSLog(@"Canceled");
                    break;
                    //  This means the user hit 'Send'
                case SLComposeViewControllerResultDone:
                    NSLog(@"Tweet Done");
                    break;
            }
        };
        [self presentViewController:composer animated:YES completion:^{
            NSLog(@"Tweet Composer present completed");
        }];
    }else{
        //트위터 아이디가 설정되어 있지 않거나, 인터넷에 연결이 안되어 있는 경우..
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Sorry"
                                                            message:@"You can't send a tweet right now, make sure your device has an internet connection and you have at least one Twitter account setup"
                                                           delegate:self cancelButtonTitle:@"OK"
                                                  otherButtonTitles: nil];
        [alertView show];
    }
}

설정에 트위터 아이디가 설정이 되어 있지 않으면, 아래와 같이 표시가 됩니다.
Twitter ID가 없는 경우
아이디가 설정화면에서 정상적으로 설정이 되어 있으면, 아래와 같이 표시됩니다.
설정된 트위터 아이디로 트윗을 작성중.
만약 작성 중에, 인터넷 연결이 끊기게 되면, 아래와 같이 Post를 하였을 때, 표시됩니다.
개발자가 해준 부분은 없으며, 시스템에서 자동으로 표시하는 화면입니다.
트윗을 보내지 못했을 때, 표시화면
위 화면이 표시될 경우에도, completionHandler에는 정상적으로 전송이 되었다고 결과 값을 리턴하게 되므로, 구분을 잘할 수 있어야 겠습니다.

참고:

 트위터 개발자 센터 문서: Integrating with Twitter on iOS
 Ray Wenderlich : Beginning Twitter in iOS6 Tutorial