因为项目上有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就是后被调用的方法。
这个方法还是很靠谱的一个好方法,以后可以这么借用了。