需求 - 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

0 0
原创粉丝点击