iPhone应用程序还可以指定自己的自定义URL方案(例如,myapp:// doStuff)。您可能希望在何时为自己的应用使用自定义网址方案?
为了从精简版的数据传输到你的应用程序的付费版本
要允许其他应用(甚至网页)调用您的应用(并向其发送数据)
为了处理自定义验证回调(如OAuth的)和第三方的API
实现自定义网址方案
定义应用程序的自定义URL方案都是在In文件中完成的。单击文件中的最后一行,然后单击右侧的“+”签名添加新行。选择URL类型的新项目。添加完成后,点击“网址类型”旁边的灰色箭头,显示“项0”。设置你的URL标识为唯一的字符串-像com.yourcom。
设置网址标识符后,请选择该行,然后再次点击“+”号,并为网址方案添加新项目。然后单击“URL schemes”旁边的灰色箭头以显示“Item 0”。将Item 0的值设置为您的URL方案名称。
处理自定义URL调用
为了让您的应用程序接收自定义URL呼叫时回应,必须实现应用程序:handleOpenURL方法在应用程序委托类:
- (BOOL)申请:( 的UIApplication *)应用handleOpenURL :( NSUR L *)网址{ //处理代码在这里}}解析自定义网址
网址有几个部分:
scheme:// host / path?query
该URL的部分可以通过被传递到所述NSURL对象中检索handleOpenURL:应用方法。如果你有一个相当简单的URL命名方案,并且想要允许访问特定的页面/键,你可以使用主机名:
自定义网址 | 价值[URL主持人]: |
---|---|
myapp:// page1 | 第1页 |
myapp:// page2 | 第2页 |
myapp:// otherPage | otherPage |
要将数据传递到应用程序,您需要使用查询字符串。这里有一个简单的方法来解析来自url的查询字符串:
- (的NSDictionary *)parseQueryString :( 的NSString *)查询{ 的NSMutableDictionary *字典= [[[ 的NSMutableDictionary页头] initWithCapacity:6]自动释放]; NSArray的 *双= [查询componentsSeparatedByString:@“和” ];对于(的NSString成对*对){ NSArray的 *元素= [对componentsSeparatedByString:@“=” ]; 的NSString *键= [[元素objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 的NSString * VAL = [[元素objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];[dict setObject:val forKey:key];}}return dict;}}测试自定义网址
您可以轻松地在模拟器中测试您的URL方案。只需添加一个测试按钮到你的一个视图,并实现IBAction方法如下:
- (IBAction为)getTest :( 编号)发送{[ UIApplication的 sharedApplication]的OpenURL:[ NSUR大号URLWithString:@“myappscheme://test_page/one?token=12345&domain=” ]];}}然后在你的应用程序代理,实现应用程序:handleOpenURL方法:
- (BOOL)申请:( 的UIApplication *)应用handleOpenURL :( NSUR L *)网址{的NSLog(@“URL收到:%@”,URL);的NSLog(@“查询字符串:%@”,[URL查询]);的NSLog(@“主持人:%@”,[URL主机]);的NSLog(@“URL路径:%@”,[URL路径]); 的NSDictionary *字典= [ 自我 parseQueryString:[URL查询]];的NSLog(@“查询字典:%@” ,字典);返回YES ;}}