2014-08-28 5 views
1

나는 내 응용 프로그램에서 실행될 다른 응용 프로그램도 가지고 있습니다. 하지만 내 목적은 내 앱을 시작하고 URL을 사용하지 않고 수행하는 것입니다. 사용자가 데이터를 교환하지 않고도 앱 간을 전환 할 수있는 방법 일뿐입니다.맞춤 URL 구성표 IOS

Secure Coding guidelines의 사과 멘션과 같은 원치 않는 명령을 걸러 내기 위해 URL을 처리하거나 info.plist에서 구성표를 지정하기 만하면됩니다 (URL 식별자 및 뷰어로 문서 역할과 함께). 내가 URL로 아무 것도하지 않는다는 사실을 감안할 때 충분히 안전합니까?

+1

앱에 아무런 조치가없는 경우 해킹 할 것이 없습니다. 그러나 추가 확장과 코드 투명성을 위해'openURL :'을 구현할 것을 제안합니다. – kelin

+0

@kelin 의견을 보내 주셔서 감사합니다. 그래서, 당신은'openURL :'을 구현하고 그 안에 메서드를 아무것도하지 말라고 제안하고 있습니까? –

+1

그냥 NO를 반환합니다, 괜찮을 것입니다. – kelin

답변

5

예, application:handleOpenURL: 또는 application:openURL:sourceApplication:annotation:을 구현하고 YES를 반환해야합니다. 두 번째 방법은 Apple의 문서에 따라 선호됩니다.

-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ 
    return YES; 
} 

추가적으로 구성표, 소스 응용 프로그램 또는 기타 조건을 점검하고 그에 따라 YES 또는 NO를 리턴 할 수 있습니다. 몇 가지 앱 통신이있는 경우 소스 애플리케이션을 확인하거나 주석을 사용하여 데이터를 전달할 수 있습니다.

NSString* myappScheme = @"anindya"; // or even better read it from your plist 
-(BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ 
    return [url.scheme isEqualToString: myappScheme]; 
} 

보안에 관한 한 실제로 URL을 사용하지 않으므로 아무런 문제가 없습니다. 이와 관련하여 Apple의 조언은 다른 앱에서 URL을 가져 오는 경우 신중하게 파싱하여 악의적 인 것으로 간주해야 함을 의미합니다. 원본 응용 프로그램도 확인하면 자신의 응용 프로그램에서만 데이터를 얻을 수 있습니다.

+1

답변을 주셔서 감사합니다. 한 가지 질문 : 구성표가 잘못되면 응용 프로그램이 처음에는 실행되지 않을 것이라고 생각했습니다. 따라서 내 계획이 anindya이고 일부 응용 프로그램이 anindya123으로 시작하려고하면 내 응용 프로그램이 시작되지 않습니다. 그럼 왜 수표를 발행하는지, 설명해 주시겠습니까? –

+1

여기서 NO를 반환하면 URL이 실행되지 않습니다. 즉이 메소드는 "델리게이트에게 URL로 식별 된 리소스를 열 것을 요청합니다." 따라서 "예를 반납하지 않으면 앱이 열리지 않습니다"- 올바른 것 같지 않습니다. –

+1

URL 구성표를 확인하지 않아도됩니다. OS는'info.plist'에서 URL 스키마에 대한 지원을 문서화 한 앱만 호출 할 것입니다. 어떤 종류의 수표도하지 않고'YES'를 반환 할 수 있습니다. – orkoden