iOS 에서 URL Scheme 을 사용 하여 App 점프 를 하 는 튜 토리 얼
우 리 는 모두 애플 폰 에 있 는 앱 이 모두 샌 드 박스 를 가지 고 있다 는 것 을 알 고 있다.앱 은 정보 외 딴 섬 이 므 로 서로 통신 할 수 없다.하지만 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 를 선택 하 십시오.그림 에서 보 듯 이:
2.URL 구성 표 추가
URL types 를 추가 하고 펼 치 기 를 누 르 십시오.오른쪽 키 로 Row 추 가 를 선택 하고 URL 구성 표를 추가 합 니 다.
3.URL 구성 표 설정
iOS DevTip 으로 URL Schemes 설정
4.URL 식별 자 설정
URL Identifier 는 사용자 정의 URL scheme 의 이름 으로 도 메 인 이름 을 반전 시 키 는 방법 으로 이 이름 의 유일 성 을 보증 합 니 다.예 를 들 어 com.iOS StrongDemo.ww.
성공 적 인 시작 알림 추가
테스트 를 편리 하 게 하기 위해 서 저 희 는 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:/
과연 성공 오픈:
주소 표시 줄 에 도 입력 할 수 있 습 니 다: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 을 입력 하 십시오.
앱 을 열 어 매개 변수 가 전달 되 는 지 확인 할 수 있 습 니 다.
마지막 으로 인쇄 를 봅 시다.
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 를 통 해 우리 의 앱 을 열 수 있 는 지 여 부 를 결정 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.