2017-04-26 10 views
0

私はopenUrlを介してお互いに通信する2つのアプリケーションがあります。 2番目のアプリを開く前にカップルのことを確認できるようにしたい。オーバーライドcanOpenUrl(_ :) AppDelegate

つまり、App1はApp2を起動します。そのため、App2は指定されたURLを開くことができるかどうかを確認します。可能であれば、打ち上げを続行してください。できない場合は、起動を停止し、App1でエラーを表示します。

iOSにはすでにこの機能が搭載されているようですが、動作させる方法を理解できません。

これはApp1からのコードの例です。App2です。

let url = URL(string: "APP2://Screen1") 
if UIApplication.shared.canOpenURL(url) { 
    UIApplication.shared.open(url, options: [:], completionHandler: { _ in }) 
} else { 
    self.showError("Couldn't Open App2") 
} 

これは、URLを受け入れるようにしようとApp2ののコード例です。

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    guard options[.sourceApplication] as? String == "com.test.app1" else { return false } 

    if self.canLogInFrom(url) { 
     return true 
    else { 
     return false 
} 

私がfalseを返すと、とにかく起動されます。私がこの関数で何を返すのかは関係なく、App2を起動します。

AppDelegate CanOpenURL関数を実装できる方法はありますか?

答えて

1

App1は、App2がインストールされているか、起動できるかどうか、その初期起動が成功したかどうかだけを確認できます。

App1はApp2のapplication(_:open:options:)メソッドで使用された結果を取得する方法がありません。

唯一の選択肢は、App2を回してApp1に何らかの理由で起動が失敗したことをApp1に伝えるURLを付けて起動することです。

+0

返されたブールは 'application(_:open:options:)'メソッドで実際に何をしますか?あたかも無視されているようです。 – SeanRobinson159

+0

これはOSによって何らかの形で使用されるかもしれませんが、結果はApp1に返されません。 – rmaddy

+0

申し訳ありませんが、私は技術的に** App2 **を起動したアプリがわからないので、** App2 **を開くことができなかった場合、以前のアプリに実際に戻ることはできませんでした。 – SeanRobinson159

関連する問題