热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ImplementingCustomURLSchemes

ImplementingCustomURLSchemesIfyourappcanreceivespeciallyformattedURLs,youshouldregisterth

1、Implementing Custom URL Schemes
If your app can receive specially formatted URLs, you should register the corresponding URL schemes with the
system. A custom URL scheme is a mechanism through which third-party apps can communicate with each
other. Apps often use custom URL schemes to vend services to other apps. For example, the Maps app supports

URLs for displaying specific map locations.

实现自定义的URL Schemes

如果你想让你的应用程序能够接收特定的、格式化的URLs,需要向系统中注册相应的URL schemes。自定义URL Scheme是一种机制,通过它,第三方应用能够相互通信。应用程序通常使用自定义的URL schemes为其它应用提供服务,例如,地图的应用提供显示指定位置的URLs。


2、Registering Custom URL Schemes
To register a URL type for your app, include the CFBundleURLTypes key in your app’s Info.plist file. The
CFBundleURLTypes key contains an array of dictionaries, each of which defines a URL scheme the app
supports. describes the keys and values to include in each dictionary.

注册自定义URL Schemes

注册URL type,需要向Info.plist文件中添加CFBundleURLTypes字段,CFBundleURLTypes对应一个数组,数组中的对象是字典,每个字典中定义了一个应用支持的URL scheme,下面列出了字典中的keys和values。

CFBundleURLName 

A string containing the abstract name of the URL scheme. To ensure uniqueness, it is recommended that you specify a reverse-DNS style of identifier, for example, com.acme.myscheme. The
string you specify is also used as a key in your app’s InfoPlist.strings file. The value of the key is the human-readable scheme name.

CFBundleURLSchemes

An array of strings containing the URL scheme names—for example, http, mailto, tel, and sms.

CFBundleURLName 包含URL scheme的抽象名称,为了保证独一无二,推荐使用域名的倒序样式来定义,例如,com.acme.myscheme。同时可以在InfoPlist.strings文件中定义一个key为CFBundleURLName的键值对,其值是一个可读的scheme名。

CFBundleURLSchemes 是一个包含URL scheme名称的数组,例如,http,mailto,tel和sms。


3、Handling URL Requests
An app that has its own custom URL scheme must be able to handle URLs passed to it. All URLs are passed to
your app delegate, either at launch time or while your app is running or in the background. To handle incoming
URLs, your delegate should implement the following methods:
● Use the application:willFinishLaunchingWithOptions: and application:didFinishLaunchingWithOptions: methods to retrieve information about the URL and decide whether you want to open it. If either method returns NO, your app’s URL handling code is not called.
● In iOS 4.2 and later, use the application:openURL:sourceApplication:annotation: method to open the file.
If your app is not running when a URL request arrives, it is launched and moved to the foreground so that it
can open the URL. The implementation of your application:willFinishLaunchingWithOptions: or
application:didFinishLaunchingWithOptions: method should retrieve the URL from its options
dictionary and determine whether the app can open it. If it can, return YES and let your
application:openURL:sourceApplication:annotation: (or application:handleOpenURL:) method handle the actual opening of the URL. (If you implement both methods, both must return YES before
the URL can be opened.) Figure 6-1 shows the modified launch sequence for an app that is asked to open a
URL.

处理URL请求

一个应用程序拥有自定义的URL scheme,就必须能够处理相应的URL请求,所有的URLs请求都会发送到应用程序的delegate,不论是在启动阶段还是应用在运行或者在后台,为了处理URL请求,delegate需要实现下面的方法:

●用application:willFinishLaunchingWithOptions:
或者 
application:didFinishLaunchingWithOptions: 这两个方法获取到URL的信息,并且判断是否要打开此URL,只要两个方法中有一个返回NO,处理URL请求的代码就不会执行。

●在iOS4.2或者以后的版本中,使用application:openURL:sourceApplication:annotation:此方法来打开URL。

当一个URL请求时,应用程序未启动,启动并呈现这个可以打开的URL,这两个方法application:willFinishLaunchingWithOptions: 或者 application:didFinishLaunchingWithOptions: 接受到URL信息判断应用程序是否可以打开它,返回YES 就调用application:openURL:sourceApplication:annotation方法来打开URL,URL启动应用的流程如下:

bubuko.com,布布扣


如果应用已经在运行或者在后台时的执行流程如下:

bubuko.com,布布扣

以上是对apple官方文档中Custom URL Scheme的部分翻译,有翻译不对的或者理解错误的地方,还请各位大侠指正。我的微信公众账号是:DeveloperCave,有兴趣的同学可以加下,共同学习ios开发。另外,根据这个翻译写了一个小demo,可以点击此处下载。






Implementing Custom URL Schemes,布布扣,bubuko.com


推荐阅读
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • 本文介绍了如何利用HTTP隧道技术在受限网络环境中绕过IDS和防火墙等安全设备,实现RDP端口的暴力破解攻击。文章详细描述了部署过程、攻击实施及流量分析,旨在提升网络安全意识。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
  • 系统数据实体验证异常:多个实体验证失败的错误处理与分析
    在使用MVC和EF框架进行数据保存时,遇到了 `System.Data.Entity.Validation.DbEntityValidationException` 错误,表明存在一个或多个实体验证失败的情况。本文详细分析了该错误的成因,并提出了有效的处理方法,包括检查实体属性的约束条件、调试日志的使用以及优化数据验证逻辑,以确保数据的一致性和完整性。 ... [详细]
author-avatar
吉翠芙_899
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有