6

是否可以从我们的应用程序中打开一个应用程序bundle identifier。假设我在一台设备上安装了两个应用程序,其中com.test.app1com.test.app2. 我可以从我的 app2 中打开 app1。

我知道 openUrl 方法。为此,我必须在 info.plist 中注册 url 方案。然后我可以使用以下方法:

[[UIApplication sharedApplication] openUrl:[NSURL urlWithString:@"myApp1://"]];

但是如果我没有注册 url 方案或者不知道注册的 url 怎么办。

任何的想法..?

4

6 回答 6

12

您可以使用私有 API 来做到这一点

Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject * workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
BOOL isopen = [workspace performSelector:@selector(openApplicationWithBundleID:) withObject:@"com.apple.mobilesafari"];
于 2016-06-01T01:19:55.107 回答
4

您可以使用该openUrl调用,但为了成功,您必须在项目xy-Info.plist文件中添加一些值。

在此处输入图像描述

完成后,您可以致电:

[[UIApplication sharedApplication] openUrl:[NSURL urlWithString:@"xingipad://"]];

于 2013-02-07T20:35:02.987 回答
4

@EvanJIANG 答案的 Swift 版本。

guard let obj = objc_getClass("LSApplicationWorkspace") as? NSObject else { return false }
let workspace = obj.perform(Selector(("defaultWorkspace")))?.takeUnretainedValue() as? NSObject
let open = workspace?.perform(Selector(("openApplicationWithBundleID:")), with: "com.apple.mobilesafari") != nil
return open
于 2020-07-28T20:11:59.603 回答
3

我不认为这是可能的。

于 2011-08-29T12:05:19.540 回答
0

答:您不能仅使用 Bundle 标识符直接打开应用程序。

解决方案:您可以实施深度链接(并将您的捆绑包 ID 作为您的深度链接 ID)的概念来执行此操作:Deep-linking

于 2018-05-24T04:47:34.887 回答
-1

可以使用 URL Schemes 。

于 2012-08-06T10:15:55.483 回答