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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论