`
stephen830
  • 浏览: 3010187 次
  • 性别: 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。尽管这不能保证你的应用不会被调用,但至少大大降低了这种可能性。
分享到:
评论

相关推荐

    iOS WKWebView无法处理URL Scheme和App Store链接的问题解决

    如果是自定义URL Scheme,同样使用该方法处理。对于其他正常的HTTP/HTTPS链接,允许WKWebView继续加载。 通过以上方法,你可以确保WKWebView正确处理URL Scheme和App Store链接,从而提供良好的用户体验。在实际...

    ios一个app应用内部调用另一个新的app应用

    在实际开发过程中,确保遵循Apple的App Store审核指南,因为URL Scheme的滥用可能会导致应用被拒绝。同时,为了用户体验,调用新应用时应提供足够的上下文信息,让用户明白为何需要打开另一个应用。 综上所述,iOS...

    ios app调用第三方app

    这可以通过自定义URL Scheme或深链接的回调机制实现。 文件名"2017年05月09日171908可以调用萤石云和中维世纪"可能是相关代码示例或教程的文档,其中可能包含了如何具体调用这两个应用的代码片段。为了进一步学习,...

    IOS应用源码之应用之间调用.zip

    字典中`CFBundleURLSchemes`键的值是你的自定义URL Scheme,如`myapp:`。 2. **处理URL请求**:在你的App Delegate中,需要实现`application(_:open:options:)`方法。这个方法会在应用被唤起处理URL时被调用。你...

    应用之间的交互 iOS

    URL Scheme是一种自定义的URL格式,允许一个应用启动另一个应用并执行特定的操作。开发者可以为自己的应用注册一个唯一的URL Scheme,当用户点击一个带有该Scheme的链接时,系统会识别并启动对应的应用。例如,...

    两个App相互跳转

    开发者可以在自己的App中定义一个自定义的URL Scheme,然后在需要跳转的地方通过`UIApplication`的`openURL:`方法启动其他已注册了对应URL Scheme的App。 以下是一个简单的iOS示例代码片段,展示了如何从一个App...

    iOS两个app之间的相互跳转,并带有回调处理

    URL Scheme是一种自定义的协议,类似于HTTP或FTP,但它是专门为应用程序定制的。每个iOS应用都可以注册一个唯一的URL Scheme,使得其他应用可以通过这个Scheme来启动它,或者传递数据。这种机制为应用间的数据共享、...

    ios 支付宝demo,可供自定义支付和跳转支付宝界面支付

    3. **设置URL Scheme**:为了让支付宝能够回调你的应用,需要在Info.plist中设置应用的URL Scheme,并在支付宝开放平台进行关联。 4. **处理支付参数**:根据业务需求,生成符合支付宝规范的订单参数,包括商品信息...

    iOS开发动态更换app图标

    另一种方法是通过自定义URL Scheme或Universal Links来触发图标更换。当用户点击特定链接时,可以调用App内的方法来更改图标。但这需要用户手动触发,不如按Home键自动更换直观。 4. **运用Notification Service ...

    IOS自定义弹框公告+时间锁+跳转官网+链接,锁库名等等注意:key就是v-team-,value就是你要显示的内容.zip

    - 自定义弹框的设计应遵循Apple的人机交互指南,确保用户体验的一致性和易用性。 - 弹框内容应简洁明了,避免过多的信息干扰用户。 2. **时间锁**: - 时间锁功能用于限制弹框的显示频率,防止频繁打扰用户。...

    IOS 拨打电话(三种方式)

    iOS系统支持使用`tel:`URL scheme来启动电话应用并拨打指定号码。这是最简单且最直接的方式。例如,如果你有一个电话号码`1234567890`,你可以创建一个URL字符串`tel:1234567890`,然后使用`UIApplication`的`...

    OC - 内置Safari

    URL Scheme是一种自定义的协议,可以让应用之间通过特定的URL进行通信。例如,你可以创建一个自定义的URL Scheme,使得用户点击一个链接时,可以直接在你的应用中打开。 Universal Links则是一种更现代的解决方案...

    ios-FileType.zip

    在Info.plist中添加`CFBundleURLSchemes`键,值为一个数组,包含你的自定义URL Scheme。例如,如果你的scheme是`myapp`,那么用户可以通过`myapp://file`启动你的应用并传递文件路径。 3. **处理Open In...请求:**...

    YYRouter一个简单好用的swift路由组件.zip

    1. **URL Scheme**:YYRouter可能会支持自定义URL Scheme,允许开发者通过特定的字符串路径来调用特定的视图控制器或服务。 2. **动态注册**:框架可能允许开发者动态注册路由规则,无需硬编码所有的导航路径。 3....

    用户URL schemes调用本地的地图应用

    自定义URL schemes是由开发者定义的一组规则,格式通常是`<appname>://`,其中`<appname>`是应用的唯一标识。例如,如果你想调用苹果地图应用,URL scheme可能是`map://`。 要调用本地地图应用,你需要在你的应用中...

    ios 支付宝demo,可供下载和跳转支付宝界面

    在这个demo中,通过定义一个特定的URL Scheme,如"alipay://",我们可以让应用监听并响应这个URL,从而实现跳转到支付宝应用。当用户点击支付按钮时,应用会启动这个URL,支付宝App接收到请求后会打开支付页面。 ...

    Cordova 3.x入门

    Cordova的实用插件部分覆盖了Google地图、二维码、社交分享、自定义URL Scheme等多个插件,这些都是Cordova生态中重要的组成部分,能够帮助开发者快速实现丰富的功能。 源码分析部分则是对于想要深入理解Cordova...

    swift-XRouter一个简单的iOS项目路由库

    通过定义和解析这些自定义URL,你可以轻松地在应用程序的不同组件之间传递信息,无需硬编码或者复杂的依赖关系。 使用XRouter,开发者可以: 1. **定义路由规则**:通过注册特定的URL模式,例如"xrouter://view/...

    Hadoop权威指南 第二版(中文版)

     从Hadoop URL中读取数据  通过FileSystem API读取数据  写入数据  目录  查询文件系统  删除数据  数据流  文件读取剖析  文件写入剖析  一致模型  通过 distcp并行拷贝  保持 HDFS 集群的均衡  ...

    plus1-android-sdk:WapStart Plus1 Android SDK

    清单配置第一步是添加自定义 url-scheme 和主机。 同步用户的 cookie 后,为了能够从浏览器返回到应用程序,这是必要的操作。 如果您使用的是setDisabledOpenLinkAction(true) ,您可以跳过本节(不推荐)。 例子: ...

Global site tag (gtag.js) - Google Analytics