应用之间的跳转在做第三方登陆,分享的时候一般会用到。当设备安装有指定的应用的时候,就可以从当前应用跳转到指定应用,并且能够传递消息。
iOS SDK 提供了一个叫做url scheme的机制来实现这个功能。
首先在被调用的应用中我们需要在项目的info.plist文件里添加一些信息
如图所示配置即可。我们现在假设被调用的应用是B应用,正常运行的是A应用。
URL Schemes 这是是用来让A应用来找到B应用的标志。
URL Identifier 这个不太确定是用来做什么的,我最后删去了这条信息 还是可以正常跳转。
自定义 URL Scheme 完全指南
这个时候已经配置完毕了。然后就用可以在A应用中来写代码 跳转到B应用了。
NSURL * url = [NSURL URLWithString:@"mqq://"]; if ([[UIApplication sharedApplication] canOpenURL: url]) { [[UIApplication sharedApplication] openURL: url]; }
这里mqq是用来调QQ的。 如果只是单纯的调用B应用。 urlString就应该是@"URL Schemes :" 如果要传递一些消息就应该是@"mqq://?name=jack&age=33"。 这样就能顺利调用B应用同时在B应用的AppDelegate里可以重写这样一个方法。
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { return YES; }
url 这个链接中存储了跳转的url scheme以及参数列表,我们通过[url scheme]方法获取前者;用[url query]方法获取?之后的参数列表。
这里我还发现一个问题。参数列表不能出现汉字,否则无法成功跳转。
像腾讯或者新浪微博他们的文档中应该有url scheme的传值标准。
sourceApplication就是A应用的bundleID。
但是这个时候我并没有成功调用起B应用。因为我漏掉了一件事情。 错误信息是这样的。xxxx - error: "This app is not allowed to query for scheme xxxx"
。然后查阅了资料发现了问题的所在。
直接附上解决方法的博文。canOpenURL: failed for URL
网友评论