是否可以使用bundle identifier
从我们的应用程序中打开一个应用程序。假设我在设备com.test.app1
和com.test.app2
上安装了两个应用。我可以从我的app2打开app1。
我知道openUrl方法。为此,我必须在info.plist中注册url方案。然后我可以使用以下方法:
[[UIApplication sharedApplication] openUrl:[NSURL urlWithString:@"myApp1://"]];
但是如果我没有注册网址方案或者不知道注册网址会怎么样。
任何想法......?
答案 0 :(得分:7)
您可以使用私有API来执行此操作
Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
NSObject * workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
BOOL isopen = [workspace performSelector:@selector(openApplicationWithBundleID:) withObject:@"com.apple.mobilesafari"];
答案 1 :(得分:3)
我认为这不可能。
答案 2 :(得分:3)
您可以使用openUrl
来电,但为了取得成功,您必须在项目的xy-Info.plist
文件中添加一些值。
完成后,您可以致电:
[[UIApplication sharedApplication] openUrl:[NSURL urlWithString:@"xingipad://"]];
答案 3 :(得分:1)
@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
答案 4 :(得分:0)
可以使用URL Schemes。
答案 5 :(得分:0)
答案:您无法仅使用Bundle标识符直接打开应用程序。
解决方案:您可以实现深层链接(并将您的包ID作为深层链接ID)概念来执行此操作:Deep-linking