iPhone上URL Schemes的作用为应用程序提供了一个其他应用程序或者safari可以启动他的方法.
首先,看下如何在自己的应用程序中打开其它的应用程序:
1.打开Google
Map
// Create
your query ...
NSString*
searchQuery = @"1 Infinite Loop, Cupertino, CA
95014";
// Be
careful to always URL encode things like spaces and other symbols
that aren‘t URL friendly
searchQuery
= [addressText
stringByAddingPercentEscapesUsingEncoding:
NSUTF8StringEncoding];
// Now
create the URL string ...
NSString*
urlString = [NSString
stringWithFormat:@"http://maps.google.com/maps?q=%@",
searchQuery];
// An the
final magic ... openURL!
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:urlText]];
2.打开Mail
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@"mailto://info@iphonedevelopertips.com"]]
3.打开电话
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@"tel://8004664411"]];
4.打开SMS
[[UIApplication sharedApplication] openURL:[NSURL
URLWithString:@"sms:55555"]];
5.打开AppStore
NSURL
*appStoreUrl = [NSURL
URLWithString:@"http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=291586600&mt=8"];
[[UIApplication sharedApplication] openURL:appStoreUrl];
其次,我们看下如何让其它应用程序,打开我们自己的程序
原理很简单,首先Schemes是在你的应用程序的info.plist里面定义的,在安装应用程序后.应用程序可以解析你的info.plist,如果
检测到CFBundleURLTypes,会将相应Scheme注册到系统里面。如果有应用程序通过[[UIApplication
sharedApplication]
openURL:url]打开了safari或者直接在safari里面输入URL.系统会检测URL,然后对照已经注册的scheme来启动相应的应用
程序.比较常见的scheme有http,mailto,tel,sms.
当然你可以自己定义一个.
被启动的应用程序会调用
-(BOOL)application:(UIApplication*) application
handleOpenURL:(NSURL *)URL (4.2以前的iOS)
或者
-
(BOOL)application:(UIApplication *)application
openURL:(NSURL *)url sourceApplication:(NSString
*)sourceApplication annotation:(id)annotation (4.2以后的iOS)
这个函数返回的是bool值,他的返回值指明了是否根据URL的内容是否合法来打开指定的应用程序.当你的应用程序定义了一个scheme可以让别人打开
的话,并且需要接受一些参数作为启动参数的时候.这是非常危险的.因此需要对接受到的URL进行检查,如果符合你的要求,那就打开应用程序,如果不符合,
可以拒绝打开!
要实现这么一个功能,具体步骤如下:
(1)在info.plist里面,添加 CFBundleURLTypes,然后在生成的URL
Scheme输入你自己的定义的Scheme
(2)在info.plist 里面添加CFBundleURLName;他是你的scheme的一个别名.具体如下
好吧,编译上传模拟器或者真机,在safari里面输入 schemes://url 来测试下能否启动你的应用程序
上述例子为MosApp://balabala..