2017-02-20 5 views
0

내 응용 프로그램에 딥 연결 기능이있어 한 가지 경우에 제대로 작동합니다. 앱을 연 URL에 따라 3 가지 온 보딩 페이지가 있습니다. 그래서 앱이 시작되면 앱을 연 링크 (있는 경우)를 확인한 다음 올바른 온 보딩 페이지를 제시해야합니다.응용 프로그램 openURL은 didFinishLaunchingWithOptions 후에 몇 초 동안 호출됩니다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

하지만 딥 링크 5 초 후 한 호출되는

- (BOOL)application:(UIApplication *)application 
      openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication 
     annotation:(id)annotation 

에서 응용 프로그램을 열 경우 내가에만 알 수 있습니다 : 문제는 그 방법에서 제시하는 어떤 화면 알 필요가 있다는 것입니다 didFinishLaunchingWithOptions이 호출됩니다 (i 초 계산). 그래서 나는 openURL이 호출 될 때까지 잘못된 onboarding 페이지를 볼 수있는 5 초를 가지고있다.

내 질문은 : 앱이 didFinishLaunchingWithOptions 전에 또는 그 전에 URL로 시작했는지 알 수있는 방법이 있습니까? 응용 프로그램은 딥 링크 당신이 찾고있는 발사 옵션 키가 UIApplicationLaunchOptionsURLKey (목표 - C)입니다

답변

1

/UIApplicationLaunchOptionsKey.url (스위프트)에서 열릴 때 didFinishLaunchingWithOptions의 방법 launchOptions으로

은 전무하다.
당신이 아이폰 OS 9 타겟팅 위쪽으로 만

  • application:openURL:options:이 (경우에 응용 프로그램이 이미 (응용 프로그램이 아직 메모리에없는 경우)

    • application:didFinishLaunchingWithOptions:에서 실행 URL을 차단해야하는 경우 배경).

    다음 두 가지 경우 모두를 포함해야한다 UIApplicationDelegate의 최소한의 구현입니다 - 많은 관련이없는 논리를 명확하게하기 위해 생략 된 점에 유의하시기 바랍니다 :

    목표 - C :

    @implementation AppDelegate 
    
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    
        NSURL *url = launchOptions[UIApplicationLaunchOptionsURLKey]; 
        if (url) { 
         // TODO: handle URL from here 
        } 
    
        return YES; 
    } 
    
    - (BOOL)application:(UIApplication *)app 
          openURL:(NSURL *)url 
          options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options { 
    
        // TODO: handle URL from here 
    
        return YES; 
    } 
    
    @end 
    

    스위프트 3 :

    @UIApplicationMain 
    class AppDelegate: UIResponder, UIApplicationDelegate { 
    
        var window: UIWindow? 
    
        func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
    
         if let url = launchOptions?[UIApplicationLaunchOptionsKey.url] as? URL { 
          // TODO: handle URL from here 
         } 
    
         return true 
        } 
    
        func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    
         // TODO: handle URL from here 
    
         return true 
        } 
    } 
    
  • +0

    딥 링크 'launchOptio ns '는 didFinishLaunchingWithOptions에서 nil이지만'openURL '은 (딥 링크 URL이있는) triggerd가됩니다. 내 didboinLaunchingWithOptions 안에 내 onboarding 페이지를 보여줍니다. 앱을 시작할 때 첫 번째 키 창을 어디에 표시해야합니까? –

    +0

    다른 질문이 있습니다. 웹 브라우저에서 앱을여시겠습니까? 최소 iOS 버전을 타겟팅하고 있습니까? application : didFinishLaunchingWithOptions :는 런타임 당 한 번만 호출됩니다. 응용 프로그램이 이미 백그라운드에 있으면 응용 프로그램 : openURL : options :이 대신 호출됩니다. '메인 인터페이스'설정으로 스토리 보드를 사용하는 경우 창 설정에 관한 내 의견이 적용됩니다. application : didFinishLaunchingWithOptions :에서 인터페이스를 직접 설정하는 경우 괜찮을 것입니다. 주석을 무시하십시오. – Olivier

    +0

    명확성을 위해 대답을 개선했습니다. Objective-C 및 Swift 빌드 모두에서 iOS 9.3.4 및 iOS 10.3을 실행하는 장치의 Xcode 8.3에서 테스트되었습니다. 'Info.plist'의'URL Types'>'URL-Appes '와 같은 값을 설정했는지 확인하십시오. (예 : "my-app"), 장치에 응용 프로그램을 만든 다음 그것을 죽인 다음 예.어떤 웹 브라우저에서나 "my-app : //". – Olivier