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..
posted @ 2015-07-17 17:56  小学生之码  阅读(773)  评论(0编辑  收藏  举报