iOS URL Schemes 的定义和使用
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..
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..