2

我一直在关注链接以使用x-callback-url. 所以我制作了两个不同的应用程序 - SourceAppTargetApp

源应用

URL方案: 在此处输入图像描述

并实现打开 TargetApp 如下:

@IBAction func btnOpenAppPressed(_ sender:UIButton){

        let url = URL.init(string: "targetapp://x-callback-url/translate?x-success=sourceapp://x-callback-url/acceptTranslation&x-source=SourceApp&x-error=sourceapp://x-callback-url/translationError&word=Hello&language=Spanish")

        if (UIApplication.shared.canOpenURL(url!)){

            UIApplication.shared.open(url!, options: [:], completionHandler: nil)
        }
}

AppDelegate 方法从 TargetApp 接收响应:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

        print("Response From TargetApp==>\(url.absoluteString)")
        return true
}

目标应用

URL方案: 在此处输入图像描述

AppDelegate 方法接收来自 SourceApp 的请求:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

        print("Response From SourceApp==>\(url.absoluteString)")

        return true
} 

TargetApp 的 IBAction 将响应发送回 SourceApp:

@IBAction func btnBackToSourceAppPressed(_ sender:UIButton){

        let url = URL.init(string: "sourceapp://x-callback-url/acceptTranslation?x-source=TargetApp&word=Hola")

        if (UIApplication.shared.canOpenURL(url!)){

            UIApplication.shared.open(url!, options: [:], completionHandler: nil)
        }
}

现在的问题是,我可以从 SourceApp 打开 TargetApp,但无法从 TargetApp 返回到 SourceApp。我什至研究过这种方法,但我发现它和我的一样。

任何帮助将不胜感激。

4

1 回答 1

1

经过2天的奋斗,我发现我没有LSApplicationQueriesSchemes在plist中使用。我还发现,在 Objective-C 中,如果我跳过LSApplicationQueriesSchemes,我可以轻松地在这两个应用程序之间进行通信。但是,如果您使用的是 swift,则必须LSApplicationQueriesSchemes否则,您将得到

-canOpenURL: failed for URL: "targetapp://" - error: "This app is not allowed to query for scheme targetapp"

所以,我不得不使用

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>targetapp</string>
    </array>

在 SourceApp 的 plist 和

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>sourceapp</string>
    </array>

在 TargetApp 的 plist 中。

我制作了两个演示应用程序,它们使用 x-callback-url 轻松演示了应用程序间双向通信。

于 2018-03-29T10:19:27.367 回答