Xcode6 中URL Scheme的具体使用

应用程序的跳转一共分为两种情况: 
1.从程序A跳转到B 
从程序A跳转到B只需要知道B的URL scheme。 
2.从程序B回到A 
从程序B回到程序A,其实原理一样。在B中要知道A的URL scheme,即可直接跳转。 
因此 
实际上想要跳转到微信只需要知道它的scheme就可以直接进行跳转。 
但是,要想从微信跳转回本应用,那微信就必须知道本应用的URL scheme。就像我们分享之后,有一个到底是回到本应用还是留在微信的时候。这就需要它知道我们APP的schedule。 
//注释 
1.自定义 URL Scheme: 
iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用。 
在微信分享中微信给我们分配的appID其实是我们应用的自定义URL Scheme。它用来从微信回到本应用。我们可以做个试验验证一下,把微信给我们的那个appID直接在Safari中加上(:\)就可以直接打开我们的应用。 
2.如果两个应用的URL Scheme相同: 
那么会跳转回先安装的那个应用上。 
3.URL Identifier 
URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。



原文地址:http://blog.csdn.net/mayerlucky/article/details/41441623

  1. 我们知道iOS没一个应用程序都有一个自己的沙盒,且沙盒和沙盒之间(即是应用与应用之间)是相互独立的。苹果要求每一个应用都只能限制在自身的沙盒中活动,杜绝应用在沙盒外的活动。当然越狱除外!

  2. 现在的问题是?很多时候我们都要由一个应用去跳转到另一个应用或者跳转到appStore去共享、分享、下载等。但是应用和应用之间又是这么绝缘。不过所幸的是苹果提供给我们一个非常好的方法:就是 URL Scheme

  3. 他就像一个地址,绑定url scheme 的应用就像是贴了一个独立logo的标签,通过访问应用的url scheme 我们就能跳转到对应的应用中。

说了这么多废话,下面我们开始配置url scheme 。(以Xcode6为基础,最后再说一下可能会遇到的错误)

1.首先打开工程进入tagets的info目录看到URL Tapes

这里写图片描述

  1. 我们点击+号添加 在url identifier 中填入格式:com.company.xxx 在url scheme 中填入(这个可以随便填入,不过尽量和你的app保持一致)比如我填入的是 hztcTestApp 那么在调用的时候实际上是 hztcTestApp:// 格式

这里写图片描述

3.Role里面选择none就可以了

4.此时把这个工程给运行一下,运行成功以后,这个url scheme 就已经注册到模拟器上了(同理,在真机上安装后就已经注册到真及设备上了)

5.然后我们可以通过另一个工程来进行测试。 测试你设备上存在不存在刚刚注册了 url scheme的应用 可以根据此代码调试

BOOL isOpened = NO;

isOpened = [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"hztcTestApp://"]];

if (isOpened) {

    NSLog(@"有此应用");//由此应用就直接打开    

}else{

    NSLog(@"没有此应用");//若无此应用我跳到了商店的QQ

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"https://itunes.apple.com/cn/app/qq/id451108668?mt=12"]];

}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

6.至此,差不多已经完成了。最后再说一下,可能会出现的问题 :(没有经过完全验证,不能100%肯定,还请见谅)

我认为在targets中的info目录有URLTayes的不要在.plist文件中添加这些 url identifier 和 url scheme 等 因为可能出现不了正确结果! 当然如果没有 在targets中的info目录有URLTayes 可以在.plist文件中进行配置

有兴趣深入了解的可以搜一下“iOS开发应用间的相互跳转”,或者看这边大神的博客已可以:http://www.jianshu.com/p/b5e8ef8c76a3

[java]  view plain  copy
  1. openURL能帮助你运行Maps,SMS,Browser,Phone甚至其他的应用程序。  
  2.   
  3. openURL的使用方法:   
  4.   
  5. [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:myURLString]];  
  6.   
  7. 自己定义URL,方法如下:   
  8.   
  9. 打开info.plist,添加一项URL types  
  10.   
  11. 展开URL types,再展开Item1,将Item1下的URL identifier修改为URL Scheme  
  12. 展开URL Scheme,将Item1的内容修改为myapp  
  13.   
  14. 或者:  
  15.   
  16. (增加一下此段设置)  
  17. <key>CFBundleURLTypes</key>  
  18.     <array>  
  19.         <dict>  
  20.             <key>CFBundleURLSchemes</key>  
  21.             <array>  
  22.                 <string>myapp</string>  
  23.             </array>  
  24.             <key>CFBundleURLName</key>  
  25.             <string>com.yourcompany.appName</string>  
  26.         </dict>  
  27.     </array>  
  28.   
  29. 其他程序可通过myapp://访问此自定义URL  
  30.   
  31. 可通过[[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"myapp://com.yourcompany.appName"]];  
  32.   
  33. 来判断用户机器中是否安装了该程序  
  34.   
  35. 最近接触到程序内打开自己,通过第三方控件来调用本身程序:  
  36.   
  37. 通过- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
  38.   
  39. 可以通过处理url来获取信息扫行相应操作。  


[[UIApplication sharedApplication] openURL:url]; 
通过给url不同的值,可以实现调用系统自带 电话/短信/邮箱/浏览器/… 
1、调用 电话phone 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”tel://800888”]]; 
拨打电话之后不跳转回app 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”telprompt://800888”]]; 
拨打电话之后跳转回app 
2、调用自带 浏览器safari 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”http://www.abt.com“]]; 
3、调用 自带Mail 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”mailto://admin@abt.com”]]; 
4、调用 SMS 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”sms://800888”]]; 
5、调用 app Store 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”itms-apps://”]]; 
6、调用 iBook 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”itms-books://”]]; 
7、调用 Map 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”maps://”]]; 
8、调用 Facetime 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”facetime://”]]; 
9、调用 Music 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”music://”]]; 
10、跳转到系统设置相关界面 
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@”prefs:root=WIFI”]]; 
以下为设置的跳转关键字 
About — prefs:root=General&path=About 
Accessibility — prefs:root=General&path=ACCESSIBILITY 
Airplane Mode On — prefs:root=AIRPLANE_MODE 
Auto-Lock — prefs:root=General&path=AUTOLOCK 
Brightness — prefs:root=Brightness 
Bluetooth — prefs:root=General&path=Bluetooth 
Date & Time — prefs:root=General&path=DATE_AND_TIME 
FaceTime — prefs:root=FACETIME 
General — prefs:root=General 
Keyboard — prefs:root=General&path=Keyboard 
iCloud — prefs:root=CASTLE 
iCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUP 
International — prefs:root=General&path=INTERNATIONAL 
Location Services — prefs:root=LOCATION_SERVICES 
Music — prefs:root=MUSIC 
Music Equalizer — prefs:root=MUSIC&path=EQ 
Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit 
Network — prefs:root=General&path=Network 
Nike + iPod — prefs:root=NIKE_PLUS_IPOD 
Notes — prefs:root=NOTES 
Notification — prefs:root=NOTIFICATIONS_ID 
Phone — prefs:root=Phone 
Photos — prefs:root=Photos 
Profile — prefs:root=General&path=ManagedConfigurationList 
Reset — prefs:root=General&path=Reset 
Safari — prefs:root=Safari 
Siri — prefs:root=General&path=Assistant 
Sounds — prefs:root=Sounds 
Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK 
Store — prefs:root=STORE 
Twitter — prefs:root=TWITTER 
Usage — prefs:root=General&path=USAGE 
VPN — prefs:root=General&path=Network/VPN 
Wallpaper — prefs:root=Wallpaper 
Wi-Fi — prefs:root=WIFI 
INTERNET_TETHERING Internet_tethering — prefs:root= INTERNET_TETHERING

http://blog.csdn.net/wangqiuyun/article/details/8081974

swift 学习:http://www.swiftguide.cn* * 
翻译集合: http://www.swiftguide.cn**

玉令天下的博客:http://yulingtianxia.com/blog/2014/05/02/chu-shi-core-data-2/




openURL的使用方法:
view plaincopy toclipboardprint?
       [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appString]];  
其中系统的appString有:

1.Map    http://maps.google.com/maps?q=Shanghai  
2.Email  mailto://myname@google.com  
3.Tel    tel://10086  
4.Msg    sms://10086  
openURL能帮助你运行Maps,SMS,Browser,Phone甚至其他的应用程序。这是Iphone开发中我经常需要用到的一段代码,它仅仅只有一行而已。
- (IBAction)openMaps {
    //打开地图 
   NSString*addressText = @"beijing";
    //@"1Infinite Loop, Cupertino, CA 95014"; 
   addressText =[addressTextstringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 
   NSString*urlText = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@",addressText]; 
   NSLog(@"urlText=============== %@", urlText);
   [[UIApplicationsharedApplication] openURL:[NSURL URLWithString:urlText]];
}

- (IBAction)openEmail {
     //打开mail // Fire off an email to apple support
      [[UIApplication sharedApplication]openURL:[NSURL   URLWithString:@"mailto://devprograms@apple.com"]];
 } 
 
- (IBAction)openPhone {
  
    //拨打电话
    // CallGoogle 411
    [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"tel://8004664411"]];
 } 
 
- (IBAction)openSms {
    //打开短信
     // Text toGoogle SMS
    [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"sms://466453"]];
}

-(IBAction)openBrowser {
    //打开浏览器
    // Lanuch any iPhone developers fav site
     [[UIApplication sharedApplication] openURL:[NSURLURLWithString:@"http://itunesconnect.apple.com"]];
 }
iphone程序内调用谷歌地图

使用CLLocationManager类,MKMapView。并且实现<MKMapViewDelegate,CLLocationManagerDelegate>
//初始化CLLocationManager,CLLocationManager获得当前地理坐标
locmanager=[[CLLocationManager alloc]init];

[locmanager setDelegate:self];
 //设置精确度
[locmanager setDesiredAccuracy:kCLLocationAccuracyBest];

[locmanager startUpdatingLocation];
执行完以后,会自动调用代理方法:



第一:什么是URL Scheme

   与Android的URL Scheme类似,是为方便app之间互相调用而设计的。你可以通过一个类似URL的链接,通过系统的OpenURl来打开该app,并可以传递一些参数。每个URL必须能唯一标识一个APP,如果你设置的URL与别的APP的URL冲突,此时,你的APP不一定会被调用起来,原因是当APP在安装的时候就已经在系统里面注册了此APP的URL Scheme,如果你的一致但是是后安装的,那么系统不会调用你的APP,因为你的APP设置的URL scheme被覆盖了。

当然系统的APP的URL Scheme是优先级高的,不用想着能覆盖系统APP的URL Scheme的注册调用。


第二:URL Scheme有什么作用:

大家知道在IOS系统里面APP之间是相互隔离的,不像Android,每个组件都可以作为一个独立的功能被其他APP调用,但是,IOS系统里面也需要完成类似于三方功能如支付、搜索跳转、导航等等跨APP的功能,怎么实现呢,苹果就使用了URL Scheme来实现了这个功能。通过各个APP设计的符合苹果的统一规范的URL Scheme,系统就会自动去调用相关的APP来完成你的请求。

比如:我们的APP需要使用支付宝的三方支付功能、我的APP需要使用微信分享好的文章,那么此时就可以通过URL Scheme来传递这些数据到支付宝APP或者微信APP,系统会通过这些APP的URL Scheme来调起这些APP,完成你所需要做的跨APP的功能。


第三:怎么使用呢?

这里分为三步:

首先:配置你的APP

要为 iOS 程序添加自定义协议的支持是一件很方便的事,只需要在程序的 Info.plist 添加一个 URL types 节点就可以了。在这个节点里,可以设置这个程序所支持的自定义协议名称,像 http、ftp 这种,一般我们可以设置为程序英文名称,像淘宝客户端中就设置了 taobao,这样 taobao:// 这个形式的 URL 就会关联到淘宝客户端的 App。


其次 处理使用你的URL Scheme来调起你的APP的请求

如果你的APP为TestB,如果处理成功的Scheme如包含了TestBAPP://callsuccess,那么说明你调用其他的APP成功了。如果不是,那么说明是别的APP如TestAAPP调用了你的APP,此时在你的APPDelegate里面添加如下函数以及实现处理,这里是直接返回告诉TestAAPP调用成功的标识TestAAPP://callsuccess:
[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <pre code_snippet_id="353362" snippet_file_name="blog_20140519_1_1735380" name="code" class="objc">- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url  
  2. {  
  3.     // Do something with the url here  
  4.     if (!url)  
  5.     {  
  6.         return NO;  
  7.     }  
  8.     NSString *handleUrl = [url absoluteString];  
  9.     if ([handleUrl isEqualToString:@"TestBApp://callsuccess"]) {  
  10.         return YES;  
  11.     }else{  
  12.         NSString *urlstr = @"TestAAPP:/com.baidu.sidepath.TestA&_callback=TestAApp://callsuccess";  
  13.         NSURL *handlbackeUrl = [NSURL URLWithString:urlstr];  
  14.         [[UIApplication sharedApplication] openURL:handlbackeUrl];  
  15.       
  16.     }</pre><br>  
  17. }  
  18. <pre></pre>  
  19. <pre></pre>  
  20. <pre></pre>  

如果你不想直接返回callback,而是想启动一个页面那么,此时要考虑你的应用是否已经启动,可以如下判断使用:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url  
  2.   sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  
  3.     NSString *handleUrl = [url absoluteString];  
  4.     if ([handleUrl isEqualToString:@"TestBApp://callsuccess"]) {  
  5.         return YES;  
  6.     }else{  
  7.         UINavigationController *vc = (UINavigationController *)_window.rootViewController;  
  8.         if (vc == nil) {  
  9.             PathViewController *controller = [[PathViewController alloc] initWithNibName:@"PathViewController" bundle:nil];  
  10.               
  11.             self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];  
  12.             self.mUINavigationController = [[UINavigationController alloc] init];  
  13.               
  14.               
  15.             [self.mUINavigationController pushViewController:controller animated:YES];  
  16.             [self.window addSubview:self.mUINavigationController.view];  
  17.               
  18.               
  19.             // Override point for customization after application launch.  
  20.             self.window.backgroundColor = [UIColor whiteColor];  
  21.             [self.window makeKeyAndVisible];  
  22.         }  
  23.         return YES;  
  24.     }<pre code_snippet_id="353362" snippet_file_name="blog_20140519_2_2650140" name="code" class="objc">}</pre>  
  25. <pre></pre>  
  26. 也就是把appdelegate里面的didFinishLaunchingWithOptions初始化app的代码拷贝进去。此时会启动PathViewController这个页面。然后在这个页面里面可以添加一个返回按钮来返回到调用APP。<br>  
  27. <br>  
  28. <br>  

再次 在TestAAPp里面使用URl Scheme调起你的APP

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <pre code_snippet_id="353362" snippet_file_name="blog_20140519_2_5912074" name="code" class="objc"><span style="font-family: Arial, Helvetica, sans-serif;">NSString *urlstr = @"TestBAPP:/com.baidu.sidepath.TestB&_callback=TestAApp://callsuccess";</span></pre>NSURL *url = [NSURL URLWithString:urlstr];[[UIApplication sharedApplication] openURL:url];  
  2. <pre></pre>  
  3. <br>  
  4. <h1><a name="t7"></a>第四 注意事项</h1>  
引用苹果官方的代码注释:
[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. application:handleOpenURL:  
  2. Asks the delegate to open a resource identified by URL. (Deprecated. Use the application:openURL:sourceApplication:annotation: method instead.)  
  3.   
  4. <a target="_blank" href="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:handleOpenURL:">- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url</a>  

该函数已经废弃,不过依然可以使用。在IOS4.2之后可以使用新的API来处理URL Scheme。

本文出处: http://blog.csdn.net/wbw1985/article/details/26264029

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值