iOS 에서 URL Scheme 을 사용 하여 App 점프 를 하 는 튜 토리 얼

8788 단어 iOSURLScheme점프
URL Scheme 의 역할
우 리 는 모두 애플 폰 에 있 는 앱 이 모두 샌 드 박스 를 가지 고 있다 는 것 을 알 고 있다.앱 은 정보 외 딴 섬 이 므 로 서로 통신 할 수 없다.하지만 iOS 앱 은 앱 간 상호 호출 을 편리 하 게 하기 위해 자체 URL Scheme 을 등록 할 수 있다.우 리 는 시스템 의 OpenURL 을 통 해 이 app 을 열 수 있 고 인 자 를 전달 할 수 있 습 니 다.
예 를 들 어 Safari 에 www.alipay.com 을 입력 하면 알 리 페 이 앱 을 직접 열 수 있 습 니 다.전 제 는 당신 의 핸드폰 에 알 리 페 이 가 설치 되 어 있다 는 것 입 니 다.만약 당신 이 알 리 페 이 를 설치 하지 않 았 다 면 알 리 페 이 다운로드 화면 을 표시 해 야 합 니 다.클릭 하면 App Store 의 알 리 페 이 다운로드 화면 으로 이동 합 니 다.
URL Scheme 은 하나의 앱 을 유일 하 게 표시 해 야 합 니 다.만약 에 설정 한 URL Scheme 이 다른 앱 의 URL Scheme 과 충돌 할 때 앱 이 반드시 시작 되 는 것 은 아 닙 니 다.앱 이 설치 되 어 있 을 때 시스템 에 URL Scheme 이 등록 되 어 있 기 때문이다.
일반적으로 먼저 설 치 된 app 을 호출 합 니 다.하지만 iOS 의 시스템 앱 의 URL Scheme 이 가장 높 을 것 이다.그래서 저희 가 URL Scheme 을 정의 할 때 시스템 app 이 정의 한 URL Scheme 을 피 합 니 다.
등록 URL 구성 표
1.info.plist 에 URL types 추가
항목 마다 info.plist 설정 파일 이 있 습 니 다.info.plist 를 찾 아 Row 추 가 를 오른쪽 클릭 하고 URL types 를 선택 하 십시오.그림 에서 보 듯 이:
201642991122273.jpg (744×498)
2.URL 구성 표 추가
URL types 를 추가 하고 펼 치 기 를 누 르 십시오.오른쪽 키 로 Row 추 가 를 선택 하고 URL 구성 표를 추가 합 니 다.
201642991159813.jpg (413×237)
3.URL 구성 표 설정
iOS DevTip 으로 URL Schemes 설정
201642991223806.jpg (434×176)
4.URL 식별 자 설정
URL Identifier 는 사용자 정의 URL scheme 의 이름 으로 도 메 인 이름 을 반전 시 키 는 방법 으로 이 이름 의 유일 성 을 보증 합 니 다.예 를 들 어 com.iOS StrongDemo.ww.
201642991241207.jpg (475×139)
성공 적 인 시작 알림 추가
테스트 를 편리 하 게 하기 위해 서 저 희 는 AppDelegate 에 UIAlertView 를 추가 합 니 다.app 이 성공 적 으로 열 렸 을 때 알림 을 드 립 니 다.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
    //
    NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@" "
                                           message:text
                                          delegate:nil
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:nil];
    [alertView show];
    return YES;
}
Safari 에서 사용자 정의 URL Schemes APP 시작
URL Schemes 가 설정 되 어 있 으 니 저희 가 설정 한 URL Schemes 가 효과 가 있 는 지 테스트 해 볼 수 있 습 니 다.Safari 를 열 고 주소 표시 줄 에 입력 하 십시오:iOS DevTip:/
201642991258304.png (639×1136)
과연 성공 오픈:
201642991318064.png (639×1136)
주소 표시 줄 에 도 입력 할 수 있 습 니 다:iOS DevTip:/com.iOS StrongDemo.ww.URL Schemes 가 등 록 된 앱 을 열 수도 있다.
다른 앱 을 통 해 URL Schemes 를 등록 한 앱 을 시작 합 니 다.

 NSString *url = @"iOSDevTip://";
//    NSString *url = @"iOSDevTip://com.iOSStrongDemo.www";
if ([[UIApplication sharedApplication]
     canOpenURL:[NSURL URLWithString:url]])
{
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
}
else
{
    NSLog(@"can not open URL scheme iOSDevTip");
}
iOS DevTip 에 등 록 된 앱 을 엽 니 다:URL Scheme://URL identifier,URL Scheme 을 직접 호출 해도 프로그램 을 열 수 있 습 니 다.URL identifier 는 선택 할 수 있 습 니 다.
등 록 된 URL Scheme 을 통 해 대상 앱 에 매개 변 수 를 전달 합 니 다.
URL Scheme 을 통 해 앱 을 시작 하면 간단 하지만 가끔 은 앱 을 시작 할 때 인 자 를 전달 하고 싶 을 때 가 있 습 니 다.이 럴 때 저 희 는 URL Scheme 사용자 정의 URL 을 통 해 인 자 를 전달 할 수 있 습 니 다.
어제 우 리 는 AppDelegate 에서 UIApplication Delegate 의 대리 방법 을 호출 했다.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL*)url
{
    //
    NSString *text = [[url host] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@" "
                                           message:text
                                          delegate:nil
                                 cancelButtonTitle:@"OK"
                                 otherButtonTitles:nil];
    [alertView show];
    return YES;
}
사과 가 이 방법 에 대한 설명 을 살 펴 보 자.

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;  // Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
이 방법 은 앞으로 폐 기 될 것 입 니 다.application:openURL:sourceapplication:annotation:으로 대체 할 수 있 습 니 다.
URL 참조 형식
어제 저희 가 iOS StrongDemo 에 등 록 했 던 URL Scheme 이 뭔 지 기억 나 세 요?아직도 기억 에 남 는 것 은 iOS 가 개발 한 ID:iOS DevTip 입 니 다.
만약 에 우리 가 이름 name 과 핸드폰 번호 phone 두 개의 인 자 를 전달 하고 싶다 면 형식 은 다음 과 같다.

iOSDevTip://?name=ligang&phone=13888888888
어디서 많이 본 듯 한 느낌 은 없 나 요?우 리 는 get 방식 으로 인 터 페 이 스 를 요청 합 니 다.그렇지 않 습 니까?
시 작 된 앱 처리 로 전 송 된 인자

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    NSLog(@"sourceApplication: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    //
    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@" "
                                                        message:[url query]
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
    [alertView show];

    return YES;
}

앱 이 시작 되면 에이전트 방법 application:openURL:sourceapplication:annotation:을 호출 합 니 다.매개 변수 URL 은 APP 를 시작 하 는 URL 이 고 매개 변수 sourceApplication 은 소스 APP 의 Bundle ID 입 니 다.
우 리 는 여전히 Safari 를 통 해 테스트 합 니 다.Safari 의 주소 표시 줄 에 iOS DevTip:/?name=ligang&phone=13888888888 을 입력 하 십시오.
201642991335677.png (639×1136)
앱 을 열 어 매개 변수 가 전달 되 는 지 확인 할 수 있 습 니 다.
201642991500763.png (639×1136)
마지막 으로 인쇄 를 봅 시다.

2015-07-15 22:38:25.655 iOSStrongDemo[9983:2894855] sourceApplication: com.apple.mobilesafari
2015-07-15 22:38:28.664 iOSStrongDemo[9983:2894855] URL scheme:iosdevtip
2015-07-15 22:38:28.665 iOSStrongDemo[9983:2894855] URL query: name=ligang&phone=13888888888
sourceapplication 에서 출력 한 것 은 com.apple.mobilesafari 입 니 다.여기 서 알 수 있 듯 이 Safari 에서 우리 의 앱 을 시작 한 것 입 니 다.
Google 은 URL Scheme 을 사용자 정의 하지만 사용자 정의 URL Scheme 을 통 해 애플 리 케 이 션 을 여 는 것 을 막 을 수 없습니다.어떻게 해결 하지?
우 리 는 해당 sourceApplication,즉 해당 하 는 Bundle ID 를 지정 하여 Bundle ID 를 통 해 우리 의 앱 을 열 수 있 는 지 여 부 를 결정 할 수 있 습 니 다.

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    NSLog(@"sourceApplication: %@", sourceApplication);
    NSLog(@"URL scheme:%@", [url scheme]);
    NSLog(@"URL query: %@", [url query]);

    if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"]){
        //
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@" "
                                                            message:[url query]
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];

        return YES;
    }else{
        return NO;
    }

}

이렇게 하면 우 리 는 Bundle ID 를 통 해 우리 의 앱 을 열 수 있 는 지 여 부 를 결정 할 수 있다.

좋은 웹페이지 즐겨찾기