应用程序的跳转一共分为两种情况:
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
-
我们知道iOS没一个应用程序都有一个自己的沙盒,且沙盒和沙盒之间(即是应用与应用之间)是相互独立的。苹果要求每一个应用都只能限制在自身的沙盒中活动,杜绝应用在沙盒外的活动。当然越狱除外!
-
现在的问题是?很多时候我们都要由一个应用去跳转到另一个应用或者跳转到appStore去共享、分享、下载等。但是应用和应用之间又是这么绝缘。不过所幸的是苹果提供给我们一个非常好的方法:就是 URL Scheme
-
他就像一个地址,绑定url scheme 的应用就像是贴了一个独立logo的标签,通过访问应用的url scheme 我们就能跳转到对应的应用中。
说了这么多废话,下面我们开始配置url scheme 。(以Xcode6为基础,最后再说一下可能会遇到的错误)
1.首先打开工程进入tagets的info目录看到URL Tapes
- 我们点击+号添加 在url identifier 中填入格式:com.company.xxx 在url scheme 中填入(这个可以随便填入,不过尽量和你的app保持一致)比如我填入的是 hztcTestApp 那么在调用的时候实际上是 hztcTestApp:// 格式
3.Role里面选择none就可以了
4.此时把这个工程给运行一下,运行成功以后,这个url scheme 就已经注册到模拟器上了(同理,在真机上安装后就已经注册到真及设备上了)
5.然后我们可以通过另一个工程来进行测试。 测试你设备上存在不存在刚刚注册了 url scheme的应用 可以根据此代码调试
BOOL isOpened = NO;
- 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
[[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。
![](http://www.cocoachina.com/cms/uploads/allimg/120529/4064_120529110047_1.jpg)
其次 处理使用你的URL Scheme来调起你的APP的请求
- <pre code_snippet_id="353362" snippet_file_name="blog_20140519_1_1735380" name="code" class="objc">- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- {
- // Do something with the url here
- if (!url)
- {
- return NO;
- }
- NSString *handleUrl = [url absoluteString];
- if ([handleUrl isEqualToString:@"TestBApp://callsuccess"]) {
- return YES;
- }else{
- NSString *urlstr = @"TestAAPP:/com.baidu.sidepath.TestA&_callback=TestAApp://callsuccess";
- NSURL *handlbackeUrl = [NSURL URLWithString:urlstr];
- [[UIApplication sharedApplication] openURL:handlbackeUrl];
- }</pre><br>
- }
- <pre></pre>
- <pre></pre>
- <pre></pre>
如果你不想直接返回callback,而是想启动一个页面那么,此时要考虑你的应用是否已经启动,可以如下判断使用:
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
- sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
- NSString *handleUrl = [url absoluteString];
- if ([handleUrl isEqualToString:@"TestBApp://callsuccess"]) {
- return YES;
- }else{
- UINavigationController *vc = (UINavigationController *)_window.rootViewController;
- if (vc == nil) {
- PathViewController *controller = [[PathViewController alloc] initWithNibName:@"PathViewController" bundle:nil];
- self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- self.mUINavigationController = [[UINavigationController alloc] init];
- [self.mUINavigationController pushViewController:controller animated:YES];
- [self.window addSubview:self.mUINavigationController.view];
- // Override point for customization after application launch.
- self.window.backgroundColor = [UIColor whiteColor];
- [self.window makeKeyAndVisible];
- }
- return YES;
- }<pre code_snippet_id="353362" snippet_file_name="blog_20140519_2_2650140" name="code" class="objc">}</pre>
- <pre></pre>
- 也就是把appdelegate里面的didFinishLaunchingWithOptions初始化app的代码拷贝进去。此时会启动PathViewController这个页面。然后在这个页面里面可以添加一个返回按钮来返回到调用APP。<br>
- <br>
- <br>
再次 在TestAAPp里面使用URl Scheme调起你的APP
- <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];
- <pre></pre>
- <br>
- <h1><a name="t7"></a>第四 注意事项</h1>
- application:handleOpenURL:
- Asks the delegate to open a resource identified by URL. (Deprecated. Use the application:openURL:sourceApplication:annotation: method instead.)
- <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。