自定义 URL Scheme 完全指南
转载 http://www.cocoachina.com/industry/20140522/8514.html
Phone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用。
iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用。
注册自定义 URL Scheme
注册自定义 URL Scheme 的第一步是创建 URL Scheme — 在 Xcode Project Navigator 中找到并点击工程 info.plist 文件。当该文件显示在右边窗口,在列表上点击鼠标右键,选择 Add Row:
向下滚动弹出的列表并选择 URL types。
iOS Custom URL Scheme
点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。建议采用反转域名的方法保证该名字的唯一性,比如 com.yourCompany.yourApp。
urlScheme2a
点击 Item 0 新增一行,从下拉列表中选择 URL Schemes,敲击键盘回车键完成插入。
iOS Custom URL Scheme
注意: URL Schemes 是一个数组,允许应用定义多个 URL schemes。
iOS Custom URL Scheme
展开该数据并点击 Item 0。你将在这里定义自定义 URL scheme 的名字。只需要名字,不要在后面追加 :// — 比如,如果你输入 iOSDevApp,你的自定义 url 就是 iOSDevApp://
iOS Custom URL Scheme
此时,整个定义如下图:
iOS Custom URL Scheme
虽然我赞同 Xcode 使用描述性的名字的目的,不过看到创建的实际的 key 也是非常有用的。这里有一个方便的技巧,右键点击 plist 并选择 Show Raw Keys/Values,就能看到以下效果:
iOS Custom URL Scheme
还有另一种有用的输出格式,XML,因为可以非常容易的看到字典和原始数组及其包括的实体的结构。点击 plist 并选择 Open As – Source Code:
iPhone Custom URL Scheme
从 Safari 中调用自定义 URL Scheme
定义了 URL scheme,我们可以运行一个快速测试来验证应用是否如我们所期望的被调用。在这之前,我创建了一个准 UI 以辨别带有自定义 URL 的应用。该应用只有一个 UILabel,带有文本 “App With Custom URL”(下载源代码)。
iOS App with Custom URL
使用模拟器调用应用的步骤:
1. 在 Xcode 中运行应用
2. 一旦应用被安装,自定义 URL scheme 就会被注册
3. 通过模拟器的硬件菜单中选择 Home 来关闭应用
4. 启动 Safari
5. 在浏览器地址栏输入之前定义的 URL scheme(如下)
Call Custom URL Scheme from Safari
此时 Safari 将会关闭,应用会被带回到前台。祝贺你刚刚使用自定义 URL scheme 调用了一个 iPhone 应用。
从另一个 iPhone 应用中调用自定义 URL Scheme
让我们看看如何从另一个应用中调用自定义 URL scheme。我又创建了一个非常简单的 iPhone 应用,它只有一个 UILabel 和一个 UIButton — 前者显示了一段信息,告诉你这个应用将要通过自定义 URL scheme 来调用另一个应用,按钮则开始这个行为(下载源代码)。
iPhone app that call Custom URL Scheme
buttonPressed 方法中的代码处理 URL 调用:
- - (void)buttonPressed:(UIButton *)button
- {
- NSString *customURL = @"iOSDevTips://";
- if ([[UIApplication sharedApplication]
- canOpenURL:[NSURL URLWithString:customURL]])
- {
- [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]];
- }
- else
- {
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error"
- message:[NSString stringWithFormat:
- @"No custom URL defined for %@", customURL]
- delegate:self cancelButtonTitle:@"Ok"
- otherButtonTitles:nil];
- [alert show];
- }
- }
第 5 行代码检查自定义 URL 是否被定义,如果定义了,则使用 shared application 实例来打开 URL (第 8 行)。openURL: 方法启动应用并将 URL 传入应用。在此过程中,当前的应用被退出。
通过自定义 URL Scheme 向应用传递参数
有时你需要通过自定义 URL 向应用中传递参数。让我们看看该如何完成这个工作。
NSURL 作为从一个应用调用另一个的基础,遵循 RFC 1808 (Relative Uniform Resource Locators) 标准。 因此你所熟悉的基于网页内容的 URL 格式在这里也适用。
在自定义了 URL scheme 的应用中,app delegate 必须实现以下方法:
- - (BOOL)application:(UIApplication *)application
- openURL:(NSURL *)url
- sourceApplication:(NSString *)sourceApplication
- annotation:(id)annotation
从一个应用传递参数到另一个的诀窍是通过 URL。例如,假设我们使用以下的 URL scheme,想传递一个名为 “token”的参数和一个标识注册状态的标志,我们可以像这样创建一个 URL:
- NSString *customURL = @"iOSDevTips://?token=123abct®istered=1";
在 web 开发中,字符串 ?token=123abct®istered=1 被称作查询询串(query string)。
在被调用(设置了自定义 URL)的应用的 app delegate 中,获取参数的代码如下:
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
- sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- {
- NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
- NSLog(@"URL scheme:%@", [url scheme]);
- NSLog(@"URL query: %@", [url query]);
- return YES;
- }
以上代码在应用被调用时的输出为:
- Calling Application Bundle ID: com.3Sixty.CallCustomURL
- URL scheme:iOSDevTips
- URL query: token=123abct®istered=1
注意 “Calling Application Bundle ID”,你可以用这个来确保只有你定义的应用可以与你的应用直接交互。
让我们改变一下代码,来验证发起调用的应用的 Bundle ID 是否合法:
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
- sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- {
- // Check the calling application Bundle ID
- if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"])
- {
- NSLog(@"Calling Application Bundle ID: %@", sourceApplication);
- NSLog(@"URL scheme:%@", [url scheme]);
- NSLog(@"URL query: %@", [url query]);
- return YES;
- }
- else
- return NO;
- }
有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作并返回 NO,就像上面的代码那样。也就是说,如果你想阻止其它应用调用你的应用,创建一个与众不同的 URL scheme。尽管这不能保证你的应用不会被调用,但至少大大降低了这种可能性。
相关推荐
抖音快手URL Scheme 里面包含了抖音快手,进入直播间,进入用户,hone,等 手机中的APP都有一个沙盒,APP就是一个信息孤岛,相互是不可以进行通信的。但是iOS的APP可以注册自己的URL Scheme,URL Scheme是为方便app...
做了个Url Scheme在两个app之间跳转的demo,供自己备份使用
Custom_URL_Scheme 创建模板以滥用自定义URL方案的工具
Android中的Scheme是一种页面内跳转协议,通过自定义Scheme协议,可以跳转到app中的任何页面。 服务器可以定制化跳转app页面 app可以通过Scheme跳转到另一个app页面 可以通过h5页面跳转app原生页面
常用的ios上面的URL scheme 可以用[UIApplication]类示例的openURL跳转到对应设置界面
url 里每个 fragment 对应的 名词解析
1.html打开APP 2.APP打开APP
Intent scheme url是一种用于在web页面中启动终端app activity的特殊URL,在针对intent scheme URL攻击大爆发之前,很多android的浏览器都支持intent scheme url。 Intent scheme url的引入虽然带来了一定的便捷性,...
在做查询手机已安装App时,如果没有私有API,就必须通过应用的AppID和URL Scheme来识别
通过超链接url打开一些常见app(scheme)
iOS开发,两个app之间相互跳转(URL Scheme)并且带有类似于支付宝的回调处理 下面是我的简书地址,大家也可以通过简书向我提问 http://www.jianshu.com/users/e50ecd81ad38/latest_articles
接下来就以我之前写的UIActivityViewController系统原生分享-仿简书分享和iOS开源小项目-WSL两个Demo为例,让我们看下怎么可以让UIActivityViewController系统原生分享-仿简书分享唤起iOS开源小项目-WSL并进行通信、...
iOS——Scheme是什么、怎么自定义Scheme、JLRoutes博文的使用中的源代码 博文地址:http://blog.csdn.net/u010127917/article/details/50451251
自定义URL方案Cordova / PhoneGap插件通过这样的链接启动您的应用程序: mycoolapp://谨防: -此Apache Cordova问题导致Cordova-iOS 3.7.0出现问题:冷启动时未调用handleOpenURL函数。 使用高于或低于3.7.0的版本。...
URL Scheme 应用示例-双向openURL实现文档
URL_Scheme页面跳转协议使用Demo,基于Kotlin,下载使用问题请留言沟通
使用shceme跳转支付宝指定页面,从支付宝APK提取出来,key的数字就是scheme的said,自行替换即可,json里有部分是之前的支付宝的活动页面,跳转了会提示已暂停服务 //扫一扫 alipayqr://platformapi/startapp?saId=...
iPhone开发技巧URLScheme启动进程调试教程