您的位置:首页 > 移动开发

iOS app之间互相调用

2014-10-27 22:00 399 查看
因为项目上有app互相调用需求,需要实现第三方客户端或者浏览器调用的接口。初次面临这个问题,一时间都不知道该怎么处理,幸好网上能查到相关资料。现将思路记录如下,以供自己日后参考。

首先需要设置被调用的app的URL Scheme,关于URL
Scheme的讲解及其作用这篇文章里有详细描述点击打开链接。与Android的URL
Scheme类似,ios的app
URL Scheme也是为方便app之间互相调用而设计的。具体设置方式如下:

打开程序的Info.plist,

1: 如果列表里没有URL types,随意点一个key行后面+号,输入大写URL选择URL types

2: 右键URL types,选择add row

3: item0下改成url identifier,后面的value值随意写,com.xx,xx



4: 加一行,选择url schemes,item后面值写成你需要的,譬如sql://,以后别的app就可以用
比如有另一个程序需要调用此标示的app,可以按以下方式:
[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"sql://******"]];

“****”里可以是自己随便给的约定参数,只要前缀没错,且能唯一标识被调用的app,那其它应用就可以通过上述语句调起该app。

在被调用的app的下面这个方法里,可以接收传过来的相应参数,进行处理

//----------------

//处理接收过来的url

//----------------
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{

NSString *urlStr = [NSString stringWithFormat:@"%@",url];
NSArray *targetStrArray = [[NSArray alloc] init];
__block NSString *targetStr =nil;
targetStrArray = [urlStr componentsSeparatedByString:@"//"];
targetStrArray = [targetStrArray objectAtIndex:1];
targetStrArray = [urlStr componentsSeparatedByString:@"."];
targetStr = [targetStrArray lastObject];
if()
{
[_delegatetoNavi];
}
else if ([targetStr isEqualToString:@"MAP"])
{
}

return YES;
}

!!!注意一点,appdelegate中的
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions;
方法比上面的那个处理接收过来的urlstring会更早的被app调用。检验方法就是分别在两个方法里各写一个alertView,这样显示在上面的alertview就是后被调用的方法。
这个方法还是很靠谱的一个好方法,以后可以这么借用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: