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

在Mac和iOS中注册自定义的URLScheme

在Mac和iOS中注册自定义的URLScheme在Mac和iOS中注册自定义的URLSchemeJAN10TH,2012URLScheme是类似http:,ftp:&

在Mac和iOS中注册自定义的URL Scheme

在Mac和iOS中注册自定义的URL Scheme

JAN 10TH, 2012

URL Scheme是类似http://,ftp://,afp://这样的东西,通常是用传输协议作为URL Scheme。不过事实上,你可以在iOS和Mac中注册任何类型的URL Scheme。当用户在浏览器中访问你的自定义URL Scheme的链接的时候,操作系统就会打开你的程序,响应这个请求。

要在程序中注册自定义URL Scheme非常简单。主要分为两个步骤:在程序的Info.plist中加入你需要注册的URL Scheme,然后在你的应用程序中加入处理这类请求的代码。

其中,第一个步骤对于iOS和Mac应用程序来说是完全相同的。方法如下:

Info.plist中,增加一个字段,名称为CFBundleURLTypes(URL Types)。Xcode会自动为你创建一个必须的键:URL Identifier(CFBundleURLName),这个键的值可以赋值为一个唯一的字符串。通常是逆向的域名结构,如:me.venj.myapp。然后在URL Types这个键下增加一个子项:CFBundleURLSchemes(URL Schemes),这里填入你想注册的URL Scheme的名称,如:cloud。你可以增加多个URL Scheme。

下面是一个示例的XML结构:

1
2
3
4
5
6
7
8
9
10
11

CFBundleURLTypes


CFBundleURLName
me.venj.myapp
CFBundleURLSchemes

cloud



这样,我们就可以在程序中处理请求了。下面我们来分别看一下iOS和Mac下的处理方法:

iOS:

在iOS中,我们可以在AppDelegate中加入一个方法,来处理这个请求。对于iOS 4.1或更早的系统,使用-application:handleOpenURL:方法,对于iOS 4.2以后的系统使用:-application:openURL:sourceApplication:annotation:方法。

下面是示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

/* For iOS 4.1 and earlier */
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
// Handle url request.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL Request" message:[url absoluteString] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];

return YES;
}

/* For iOS 4.2 and later */
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
// Handle url request.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"URL Request" message:[url absoluteString] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];

return YES;
}

我们的演示程序只是简单的显示了一个UIAlertView来响应请求。实际应该如何处理那就看需要了。

效果如下:

Mac:

Mac下处理自定义URL Scheme的请求稍有不同。我们首先要在-applicationDidFinishLaunching:方法中注册一下,并指定处理URL请求的方法。如下:

1
2
3
4
5
6
7
8
9
10
11
12

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}

- (void)handleURLEvent:(NSAppleEventDescriptor*)theEvent withReplyEvent:(NSAppleEventDescriptor*)replyEvent {
// Process URL Request
NSString* path = [[theEvent paramDescriptorForKeyword:keyDirectObject] stringValue];

[[NSAlert alertWithMessageText:@"URL Request" defaultButton:@"OK" alternateButton:nil otherButton:nil informativeTextWithFormat:@"%@", path] runModal];
}

类似的,我们在示例程序中还是简单的用了一个NSAlert来展示我们成功捕获到了这个URL Scheme的请求。

效果如下:

好了,关于自定义URL Scheme就讲这么多,用起来很简单吧。

说明: - 本文的示例代码已经推送到了Github,你可以下载编译之后退出程序。然后打开Safari,在地址栏中输入: cloud://test.com,看看是不是自动转跳到示例程序,并看到了对话框。 - 本文参考了这里和Apple的文档

(全文完)




推荐阅读
  • 导读:本文来自SwiftGG翻译组,作者@walkingway基于苹果Swift官方博客中TedKremenek所撰写的“Swift2.2Released!”文章进行了关于Swift2. ... [详细]
  • 开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤
    开发技巧:在Interface Builder中实现UIButton文本居中对齐的方法与步骤 ... [详细]
  • 在处理大规模数据数组时,优化分页组件对于提高页面加载速度和用户体验至关重要。本文探讨了如何通过高效的分页策略,减少数据渲染的负担,提升应用性能。具体方法包括懒加载、虚拟滚动和数据预取等技术,这些技术能够显著降低内存占用和提升响应速度。通过实际案例分析,展示了这些优化措施的有效性和可行性。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 微信公众号推送模板40036问题
    返回码错误码描述说明40001invalidcredential不合法的调用凭证40002invalidgrant_type不合法的grant_type40003invalidop ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • Python与R语言在功能和应用场景上各有优势。尽管R语言在统计分析和数据可视化方面具有更强的专业性,但Python作为一种通用编程语言,适用于更广泛的领域,包括Web开发、自动化脚本和机器学习等。对于初学者而言,Python的学习曲线更为平缓,上手更加容易。此外,Python拥有庞大的社区支持和丰富的第三方库,使其在实际应用中更具灵活性和扩展性。 ... [详细]
  • 比特币的成功为区块链技术构建了可信货币的基石,标志着区块链1.0时代的到来。以太坊通过引入智能合约,极大地推动了去中心化应用的开发和普及,开启了区块链2.0时代。本文深入探讨了侧链技术在提升区块链扩展性方面的潜力和应用,分析了其在提高交易速度、降低成本和增强安全性等方面的优势,并讨论了当前面临的技术挑战和未来的发展方向。 ... [详细]
  • [译]  OS X 和 iOS 的测绘框架Core Plot 入门教程
    [译] OS X 和 iOS 的测绘框架Core Plot 入门教程 ... [详细]
  • HokoBlur项目地址:HokoFlyHokoBlur简介:aneasy-to-useblurlibraryforAndroid,supporte ... [详细]
  • iOS Auto Layout Demystify
    BookDescripterAutoLayouttransformsthewayyoucreateiOSuserinterfaces.Asflexibleasitispowerfu ... [详细]
author-avatar
王倩albe
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有