`
stephen830
  • 浏览: 3010540 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

自定义 URL Scheme 完全指南

 
阅读更多

 

自定义 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 调用: 
  1. - (void)buttonPressed:(UIButton *)button 
  2.   NSString *customURL = @"iOSDevTips://"
  3.  
  4.   if ([[UIApplication sharedApplication] 
  5.     canOpenURL:[NSURL URLWithString:customURL]]) 
  6.   { 
  7.     [[UIApplication sharedApplication] openURL:[NSURL URLWithString:customURL]]; 
  8.   } 
  9.   else 
  10.   { 
  11.     UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL error" 
  12.                           message:[NSString stringWithFormat: 
  13.                             @"No custom URL defined for %@", customURL] 
  14.                           delegate:self cancelButtonTitle:@"Ok" 
  15.                           otherButtonTitles:nil]; 
  16.     [alert show]; 
  17.   } 
 
第 5 行代码检查自定义 URL 是否被定义,如果定义了,则使用 shared application 实例来打开 URL (第 8 行)。openURL: 方法启动应用并将 URL 传入应用。在此过程中,当前的应用被退出。
 
通过自定义 URL Scheme 向应用传递参数
有时你需要通过自定义 URL 向应用中传递参数。让我们看看该如何完成这个工作。
NSURL 作为从一个应用调用另一个的基础,遵循 RFC 1808 (Relative Uniform Resource Locators) 标准。 因此你所熟悉的基于网页内容的 URL 格式在这里也适用。
 
在自定义了 URL scheme 的应用中,app delegate 必须实现以下方法: 
  1. - (BOOL)application:(UIApplication *)application 
  2.   openURL:(NSURL *)url 
  3.   sourceApplication:(NSString *)sourceApplication 
  4.   annotation:(id)annotation 
  
从一个应用传递参数到另一个的诀窍是通过 URL。例如,假设我们使用以下的 URL scheme,想传递一个名为 “token”的参数和一个标识注册状态的标志,我们可以像这样创建一个 URL: 
  1. NSString *customURL = @"iOSDevTips://?token=123abct&registered=1"
 
在 web 开发中,字符串 ?token=123abct&registered=1 被称作查询询串(query string)。
 
在被调用(设置了自定义 URL)的应用的 app delegate 中,获取参数的代码如下: 
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
  2.         sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
  3.   NSLog(@"Calling Application Bundle ID: %@", sourceApplication); 
  4.   NSLog(@"URL scheme:%@", [url scheme]); 
  5.   NSLog(@"URL query: %@", [url query]); 
  6.  
  7.   return YES; 
 
以上代码在应用被调用时的输出为: 
  1. Calling Application Bundle ID: com.3Sixty.CallCustomURL 
  2. URL scheme:iOSDevTips 
  3. URL query: token=123abct&registered=1 
 
注意 “Calling Application Bundle ID”,你可以用这个来确保只有你定义的应用可以与你的应用直接交互。
 
让我们改变一下代码,来验证发起调用的应用的 Bundle ID 是否合法: 
  1. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
  2.         sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 
  3.   // Check the calling application Bundle ID 
  4.   if ([sourceApplication isEqualToString:@"com.3Sixty.CallCustomURL"]) 
  5.   { 
  6.     NSLog(@"Calling Application Bundle ID: %@", sourceApplication); 
  7.     NSLog(@"URL scheme:%@", [url scheme]); 
  8.     NSLog(@"URL query: %@", [url query]); 
  9.  
  10.     return YES; 
  11.   } 
  12.   else 
  13.     return NO; 
 
有一点要特别注意,你不能阻止其他应用通过自定义 URL scheme 调用你的应用,然而你可以跳过后续的操作并返回 NO,就像上面的代码那样。也就是说,如果你想阻止其它应用调用你的应用,创建一个与众不同的 URL scheme。尽管这不能保证你的应用不会被调用,但至少大大降低了这种可能性。
分享到:
评论

相关推荐

    VB控制计算机并口示例(含完整可以运行源代码)

    VB控制计算机并口示例(含完整可以运行源代码) 可以通过并口直接控制MCU,做SW控制不错,关键还可以学习并口硬件控制学习。含详细源代码哦

    python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)

    python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码),本资源中的源码都是经过本地编译过可运行的,评审分达到98分,资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、毕业设计、期末大作业和课程设计使用需求,如果有需要的话可以放心下载使用。 python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代码)python毕业设计基于PyTorch的手语识别系统源码+数据集(完整项目代

    基于Unet的树种分别识别模型

    基于Unet的树种分别识别模型

    精选毕设项目-富文本解析,折线图,MD5,bluebird.zip

    精选毕设项目-富文本解析,折线图,MD5,bluebird

    图书管理系统(基于ASP .NET)

    《图书管理系统(基于ASP .NET)》是一款专为学习者设计的应用程序,旨在提供一个全面的图书管理平台。系统的设计采用ASP .NET技术,这是一款由微软开发的用于构建动态网站、web应用和web服务的强大工具。ASP .NET框架以其高效、安全和易于维护的特点,深受开发者的喜爱。 该系统包含了多个核心模块,这些模块覆盖了图书管理的主要功能。有图书录入模块,它允许管理员录入图书的基本信息,如书名、作者、出版社、ISBN号、分类等。图书查询模块提供给用户方便快捷的搜索功能,用户可以根据书名、作者、关键词等条件进行检索。此外,借阅与归还模块确保图书的流通管理,记录图书的借阅状态,提醒用户按时归还,并处理超期罚款等事务。 系统还具备用户管理模块,允许用户注册、登录、修改个人信息。对于权限管理,后台有专门的管理员角色,他们可以对用户进行操作,如分配权限、冻结或解冻账户。同时,系统的统计分析模块能够生成各类报表,如图书借阅量、热门书籍、用户活跃度等,这些数据对于图书馆运营决策有着重要参考价值。 在。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。

    精选毕设项目-查拼音.zip

    精选毕设项目-查拼音

    精选毕设项目-音乐在线歌词搜索.zip

    精选毕设项目-音乐在线歌词搜索

    思维导图制作-会计初级知识重难点-会计务实-所有者权益

    本专刊的主要目的是帮助初学者系统化和结构化地掌握会计知识。我们采用思维导图的形式,将复杂的会计概念和流程进行有效的简化,旨在让学习者能够更清晰地理解这些内容,并增强记忆效果。通过视觉化的方式,读者不仅能够感受到会计知识的关联性,还能轻松掌握关键点,提升学习效率。无论是在学习新知识还是复习旧知识时,这种方法都能够为学习者提供极大的便利和帮助。

    配网两阶段鲁棒优化调度模型 关键词:两阶段鲁棒优化,CCG算法,储能 仿真算例采用33节点,采用matlab+yalmip+cplex编写,两阶段模型采用CCG算法求解 模型中一阶段变量主要包括01

    配网两阶段鲁棒优化调度模型 关键词:两阶段鲁棒优化,CCG算法,储能 仿真算例采用33节点,采用matlab+yalmip+cplex编写,两阶段模型采用CCG算法求解。 模型中一阶段变量主要包括01变量和无功优化变量,核心变量主要存在于二阶段,因此在叠加二阶段变量优化过程中更容易得到最优解,所以有限次迭代即得到收敛的结果。 模型以网损为目标,包括功率平衡、网络潮流、电压电流、蓄电池出力以及无功设备出力等约束。 复现《两阶段鲁棒优化的主动配电网动态无功优化》-熊壮壮,具体内容可自行下载了解。

    1..1行列式的定义.ppt

    1..1行列式的定义.ppt

    精选毕设项目-地图定位.zip

    精选毕设项目-地图定位

    MMC整流器平均值模型simulink仿真,19电平,采用交流电流内环,直流电压外环控制,双二阶广义积分器锁相环,PI解耦环流抑制器,调制方式为最近电平逼近调制,完美运行 波形一二为直流侧电压电流

    MMC整流器平均值模型simulink仿真,19电平,采用交流电流内环,直流电压外环控制,双二阶广义积分器锁相环,PI解耦环流抑制器,调制方式为最近电平逼近调制,完美运行。 波形一二为直流侧电压电流,波形三四分别为主控制器及环流抑制器输出调制信号。

    疫苗发布和接种预约系统-springboot毕业项目,适合计算机毕-设、实训项目、大作业学习.zip

    Spring Boot是Spring框架的一个模块,它简化了基于Spring应用程序的创建和部署过程。Spring Boot提供了快速启动Spring应用程序的能力,通过自动配置、微服务支持和独立运行的特性,使得开发者能够专注于业务逻辑,而不是配置细节。Spring Boot的核心思想是约定优于配置,它通过自动配置机制,根据项目中添加的依赖自动配置Spring应用。这大大减少了配置文件的编写,提高了开发效率。Spring Boot还支持嵌入式服务器,如Tomcat、Jetty和Undertow,使得开发者无需部署WAR文件到外部服务器即可运行Spring应用。 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现为Oracle公司的一部分)在1995年首次发布。Java以其“编写一次,到处运行”(WORA)的特性而闻名,这一特性得益于Java虚拟机(JVM)的使用,它允许Java程序在任何安装了相应JVM的平台上运行,而无需重新编译。Java语言设计之初就是为了跨平台,同时具备面向对象、并发、安全和健壮性等特点。 Java语言广泛应用于企业级应用、移动应用、桌面应用、游戏开发、云计算和物联网等领域。它的语法结构清晰,易于学习和使用,同时提供了丰富的API库,支持多种编程范式,包括面向对象、命令式、函数式和并发编程。Java的强类型系统和自动内存管理减少了程序错误和内存泄漏的风险。随着Java的不断更新和发展,它已经成为一个成熟的生态系统,拥有庞大的开发者社区和持续的技术创新。Java 8引入了Lambda表达式,进一步简化了并发编程和函数式编程的实现。Java 9及以后的版本继续在模块化、性能和安全性方面进行改进,确保Java语言能够适应不断变化的技术需求和市场趋势。 MySQL是一个关系型数据库管理系统(RDBMS),它基于结构化查询语言(SQL)来管理和存储数据。MySQL由瑞典MySQL AB公司开发,并于2008年被Sun Microsystems收购,随后在2010年,Oracle公司收购了Sun Microsystems,从而获得了MySQL的所有权。MySQL以其高性能、可靠性和易用性而闻名,它提供了多种特性来满足不同规模应用程序的需求。作为一个开源解决方案,MySQL拥有一个活跃的社区,不断为其发展和改进做出贡献。它的多线程功能允许同时处理多个查询,而其优化器则可以高效地执行复杂的查询操作。 随着互联网和Web应用的快速发展,MySQL已成为许多开发者和公司的首选数据库之一。它的可扩展性和灵活性使其能够处理从小规模应用到大规模企业级应用的各种需求。通过各种存储引擎,MySQL能够适应不同的数据存储和检索需求,从而为用户提供了高度的定制性和性能优化的可能性。

    jQuery实现左右切换全屏轮播图特效源码.zip

    这是一种全屏轮播风格的特效,使用HTML、CSS和Javript编写。轮播图包含多张图片和对应的文本介绍,通过自动滑动和手动切换两种方式,展示出不同的内容。该轮播图在网页头部或者特定板块上使用,能够为用户提供直观的视觉体验和丰富的内容呈现。而且,该轮播图可以灵活地设置大小、位置、动画等属性,便于根据实际需求进行个性化定制。

    精选毕设项目-图片预览带后端.zip

    精选毕设项目-图片预览带后端

    精选毕设项目-番茄时钟.zip

    精选毕设项目-番茄时钟

    精选毕设项目-简单的商城小应用.zip

    精选毕设项目-简单的商城小应用

    精选毕设项目-仿zcool站酷.zip

    精选毕设项目-仿zcool站酷

    精选毕设项目-录音机.zip

    精选毕设项目-录音机

    南京理工大学毕业论文overleaf LaTex模板,微调版

    南京理工大学毕业论文overleaf LaTex模板,按照我个人的写作需求修改后的版本

Global site tag (gtag.js) - Google Analytics