需求 - 2 - 应用程序跳转(URLSchemes)

需求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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值