iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用。

注册自定义 URL Scheme

注册自定义 URL Scheme 的第一步是创建 URL Scheme — 在 Xcode Project Navigator 中找到并点击工程 info.plist 文件。当该文件显示在右边窗口,在列表上点击鼠标右键,选择 Add Row:

向下滚动弹出的列表并选择 URL types。

点击左边剪头打开列表,可以看到 Item 0,一个字典实体。展开 Item 0,可以看到 URL Identifier,一个字符串对象。该字符串是你自定义的 URL scheme 的名字。建议采用反转域名的方法保证该名字的唯一性,比如com.yourCompany.yourApp。

点击 Item 0 新增一行,从下拉列表中选择 URL Schemes,敲击键盘回车键完成插入。

注意 URL Schemes 是一个数组,允许应用定义多个 URL schemes。

展开该数据并点击 Item 0。你将在这里定义自定义 URL scheme 的名字。只需要名字,不要在后面追加 :// — 比如,如果你输入 iOSDevApp,你的自定义 url 就是 iOSDevApp://

此时,整个定义如下图:

虽然我赞同 Xcode 使用描述性的名字的目的,不过看到创建的实际的 key 也是非常有用的。这里有一个方便的技巧,右键点击 plist 并选择 Show Raw Keys/Values,就能看到以下效果:

还有另一种有用的输出格式,XML,因为可以非常容易的看到字典和原始数组及其包括的实体的结构。点击 plist 并选择 Open As – Source Code:

从 Safari 中调用自定义 URL Scheme

定义了 URL scheme,我们可以运行一个快速测试来验证应用是否如我们所期望的被调用。在这之前,我创建了一个准 UI 以辨别带有自定义 URL 的应用。该应用只有一个 UILabel,带有文本 “App With Custom URL”。下载源代码(http://iosdevelopertips.com/downloads/#customURLScheme)

使用模拟器调用应用的步骤:

在 Xcode 中运行应用

一旦应用被安装,自定义 URL scheme 就会被注册

通过模拟器的硬件菜单中选择 Home 来关闭应用

启动 Safari

在浏览器地址栏输入之前定义的 URL scheme(如下)

此时 Safari 将会关闭,应用会被带回到前台。祝贺你刚刚使用自定义 URL scheme 调用了一个 iPhone 应用。

从另一个 iPhone 应用中调用自定义 URL Scheme

让我们看看如何从另一个应用中调用自定义 URL scheme。我又创建了一个非常简单的 iPhone 应用,它只有一个 UILabel 和一个 UIButton — 前者显示了一段信息,告诉你这个应用将要通过自定义 URL scheme 来调用另一个应用,按钮则开始这个行为。下载源代码(http://iosdevelopertips.com/downloads/#customURLScheme)

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(https://tools.ietf.org/html/rfc1808) (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&registered=1";

在 web 开发中,字符串 ?token=123abct&registered=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&registered=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 示例工程

我意识到按照本文的每一步做下来还是有一点复杂的。我做好了两个非常基础的 iOS 应用,一个自定义了 URL scheme,另一个则去调用它,并传递了一个比较短的参数列表(query string)。这些是体验自定义 URL 的很好的入门点。

自定义 URL Scheme 完全指南

本文由 Migrant 翻译自 The Complete Tutorial on iOS/iPhone Custom URL Schemes,转载请注明出处. 注意: 自从自定义 URL 的引入,本文 ...

自定义 URL Scheme 完全指南(转载)

iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 URL Scheme ...

iOS 自定义 URL Scheme 完全指南

http://www.cocoachina.com/industry/20140522/8514.html “”   阅读器 自定义URL Scheme 本文转自Migrant的博客,原文:

【读书笔记】iOS-自定义 URL Scheme 完全指南

iPhone / iOS SDK 最酷的特性之一就是应用将其自身”绑定”到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用.   注册自定义 URL Sche ...

iOS App 自定义 URL Scheme 设计(转自COCOACHINA)

在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...

ios 自定义URL Scheme 设计

在 iOS 里,程序之间都是相互隔离,目前并没有一个有效的方式来做程序间通信,幸好 iOS 程序可以很方便的注册自己的 URL Scheme,这样就可以通过打开特定 URL 的方式来传递参数给另外一个 ...

【读书笔记】iOS-自定义URL Scheme注意事项

如果两个不同的应用注册了同样的URL Scheme,那么后安装的应用会响应符合这种协议格式的URL. 如果你的应用的iPhone和iPad版是各自独立的(即不是Universal类型的),那么你就不应 ...

iOS 唤起APP之URL Scheme

什么是URL Scheme 简单的说,由于苹果选择使用沙盒机制来保障用户的隐私和安全,APP只能访问自己沙盒数据,但同时也阻碍了应用间合理的信息共享.因此苹果提供了一个可以在APP之间跳转的方法:UR ...

通过自定义的URL Scheme启动你的App

iPhone SDK可以把你的App和一个自定义的URL Scheme绑定.该URL Scheme可用来从浏览器或别的App启动你的App. 如何响应从别的App里发给你的URL Scheme申请,由 ...

随机推荐

android图片验证码--自绘控件

自绘控件的内容都是自己绘制出来的 大致流程如下: 1.定义一个类继承view 使用TypedArray初始化属性集合 在view的构造方法中 有一个AttributeSet的参数 很明显是用来保存控件 ...

JAVA 多线程随笔 (一) 可见性和volatile关键字

// 先上代码 1 public class NoVisibility { private static boolean ready; private static int number; priva ...

移动 Web 触摸与运动解决方案 AlloyTouch 开源啦

传送门 Github地址:https://github.com/AlloyTeam/AlloyTouch 简介 AlloyTouch的本质是运动一个数字,把数字的物理变化映射到你想映射的任何属性上.所 ...

c++ 类模版、成员函数模版、函数模版 用法

C++函数模版与类模版. template void SwapFunction(T &first, T &second){ }//函数模版 templa ...

项目后台判断session过期的页面代码

checksession.jsp

推荐一个可以直接在Visual Studio中看到complexity的插件CodeMaid

博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:推荐一个可以直接在Visual Studio中看到complexity的插件CodeMaid.

Windows登录脚本可以限制并发登录吗

在Windows服务器中,使用一个Windows登录脚本来限制并发会话靠谱吗? 事实上,这种解决方案存在很多缺点和弱点,并不能满足大中型IT基础设施的安全性需求. 一.使用登陆脚本限制并发会话,恶意用 ...

微软的STRIDE模型

微软的STRIDE模型: https://msdn.microsoft.com/en-us/library/ee823878(v=cs.20).aspx Spoofing identity. An e ...

火狐浏览器怎么查看页面加载了那些js文件,那系js文件有作用

方法一: 右击查看原代码,点击js链接如果能够看到文件内容,证明加载成功 方法二: 按F12键,如果控制台没有加载错误,证明加载成功:

移动端300ms与点透总结

300ms,主要发生在mobile 为啥会出现300ms延迟现象 浏览器想知道用户是否dobule tap(双击缩放) 下列情况不会出现300ms延迟 桌面浏览器 meta的viewport设置了us ...

url scheme Linux,自定义URL Scheme完全指南相关推荐

  1. java url 协议_Java自定义URL协议

    Java提供了对URL协议进行扩展的能力,通过扩展用户可以自定义URL通信协议,JDK默认提供了对HTTP,FTP,JAR,FILE等的实现,而当需要自己定义通信协议的时候,就需要利用JDK提供的对U ...

  2. android自定义url协议,Android自定义URL方案…?

    我试图创建自己的URL方案,这样我的Android应用程序就可以通过一个URL被调用,但目前我还没有成功. 我想使用这个网址:cedemo://com.cedemo.scan?TOTO 以下是我的清单 ...

  3. 自定义 URL Scheme 完全指南

    本文转自 Migrant的博客,原文:<The Complete Tutorial on iOS/iPhone Custom URL Schemes> iPhone / iOS SDK 最 ...

  4. 自定义URL Scheme完全指南

    iPhone / iOS SDK 最酷的特性之一就是应用将其自身"绑定"到一个自定义 URL scheme 上,该 scheme 用于从浏览器或其他应用中启动本应用. 注册自定义 ...

  5. pc前端js调起电脑本地应用程序(需要客户端配合 自定义URL Protocol 协议 )

    由于做项目需要实现如题的一个功能,所以搜寻了相关资料. CSDN博文 自定义URL Protocol(客户端的配置):自定义URL Protocol 协议_chinahaerbin的博客-CSDN博客 ...

  6. Django自定义url(path)转换器

    需求1: 实现一个获取电影列表的demo,用户可以根据/movie/电影分类/的方式来获取电影.其中电影分类采用的是分类1+分类2+分类3...的方式拼接的,并且如果只有一个分类,那就不需要加号.示例 ...

  7. android url scheme 跳转传值,如何自定义 URL Scheme 进行跳转

    一.URL Scheme 简介和作用 在 :// 之前的部分就称为 URL Scheme. 也就是说 http://www.jianshu.com/ 的 URL Scheme 就是 http . 更多 ...

  8. linux网站目录大小写,Linux服务器url区分大小写如何解决

    使用Linux服务器的朋友在做网站过程中,可能会发现网站url要区分大小写,url使用大写的时候,使用小写字母不能访问,反之亦然.这样很不方便.那么如何解决linux服务器对url大小定敏感问题呢? ...

  9. 把自定义url配置到SAP Fiori Launchpad上打开

    打开SAP云平台 portal Service的Content manager: 点击My Content,创建一个新的portal应用: 我们的自定义url就在这个新建应用的字段URL里维护: 创建 ...

最新文章

  1. SpringBoot之配置嵌入式Servlet容器
  2. 全球数百万台 Mac 疑似因 Big Sur 更新险酿计算灾难,苹果官方回应来了!
  3. 机器学习导论(张志华):条件期望
  4. 单片机拼字程序怎么做_小程序商城怎么做?做一个小程序需要多少钱
  5. UPS Online Tools(一) --- Tracking
  6. [工具]将xml文件转换为html显示
  7. HDOJ_1016 素数环
  8. 《Linux性能及调优指南》 Linux进程管理
  9. 关于安控RTU和宏电DTU的通讯设置
  10. 性能效率(Performance efficient)弱点度量
  11. 软件中存在的技术风险
  12. 未来十年的音视频,教科书级别的Android音视频开发教程,学完我成功“挤进”了抖音音视频开发岗
  13. 基于FPGA的电子计算器设计(上)
  14. 表单写年龄选择html,表 单 / HTML
  15. App Store 3月下载量下滑
  16. 果汁机器人传销_自动果汁售货机怎么样 加盟靠谱吗
  17. SEO实战教程:“网络营销软件站”SEO策略完全解释
  18. 初学ZYNQ(理论准备)
  19. 讲清迪杰斯特拉(DIJKSTRA)算法,附python代码
  20. CS和BS的区别以及优缺点

热门文章

  1. 安卓学习笔记——关于短信的屏蔽
  2. 创业公司如何高效的进行产品研发管理
  3. BroadCast的两种使用方法
  4. 蒙特卡洛树搜索(MCTS)实现简易五子棋AI
  5. ZK7.0.3中从MongoDB下载文件
  6. 敌我差距:普通男生感动自己,撩妹高手感动女生。
  7. 联发科十核大杀器现身:跑分优于麒麟950
  8. 命令模式之做我的齐天大圣还是奉旨上界
  9. Java八股整理--java基础
  10. 超链接做按钮 禁止跳转 submit 或 location 导致 return false 不起作用