在 deeplinks 的情况下,从以编程方式包含应用程序返回 link 到以前的应用程序
Back link to previous app from containing app progmatically in case of deeplinks
我创建了一个带有扫描按钮的键盘扩展,用于在我包含的应用程序中打开条形码扫描器。扫描完成后,它应该导航回初始应用程序,条形码数据应设置为启动键盘的文本字段的文本,然后我们单击扫描按钮。
这个应用程序 Scandit Wedge 以同样的方式进行操作。但我找不到实现相同目标的方法。
请参考下面的GIF。
https://s3.amazonaws.com/id123-dev-ios/scandit.gif
如有任何帮助,我们将不胜感激。
没有publicAPI切换到之前的app,这里给出答案:
但如果您知道应用程序的捆绑 ID 和 url 方案,则可以这样做。您可以在互联网上找到非官方列表。假设您能够识别源应用程序,您可以在 AppDelegate
:
中执行类似的操作
public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
guard let applicationBundleId = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String else {
return true
}
// Save your source application
sourceApplicationBundleId = applicationBundleId
return true
}
var sourceApplicationBundleId: String?
// Attempt to open application from which your app was opened
func openApplication() {
guard let applicationBundleId = sourceApplicationBundleId, let url = url(for: applicationBundleId) else {
return
}
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
func url(for bundleId: String) -> URL? {
guard let scheme = knownUrlSchemes[bundleId] else {
return nil
}
return URL(string: scheme)!
}
// A list of known url schemes
var knownUrlSchemes: Dictionary<String, String> = {
return ["com.google.Maps": "comgooglemaps://",
"com.facebook.Facebook": "fb://"]
}()
我创建了一个带有扫描按钮的键盘扩展,用于在我包含的应用程序中打开条形码扫描器。扫描完成后,它应该导航回初始应用程序,条形码数据应设置为启动键盘的文本字段的文本,然后我们单击扫描按钮。
这个应用程序 Scandit Wedge 以同样的方式进行操作。但我找不到实现相同目标的方法。 请参考下面的GIF。
https://s3.amazonaws.com/id123-dev-ios/scandit.gif
如有任何帮助,我们将不胜感激。
没有publicAPI切换到之前的app,这里给出答案:
但如果您知道应用程序的捆绑 ID 和 url 方案,则可以这样做。您可以在互联网上找到非官方列表。假设您能够识别源应用程序,您可以在 AppDelegate
:
public func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
guard let applicationBundleId = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String else {
return true
}
// Save your source application
sourceApplicationBundleId = applicationBundleId
return true
}
var sourceApplicationBundleId: String?
// Attempt to open application from which your app was opened
func openApplication() {
guard let applicationBundleId = sourceApplicationBundleId, let url = url(for: applicationBundleId) else {
return
}
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
func url(for bundleId: String) -> URL? {
guard let scheme = knownUrlSchemes[bundleId] else {
return nil
}
return URL(string: scheme)!
}
// A list of known url schemes
var knownUrlSchemes: Dictionary<String, String> = {
return ["com.google.Maps": "comgooglemaps://",
"com.facebook.Facebook": "fb://"]
}()