【转】在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
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>me.venj.myapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>cloud</string>
        </array>
    </dict>
</array>

这样,我们就可以在程序中处理请求了。下面我们来分别看一下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来响应请求。实际应该如何处理那就看需要了。

效果如下:

时间: 2024-08-24 10:09:50

【转】在Mac和iOS中注册自定义的URL Scheme的相关文章

iOS中的自定义代理模式

iOS中的自定义代理模式 自定义代理模式分为6步,遵循这6步,就能把代理完整的实现. 1.定义协议(协议中存放代理的任务).我们对于有的自定义的布局视图,并不会带有协议,为了满足我们有时候的开发需求,需要添加代理.那么我们就要先定义一个协议.如下:在自定义视图的DelegateView.h文件中定义一个DelegateViewDelegate协议,协议默认的都是必须的实现的方法,可以根据需求来添加可选实现的方法. 1.定义协议 2.定义代理属性,用来存储代理对象. 2.定义代理属性 3.为Del

iOS中创建自定义的圆角按钮

iOS中很多时候都需要用到指定风格的圆角按钮,尽管UIButton提供了一个方式创建圆角按钮: + (id)buttonWithType:(UIButtonType)buttonType;//指定buttonType为UIButtonTypeRoundedRect 但是这样创建出来的按钮仅仅能支持默认的白底蓝字的风格,不可再进行更改.比如更改了backgroundColor,背景颜色区域仍然覆盖了整个矩形区域. 怎么做呢,通过摸索,以下方法能达到要求: UIButton *btn = [[UIB

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

http://blog.csdn.net/ba_jie/article/details/6884818原文地址:http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html 添加一个叫URL types的键值. 给其下的Item 1添加一个URL identifier,格式为Reverse Domain Name:com.mycompany.myapp. 再加一个U

ios中解决自定义tabbar跳转隐藏问题的方法

在ios开发(http://www.maiziedu.com/course/ios/)中,如何自定义tabbar高度的跳转隐藏问题,比如和系统自带的tabbar高度不一样导致的有一条线的问题,还有push时动画效果等等一些列问题不在这里累述了,当然,思路有很多,可以参考以上链接自己琢磨琢磨,好了,下面直接上个人认为完美解决办法. 需求 1.自定义tabbar,不用系统的tabbar 2.第二点需求是自定义tabbar的高度和系统的不一样,系统的tabbar高度为49,就是因为这点导致第三个需求有

iOS中 xib自定义View在storyboard中的使用

1,创建UIView 的SubClass 命名为MyView 2, new一个名为MyView的xib p1 3,配置xib的属性 p2 4,为View 添加背景色,添加一个按钮并定制按钮约束,这里我添加的约束为垂直居中,Button与View等宽,Button左边起点位置为0. p3 5,设置xib中的File’s owner = MyView, 拖拽view 到关联的代码中命名为contentView p4 6, 在storyboard 中对ViewController 添加一个View,之

iOS中使用自定义字体

1.确定你的项目工程的Resources下有你要用的字体文件(.ttf或者.odf). 2.然后在你的工程的Info.plist文件中新建一行,添加key为:UIAppFonts,类型为Array或Dictionary都行,在UIAppFonts下再建立一个键值对,key为:Item 0,添加Value为XXX.ttf(字体的名字,string型),可以添加多个,使用的时候写对应字体名字就行. 3.在你的项目里要用字体的时候 xx.font = [UIFont fontWithName:@"XX

IOS 中关于自定义Cell 上的按钮 开关等点击事件的实现方法(代理)

1.在自定义的Cell .h文件中写出代理,写出代理方法. @protocol selectButtonDelegate <NSObject> -(void)selectModelID:(NSString *)userid ;//设置需要传递出的数据 ..... @end @interface ReadBookTableViewCell : UITableViewCell @property (nonatomic, assign) id<selectButtonDelegate>

关于在Spring中注册自定义的PropertyEditor

考虑下面两个类: ExoticType: package document.six.test; public class ExoticType { private String name; public ExoticType(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } Dpen

iOS中注册功能的体验探究

通常,移动App的注册功能通常采用手机号码注册或者邮箱帐号注册. 不过在国内这样隐私堪忧的环境下,需要手机号来注册会流失不少用户.即便是新浪微博这样的应用,需要绑定手机号也令我不信任.除非是像淘宝.支付宝这样需要手机号来提高安全等级的服务,才能弱化用户的心理障碍. 首先,看下手机号码注册.    (注册湖畔) 对于手机号码输入框,我们当然要默认使用UIKeyboardTypeNumberPad类型键盘.不过对于越狱用户,如果装了其它输入法,则有可能使用其它类型键盘输入非数字字符.对此,我们在客户