博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS应用之间的跳转与数据传递
阅读量:6302 次
发布时间:2019-06-22

本文共 2148 字,大约阅读时间需要 7 分钟。

  在开发的时候遇到需要从其他APP调用自己的APP的需求,比如从Safari中打开APP,并且传递一些信息的需要

  1、首先设置自己的URL types

  打开项目中的工程文件,打开info选项,在下面的URL types中添加自己APP的Identifier,并且自定义一个自己的scheme,如图:

  

  举个例子,设定自己的APP的scheme为 myApp;

  2、其他应用的调用

  其他的用如果想要调起自己的APP,需要执行如下类似代码

  

NSString *paramStr = [NSString stringWithFormat:@"myApp://userInfo....."];    NSURL *url = [NSURL URLWithString:[paramStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];    [[UIApplication sharedApplication] openURL:url];

  myAPP://后面就是需要传进来的值

  3、接受被调起并且获取传来的值

  在appdelegate中添加如下方法

1 -(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation2 {3      NSString *tmpUrl = [url absoluteString];4    5     return YES;6 }

  url就是 myApp后面的 userInfo.....

  sourceApplication主动调起的应用的bundle id

  

  在自己的应用中设定对应的参数来接收数据。

 

  备注:

    我一直想象分享的SDK那样添加一个返回上一个APP的功能,无奈只能获取到上个APP的bundle id,只有系统的私有APi可以使用bundle id调起一个APP,如果不考虑上线审核的话可以添加私有API的framework。

 

  首先要使用class-dump 和dumpFrameworks.pl 工具 将ios的framework导出来。

 
  以下是工具的 地址:
 
  class-dump下载地址http://www.codethecode.com/projects/class-dump/
 
  DumpFrameworks.pl原来的下载地址不能用了,我在github上的别人的越狱程序里面找到的。
 
 
  将下载好的 class-dump 放入usr/local/bin 下. 
 
     如果 ‘/usr/local/bin’ 不知道在哪里,可以在terminal 下输入 ‘open -a Finder /usr/local/bin’ 以便打开目录.
 
  这个bin文件夹  就是所有命令行的可执行文件所在地,并不一定是这个目录,要看各自的 。 
 
  因为dumpFrameworks.pl中对ios库的版本路径可能不一定正确了,所以要自己手动改正。
 
  用terminal直接执行dumpFrameworks.pl就可以了。
 
  会将所有到处的头文件,放到user/Headers文件夹下。
 
  将想用的头文件,组成xxx.framework/Headers的样式。导入工程。
 
  但是bulidsetting 设置framework的search path 时要设置真实的私有库路径,因为我们要用它的可执行文件,只有头文件是不行的。
 
  例    如:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk/System/Library/PrivateFrameworks
 
  这样就可以调用ios的私有库了
  
1 Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace"); 2 NSObject * workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)]; 3 BOOL isopen = [workspace performSelector:@selector(openApplicationWithBundleID:) withObject:@"com.tencent.mqq"];

  上面的代码是用QQ的bundle  调起QQ,以上就是暂时想到的解决方式,如果系统开放更多权限,再增加吧

 

  

转载于:https://www.cnblogs.com/jw-blog/p/5054698.html

你可能感兴趣的文章
ReferenceError: event is not defined
查看>>
男人要内在美,更要外在美
查看>>
为什么要跟别人比?
查看>>
app启动白屏
查看>>
Oracle 提高查询性能(基础)
查看>>
学习知识应该像织网一样去学习——“网状学习法”
查看>>
Hadoop集群完全分布式安装
查看>>
QString,char,string之间赋值
查看>>
我的友情链接
查看>>
Nginx+mysql+php-fpm负载均衡配置实例
查看>>
shell脚本操作mysql数据库 (部份参考)
查看>>
MySql之基于ssl安全连接的主从复制
查看>>
informix的逻辑日志和物理日志分析
查看>>
VMware.Workstation Linux与windows实现文件夹共享
查看>>
ARM inlinehook小结
查看>>
wordpress admin https + nginx反向代理配置
查看>>
管理/var/spool/clientmqueue/下的大文件
查看>>
HTML学习笔记1—HTML基础
查看>>
mysql dba系统学习(20)mysql存储引擎MyISAM
查看>>
Win8转移应用商店的安装目录,用户目录
查看>>