美文网首页
iOS两种通过私有api打开目标应用的方法

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

作者: codehjb | 来源:发表于2019-10-11 19:27 被阅读0次

    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

    来源:掘金

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/bnyxmctx.html