Develop

[ios] 앱에서 다른 앱 실행시키기

by hooni posted Sep 05, 2013
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
AppA 앱에서 AppB 앱을 실행시키기를 해보겠습니다.

OpenURL URL Schemes, URL Schemes, handleOpenURL 이용방법 또는 Header, 헤더 라고 말하는 것을 간단히 말하면 AppB:// 와 같은 형태로 호출시 쓰이는 형태로, 홈페이지에서 http://와 같이 사용되는 형태의 머릿글 이라고 생각하면 좋습니다.

위에서 AppB는 앱 인증 App ID가 com.test.AppB일 경우에 AppB를 말합니다.
  
호출 받는 쪽, 즉, AppB 에서 해줘야 하는 부분을 살펴보겠습니다.

선언은 projectname-info.plist 파일에 항목을 추가해야 합니다.
1) info.plist에  URL Schemes 추가
2) 소스 AppDelegate.m에 handleOpenURL 메소드 추가
3) 다른 앱 또는 HTML에서 호출 사용 (HTML의 href를 이용 형태)
 
추가설명)Xocde에서 -info.plist 파일을 열고 URL Types를 추가하고 URL identifier에 
com. test.AppA 형태로 입력하고 item0에 URL Schemes를 추가하여 item0에 url scheme에 연결될 스키마 이름을 AppB형태로 입력합니다.

그림으로 보겠습니다.

urlscheme.png 
위와 같이 plist에다가. URL types 를 만들어 URL Schemes 와 URL identifier 을 정해서 지정한대로 설정해주어야 합니다.


이번엔 AppA, 즉 호출하는 쪽에서 호출하는 방법에 대해 알아보겠습니다.

간단히 버튼을 하나 만들어서 버튼이벤트에 호출하는 메소드를 추가했습니다.

BOOL isInstalled =
        [[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"AppB://"];

if (!isInstalled) {
        // 설치 되어 있지 않습니다! 앱스토어로 안내...
        //[[UIApplication sharedApplication] openURL: [NSURL URLWithString: appstoreurl]];
}

위와 같이 호출하면 호출이 됩니다.

그런데 정보를 넘기고 싶으시다고요? 그럼 또 방법이 있죠 ㅎㅎㅎㅎ

[[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"AppB://"];   
이렇게 호출을 해줄때 AppB:// 이 뒷부분에 넘기고 싶은 정보를 넘겨주시면됩니다.

[[UIApplication sharedApplication]
        openURL:[NSURL URLWithString:@"AppB://넘기고 싶은정보"];

이렇게요,


그럼 AppB에서는

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
여기에서 메세지를 받을 수 있습니다.

간단하게 받는 메세지 전부를 Alert창으로 띄우는 예제를 보시면,
 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
        // 앱 자신이 호출된 경우에 얼럿창 띄우기
        NSString *strURL = [url absoluteString];

        UIAlertView *alertView= [[UIAlertView alloc] initWithTitle:@"call message"
                                                        message:strURL
                                                        delegate:nil
                                                        cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alertView  show];
        [alertView  release];

        return YES;
}