iOS两种通过私有api打开目标应用的方法

1.通过应用 bundle id 打开目标应用

这个头文件中能看到这样一个函数:

- (bool)openApplicationWithBundleID:(id)arg1;

从字面意思就知道啦!通过传入一个bundle id去打开这个应用。利用NSInvocation通过构造LSApplicationWorkspace实例,调用openApplicationWithBundleID,参数就是对应的bundle id

示例代码

id LSApplication = NSClassFromString(@"LSApplicationWorkspace");id workspace = [LSApplication bql_invokeMethod:@"defaultWorkspace"];[workspace bql_invoke:@"openApplicationWithBundleID:"arguments:@[@"com.biqinglin.ivideo"]];复制代码

2.通过临时注册scheme白名单打开目标应用(iOS10以后)

我们知道正常情况下,应用间跳转可通过在配置文件中增加目标应用的scheme的方式去实现,我要说的就是利用这点,只不过我是通过临时注册而非应用内配置的方式,这样就达到足够灵活的目的,不用修改任何线上代码即可实现新增哪些需要跳转的目标应用

同样的,你可以在这个头文件中发现这样一个函数:

- (void)setWhitelistedBundleIDs:(id)arg1;

示例代码

id LSApplication = NSClassFromString(@"LSApplicationRestrictionsManager");id shared = [LSApplication bql_invokeMethod:@"sharedInstance"];[shared bql_invoke:@"setWhitelistedBundleIDs:"arguments:@[@"com.biqinglin.ivideo"]];[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"com.biqinglin.ivideo://"] options:@{} completionHandler:^(BOOL success) {    // 如果!success就重新注册一下,不过我测试发现注册一次,所有app都能通过该函数唤起scheme打开}];复制代码

方法2很特别,讲道理应该是跳转谁,就去注册谁,但是测试发现一部设备中注册一次之后,其他所有应用都能跳转而不需要去注册了,这就极其流氓了...demo

作者:咖喱luya

链接:https://juejin.im/post/5c32c4edf265da6164142b97

来源:掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。