需求 - 2 - 应用程序跳转(URLSchemes)
来源:互联网 发布:淘宝兼职招聘 编辑:程序博客网 时间:2024/06/05 18:48
需求2具体是:因为用itms-services跳转的浏览器是空白页面,我想要在这空白的页面里面添加一些图片或者是文字提醒。
刚开始想着讲intall.html添加在本地然后直接用:file:///Users/luxiangting/Desktop/install.html
file协议来打开itms-services,然后想想真是脑袋坏了,这个和之前跳转代码认为和前面一大堆参数有关是相同道理的,无论用模拟器还是iPhone机器上都不能直接用file协议,你以为是Mac book打开文件夹那么好玩啊。。那么该怎么办了。搜了一下相关的资料,有两个知识点需要弄清楚:1.URL Scheme 2.openURL 的方法。
URL Scheme openURL的一个简单应用,如果看完了参考文章应该都可以明白和开始动手做了,动手才是真正容易了解和明白其原理的最好方法
1.
首先在第一个工程的info.plist里面修改URL Schemes,修改如下,具体就不解释了,望文可以生义,URL identifier肯定是唯一的,所以标志着应用自身,而URL Schemes说实话,直译是比较困难理解的,URL 机制? 且不急,等我们继续往下看
2.
分别在第一个和第二个工程添加一个按钮,点击事件分别附上如下代码和相应的 “地址”
第一个工程:
static NSString* itmsURL = @"QIPAO://com.qipao.qipaoTest";
- (void)itmsButtonClicked:(id)sender{ NSLog(@"button Clicked !"); NSURL* url = [NSURL URLWithString:itmsURL]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } NSLog(@"123123 : %@", [[UIApplication sharedApplication] canOpenURL:url]? @"YES" :@"NO");}
第二个工程:
static NSString* iosfighterURL = @"IOSFIGHTER://com.iosfighterlb.practise";
- (void)urlSchemeTest{ NSLog(@"KeyBoard AddButton Clicked !"); NSURL* url = [NSURL URLWithString:iosfighterURL]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; }}
分别实现了以后,就可以实现来回跳转的效果啦哈哈。相信看完代码也懂了URL Schemes 和 URL identifier 的意义了吧?
URL Schemes就是别人“跳”我们的应用时候用的前缀,但是地址格式是 URL Schemes + :// + URL identifier !
在接入一些SDK我们会发现跳转需要设置的 XXX + bundleID的格式,如:
这里也给出其实现的原理,用支付宝跳转来做例子:
- (void)callAliPayMethod:(NSString *)str{ NSData* data = FBDecodeBase64(str); //加密的订单号 NSDictionary* infoDictionary = [[NSBundle mainBundle] infoDictionary];//用这个方法可以直接获取infoPlist整个字段的参数 NSString* paramStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; NSArray* array=[[NSArray alloc] initWithArray:[infoDictionary objectForKey:@"CFBundleURLTypes"]]; NSString* appBunldId = [infoDictionary objectForKey:@"CFBundleIdentifier"]; NSString* callBackURLString = NULL; for (int i = 0; i <[array count]; i++) { id object = [array objectAtIndex:i]; if ([object isKindOfClass:[NSDictionary class]]) { NSDictionary* dic = (NSDictionary *)object; NSArray *allKeysArray = [dic allKeys]; for (int k = 0; k < [allKeysArray count]; k++) { NSString *keyString = [allKeysArray objectAtIndex:k]; if ([keyString isEqualToString:@"CFBundleURLSchemes"]) { NSArray *tempArray = [dic objectForKey:keyString]; for (int j= 0; j<[tempArray count] ; j++) { NSString* tempCallBackStr = [[tempArray objectAtIndex:j] substringWithRange:NSMakeRange(0,[[tempArray objectAtIndex:j] length])]; NSLog(@"JUMPSDK:Temp URLSchemes is %@",appBunldId); if ([tempCallBackStr isEqualToString:[NSString stringWithFormat:@"JUMPProtocol%@",appBunldId]]) { callBackURLString = tempCallBackStr; k = -1; //设置-1来提前break掉循环 break; } } if (k == -1) { i = -1; break; } } } if (i == -1) { break; } } } NSLog(@" Bundleid is %@",appBunldId); NSLog(@" URLSchemes is %@",callBackURLString); } //这里就可以发现设置的规格是因为alipay支付宝的方法使然 [[AlipaySDK defaultService] payOrder:paramStr fromScheme:callBackURLString callback:^(NSDictionary *resultDic) { //Alipay operation . }];}
在iOS9 之后苹果对于URL Scheme的要求更进一步了,如图:
itms协议待续...
参考:
http://www.cocoachina.com/industry/20140522/8514.html
http://blog.csdn.net/zhibudefeng/article/details/7725008
- 需求 - 2 - 应用程序跳转(URLSchemes)
- iOS9适配之应用跳转(URLSchemes)
- 应用程序跳转
- 聊天室应用程序 需求分析
- IOS 应用程序间跳转
- IOS 应用程序间跳转
- 应用程序之间的跳转
- iOS 应用程序间跳转
- IOS 应用程序间跳转
- IOS 应用程序间跳转
- 应用程序互相跳转
- android 应用程序间跳转
- 应用程序互相跳转
- 应用程序互相跳转
- 应用程序间的跳转
- 跳转到某个应用程序
- 应用程序之间的跳转
- ios-应用程序间跳转
- 动态数码管显示
- halcon各章节归纳
- Maven项目打包成可执行的jar
- linux grep 结果处理
- linux中的alsa工具与Android中的tinyalsa工具
- 需求 - 2 - 应用程序跳转(URLSchemes)
- hdu4763 Theme Section(KMP水题)
- 指针函数与函数指针的区别
- UEditor上传文件IO异常
- zzuli OJ 1011: 圆柱体表面积
- Java的缓存机制
- Android 网络请求超时处理方案
- HBase shell 无法使用 Backspace 键-解决方案
- Hibernate关联之 一对一连接表双向关联