2017-02-20 3 views
0

数秒後に呼び出されます。 私は、アプリケーションを開いたURLに応じて3つの異なるオンボードページを持っています。 アプリが起動したら、私はリンクがあればそれを開いてアプリケーションを開き、正しいオンボーディングページを表示する必要があります。 アプリケーションのOpenURLは、私は1ケースの横に正常に動作します私のアプリでディープリンク機能を持っているdidFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
が、ディープリンクがした後に5秒を呼び出さ

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

でアプリを開いた場合、私は唯一知ることができます。問題は、私はこの方法で提示するものをスクリーン知っておく必要があるということですdidFinishLaunchingWithOptionsが呼び出されます(私は秒を数えます)。だから、私は間違ったオンボードページを参照してopenURLが呼び出されるまで(それが呼び出される場合)5秒間を持っています。

だから私の質問は:アプリがdidFinishLaunchingWithOptionsの前または最中のURLから起動されたかどうかを知る方法はありますか?アプリがディープリンクから開いたときdidFinishLaunchingWithOptionsで道launchOptionsことで

がnilである

答えて

1

あなたが探している起動オプションキーは、UIApplicationLaunchOptionsURLKey(のObjective-C)/ ​​(スウィフト)です。
あなたはiOSの9をターゲットにしていると上向きあなただけ

  • application:didFinishLaunchingWithOptions:から打ち上げURLを傍受する必要がある場合(ケースにはアプリはまだメモリにない)
  • application:openURL:options:(場合にアプリがすでにあります背景)。ここで

は両方のケースをカバーするべきUIApplicationDelegateの最小限の実装だ - 多くの無関係なロジックを明確にするために省略されていることに注意してください。

のObjective-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

deeplink 'launchOptioからアプリを開くとdidFinishLaunchingWithOptionsではns 'はnilですが、' openURL 'はトリガーされます(ディープリンクのURLを使用)。あなたは、Webブラウザからアプリを開いている:私はあなたがアプリは[OK]を、私は他のいくつかの質問をしてみましょう –

+0

立ち上げたときに、私は最初のキーのウィンドウが表示されるはずだと思います「didFinishLaunchingWithOptions」、内部の私のオンボーディングページを表示しますか?最低限必要なiOSのバージョンは何ですか? なお、アプリケーション:didFinishLaunchingWithOptionsは:のみ実行時間ごとに一度と呼ばれています。あなたのアプリが既にバックグラウンドにある場合は、代わりにアプリケーション:openURL:options:が呼び出されます。あなたは「メインインターフェイス」の設定とストーリーボードに依存している場合、ウィンドウの設定に関する 私のコメントにのみ適用されます。あなたがapplication:didFinishLaunchingWithOptionsからあなた自身のインターフェースを設定しているなら、あなたは問題ありません。コメントを無視してください。 – Olivier

+0

私はわかりやすくするために私の答えを改善 - それはObjective-Cのとスウィフトのビルドの両方のために、iOSの9.3.4とiOS 10.3を実行しているデバイス上のXcode 8.3でテストされています。 'Info.plist'の' URL Types'> 'URL-Appes 'などの値を設定して、あなたのデバイスにアプリケーションをビルドしてから、それを削除してから、開いてみてください。任意のウェブブラウザで "my-app://" – Olivier

関連する問題