URL Schemes 实现APP之间的跳转

2016-07-05  本文已影响0人  Gary_fei

简述

通过对比网页链接来理解iOS上的URL Schemes,应该就容易多了
URL Schemes 有两个单词:

网页(苹果) iOS 应用(微信)
网站首页/打开应用 http://www.apple.com weixin://
子页面/具体功能 http://www.apple.com/mac/(Mac页面) weixin://dl/moments(朋友圈)

实例:

prefs:实现跳转至苹果内置程序的url scheme,不可改变
appA:标识该应用程序的url scheme,尽量保持它的唯一性,可以被appA打开

或者直接在info.plist中设置Information Property List:


info设置
  1. 在应用A的跳转按钮中设置跳转代码:
    - (void)jumpB:(id)sender
    {
    //无参数
    NSURL *url1 = [NSURL URLWithString:@"appB:"];
    [UIApplication shareApplication] openURL:url1];
    //有参数
    NSString *paramStr =[NSString stringWithFormat:@"appB://username=%@&password=%@", @"小刘", @"123"];
    NSURL *url2 = [NSURL URLWithString:[paramStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    [UIApplication shareApplication] openURL:url2];
    }
    点击之后就可以实现跳转应用B
  2. 在打开应用B的过程中,此时应用B有两种状态:
    • 第一个状态: 应用B还没有启动,打开过程中就会去启动,触发下面的方法
      - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
      {
      NSLog(@"didFinishLaunchingWithOptions---B");
      return YES;
      }
    • 第二个状态: 应用B已经启动了,但是在后台运行或者挂起,这个时候不会调用该方法。
  3. 如果一个应用被另外一个应用打开, 在代理方法- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation中判断唤起的来源source app,根据Url所携带的参数进行不同的操作。比如跳转到制定的页面,相关的逻辑处理等等.
    //当一个应用程序被其他程序打开的时候会调用这个方法,在该方法中可以实现两个应用程序间的数据局传递
    //当一个应用程序被其他程序打开的时候会调用这个方法,在该方法中可以实现两个应用程序间的数据局传递
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
    {
    NSString *urlStr = [url absoluteString];
    if ([urlStr hasPrefix:@"appB://"]) {
    NSLog(@"appA request params: %@", urlStr);
    urlStr = [urlStr stringByReplacingOccurrencesOfString:@"appB://" withString:@""];
    NSArray *paramArray = [urlStr componentsSeparatedByString:@"&"];
    NSLog(@"paramArray: %@", paramArray);
    NSMutableDictionary *paramsDic = [[NSMutableDictionary alloc] initWithCapacity:0];
    for (int i = 0; i < paramArray.count; i++) {
    NSString *str = paramArray[i];
    NSArray *keyArray = [str componentsSeparatedByString:@"="];
    NSString *key = keyArray[0];
    NSString *value = keyArray[1];
    [paramsDic setObject:value forKey:key];
    NSLog(@"key:%@ ==== value:%@", key, value);
    }
    }
    return NO;
    }

注意:在iOS9之后,还需要在info.plist中添加LSApplicationQueriesSchemes设置为Array,以此来提高app的安全性,需要设置URL Schemes白名单,在白名单里面的才能打开app

白名单

附:

友情参考:
phzean
ZeroIG

上一篇 下一篇

猜你喜欢

热点阅读