文章目录
- URL Scheme是什么
由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的,如果存在一样的URL Scheme,那么系统就会响应先安装那个app的URL Scheme,因为后安装的app的URL Scheme被覆盖掉了,是不能被调用的。 - URL Scheme有什么作用
那么app之间的跳转有什么作用呢?我们所使用的每一个app就相当于一个功能,app的跳转可以使得每个app就像一个功能组件一样,帮助我们完成需要做的事情,比如三方支付,搜索,导航,分享等等。 - URL Scheme怎么使用
要跳转到别人的app,就要知道别人的app的跳转协议是什么,需要传入什么参数,我们常见的跳转协议有下面这些:
1.打开Mail
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://info@icloud.com"]]
2.打开电话
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://18688886666"]];
3.打开SMS
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms:18688886666"]];
所以,如果我们希望别人打开我们的app,只要在plist文件中配置一下你的跳转协议即可
1.0 Xcode9之前配置
在 Info.plist 中配置CFBundleURLTypes(URL Types),如下所示:
源代码模式如下:
1.1 Xcode9及之后需要在项目的info栏配置URL types
示例配置如下所示:(本文中假设要设置URL Schemes为testSchemes)
2.在代码中设置识别方法
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
//处理url事件
- (void)handleURLEvent:(NSAppleEventDescriptor)theEvent withReplyEvent:(NSAppleEventDescriptor)replyEvent {
NSString* path = [[theEvent paramDescriptorForKeyword:keyDirectObject] stringValue];
[[NSAlert alertWithMessageText:@"URL Request" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", path] runModal];
}
3.运行程序
先运行一次程序,以便URL Schemes注册到系统。
4.在浏览器输入配置好的URL Schemes
如本文所示,在浏览器输入testSchemes://request=test&arguments=success
'//'后面可以根据需要输入自己的控制参数,弹出如下提示窗口:
5.点击打开,即可调起我们自己的程序
可以通过对这个 URL 进行判断,例如根据不同的 Host,不同的 Query String 来执行不同的动作。
在动作执行完成之后,有可能时需要返回到原app,这样就需要你的app跳转协议的url里面传入调用者app的跳转协议,这样用户在跳转到你的app完成动作之后就能跳转回调用app了。
参考资料
https://www.jianshu.com/p/eed01a661186
https://blog.csdn.net/lovechris00/article/details/77896410